nextcloud-server/dist/core-main.js.map

1 line
458 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{"version":3,"sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/core/src/Polyfill/closest.js","webpack:///nextcloud/core/src/Polyfill/console.js","webpack:///nextcloud/core/src/Polyfill/windows-phone.js","webpack:///nextcloud/core/src/OC/legacy-loader.js","webpack:///nextcloud/core/src/OC/notification.js","webpack:///nextcloud/core/src/OC/xhr-error.js","webpack:///nextcloud/core/src/OC/apps.js","webpack:///nextcloud/core/src/OCP/appconfig.js","webpack:///nextcloud/core/src/OC/appconfig.js","webpack:///nextcloud/core/src/OC/appswebroots.js","webpack:///nextcloud/core/src/OC/backbone-webdav.js","webpack:///nextcloud/core/src/OC/backbone.js","webpack:///nextcloud/core/src/OC/config.js","webpack:///nextcloud/core/src/OC/contactsmenu.js","webpack:///nextcloud/core/src/OC/currentuser.js","webpack:///nextcloud/core/src/OCA/index.js","webpack:///nextcloud/core/src/OCA/search.js","webpack:///nextcloud/core/src/OC/dialogs.js","webpack:///nextcloud/core/src/OC/requesttoken.js","webpack:///nextcloud/core/src/OC/eventsource.js","webpack:///nextcloud/core/src/OC/menu.js","webpack:///nextcloud/core/src/OC/constants.js","webpack:///nextcloud/core/src/OC/admin.js","webpack:///nextcloud/core/src/OC/l10n-registry.js","webpack:///nextcloud/core/src/OC/l10n.js","webpack:///nextcloud/core/src/OC/msg.js","webpack:///nextcloud/core/src/OC/password-confirmation.js","webpack:///nextcloud/core/src/OC/theme.js","webpack:///nextcloud/core/src/OC/util-history.js","webpack:///nextcloud/core/src/OC/util.js","webpack:///nextcloud/core/src/OC/debug.js","webpack:///nextcloud/core/src/OC/webroot.js","webpack:///nextcloud/core/src/OC/get_set.js","webpack:///nextcloud/core/src/OC/index.js","webpack:///nextcloud/core/src/OC/appsettings.js","webpack:///nextcloud/core/src/OC/capabilities.js","webpack:///nextcloud/core/src/OC/host.js","webpack:///nextcloud/core/src/OC/query-string.js","webpack:///nextcloud/core/src/OC/plugins.js","webpack:///nextcloud/core/src/OC/navigation.js","webpack:///nextcloud/core/src/OC/routing.js","webpack:///nextcloud/core/src/session-heartbeat.js","webpack:///nextcloud/core/src/init.js","webpack:///nextcloud/core/src/Polyfill/tooltip.js","webpack:///nextcloud/core/src/components/UserMenu.js","webpack:///nextcloud/core/src/components/MainMenu.js","webpack:///nextcloud/core/src/components/ContactsMenu.js","webpack:///nextcloud/core/src/OCP/comments.js","webpack:///nextcloud/core/src/OCP/whatsnew.js","webpack:///nextcloud/core/src/OCP/collaboration.js","webpack:///nextcloud/core/src/globals.js","webpack:///nextcloud/core/src/OCP/loader.js","webpack:///nextcloud/core/src/OCP/toast.js","webpack:///nextcloud/core/src/OCP/index.js","webpack:///nextcloud/core/src/jquery/avatar.js","webpack:///nextcloud/core/src/jquery/contactsmenu.js","webpack:///nextcloud/core/src/jquery/exists.js","webpack:///nextcloud/core/src/jquery/filterattr.js","webpack:///nextcloud/core/src/jquery/ocdialog.js","webpack:///nextcloud/core/src/jquery/octemplate.js","webpack:///nextcloud/core/src/jquery/placeholder.js","webpack:///nextcloud/core/src/jquery/requesttoken.js","webpack:///nextcloud/core/src/jquery/selectrange.js","webpack:///nextcloud/core/src/jquery/showpassword.js","webpack:///nextcloud/core/src/jquery/ui-fixes.js","webpack://nextcloud/./core/src/jquery/css/jquery-ui-fixes.scss?a4c2","webpack://nextcloud/./core/src/jquery/css/jquery.ocdialog.scss?5718","webpack:///nextcloud/core/src/jquery/index.js","webpack:///nextcloud/core/src/main.js","webpack:///nextcloud/core/src/jquery/css/jquery-ui-fixes.scss","webpack:///nextcloud/core/src/jquery/css/jquery.ocdialog.scss","webpack:///nextcloud/core/src/OC/contactsmenu/contact.handlebars","webpack:///nextcloud/core/src/OC/contactsmenu/error.handlebars","webpack:///nextcloud/core/src/OC/contactsmenu/list.handlebars","webpack:///nextcloud/core/src/OC/contactsmenu/loading.handlebars","webpack:///nextcloud/core/src/OC/contactsmenu/menu.handlebars","webpack:///nextcloud/core/src/jquery/contactsmenu/jquery_entry.handlebars","webpack:///nextcloud/node_modules/moment/locale|sync|/^\\.\\/.*$","webpack:///nextcloud/core/src/jquery/css/images/ui-bg_diagonals-thick_20_666666_40x40.png","webpack:///nextcloud/core/src/jquery/css/images/ui-bg_flat_10_000000_40x100.png","webpack:///nextcloud/core/src/jquery/css/images/ui-icons_1d2d44_256x240.png","webpack:///nextcloud/core/src/jquery/css/images/ui-icons_ffd27a_256x240.png","webpack:///nextcloud/core/src/jquery/css/images/ui-icons_ffffff_256x240.png","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/amd define","webpack:///nextcloud/webpack/runtime/amd options","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/startup"],"names":["deferred","Element","prototype","matches","msMatchesSelector","webkitMatchesSelector","closest","s","el","this","parentElement","parentNode","nodeType","console","log","window","noOp","methods","i","length","document","documentElement","style","navigator","userAgent","match","msViewportStyle","createElement","appendChild","createTextNode","getElementsByTagName","loadedScripts","loadedStyles","updatableNotification","getDefaultNotificationFunction","setDefault","callback","hide","$row","_","undefined","each","$","toastify","hideToast","error","call","showHtml","html","options","isHTML","timeout","TOAST_PERMANENT_TIMEOUT","toast","showMessage","toastElement","show","text","toString","split","join","escapeHTML","showUpdate","showTemporary","TOAST_DEFAULT_TIMEOUT","isHidden","find","ajaxConnectionLostHandler","Notification","t","trailing","dynamicSlideToggleEnabled","enableDynamicSlideToggle","Apps","$el","removeClass","trigger","addClass","method","endpoint","OC","type","toUpperCase","url","generateOcsUrl","data","success","bind","getApps","getKeys","app","getValue","key","defaultValue","setValue","value","deleteKey","appConfig","oc_appconfig","AppConfig","_oc_appswebroots","methodMap","create","update","patch","delete","read","parsePropFindResult","result","davProperties","subResult","props","href","propStat","status","properties","propKey","id","parseIdFromLocation","queryPos","indexOf","substr","parts","pop","isSuccessStatus","callPropPatch","client","model","headers","propPatch","attrs","changedProp","warn","convertModelAttributesToDavProperties","changed","then","toJSON","Backbone","VendorBackbone","Object","assign","davCall","dav","baseUrl","xmlNamespaces","resolveUrl","requestToken","propFind","depth","response","propsMapping","results","body","shift","callPropFind","request","callMkCol","responseJson","locationHeader","xhr","getResponseHeader","callMethod","davSync","params","isCollection","Collection","hasInnerCollection","usePUT","collection","Error","urlError","JSON","stringify","processData","textStatus","errorThrown","context","_oc_config","Contact","Model","defaults","fullName","lastMessage","actions","hasOneAction","hasTwoActions","hasManyActions","initialize","get","set","ContactCollection","ContactsListView","View","_collection","_subViews","render","self","forEach","contact","item","ContactsListItemView","append","on","_onChildActionMenuToggle","push","$src","view","className","_template","_model","_actionMenuShown","events","contactTemplate","require","template","_onOtherActionMenuOpened","delegateEvents","imageplaceholder","tooltip","placement","_onToggleActionsMenu","is","ContactsMenuView","_loadingTemplate","_errorTemplate","_contentTemplate","_contactsTemplate","_contacts","_searchTerm","templates","loading","menu","list","_onSearch","e","searchTerm","val","loadingTemplate","errorTemplate","couldNotLoadText","contentTemplate","searchContactsText","contactsTemplate","noContactsFoundText","showAllContactsText","contactsAppMgmtText","showLoading","loadingText","showError","showContacts","viewData","contacts","contactsAppEnabled","contactsAppURL","canInstallApp","contactsAppMgmtURL","searchVal","focus","ContactsMenu","_$trigger","_view","_contactsPromise","_loadContacts","_toggleVisibility","Promise","resolve","_getContacts","filter","term","catch","rawUid","getAttribute","displayName","currentUser","Search","global","emit","token","Dialogs","YES_NO_BUTTONS","OK_BUTTONS","FILEPICKER_TYPE_CHOOSE","FILEPICKER_TYPE_MOVE","FILEPICKER_TYPE_COPY","FILEPICKER_TYPE_COPY_MOVE","FILEPICKER_TYPE_CUSTOM","dialogsCounter","alert","title","modal","message","OK_BUTTON","info","confirm","confirmDestructive","buttons","confirmHtml","prompt","name","password","_getMessageTemplate","$tmpl","dialogName","dialogId","$dlg","octemplate","dialog_name","input","attr","label","buttonlist","click","ocdialog","defaultButton","closeOnEscape","close","filepicker","multiselect","mimetypeFilter","path","sortField","sortOrder","emptyText","newText","filesClient","OCA","filelist","allowDirectoryChooser","_getFilePickerTemplate","$filePicker","emptytext","newtext","nameCol","sizeCol","modifiedCol","remove","$showGridView","_onGridviewChange","_getGridSettings","newButton","event","stopImmediatePropagation","preventDefault","$input","submit","newName","lastPos","lastIndexOf","selectRange","$form","stopPropagation","filename","trimmedName","trim","isFileNameValid","file","escape","checkInput","newname","createDirectory","always","_fillFilePicker","keypress","keyCode","which","ready","$fileListHeader","$filelist","$filelistContainer","$dirTree","_handleTreeListSelect","_handlePickerClick","dir","currentTarget","functionToCall","returnType","datapath","index","element","selectedName","button","width","height","buttonEnableDisable","prop","fail","content","dialogType","allowHtml","escapeFunction","cancel","classes","confirmClasses","closeCallback","_fileexistsshown","fileexists","original","replacement","controller","dialogDeferred","resampleHermite","canvas","W","H","W2","H2","Math","round","img","getContext","getImageData","img2","data2","ratio_w","ratio_h","ratio_w_half","ceil","ratio_h_half","j","x2","weight","weights","weights_alpha","gx_r","gx_g","gx_b","gx_a","center_y","yy","floor","dy","abs","center_x","w0","xx","dx","w","sqrt","clearRect","max","putImageData","addConflict","$conflicts","$conflict","clone","$originalDiv","$replacementDiv","size","mtime","lastModified","directory","urlSpec","x","y","c","etag","forceIcon","previewpath","Files","generatePreviewUrl","replace","css","FileReader","reader","onload","blob","Blob","target","URL","webkitURL","originalUrl","createObjectURL","image","Image","src","min","drawImage","toDataURL","readAsArrayBuffer","reject","getCroppedPreview","checkboxId","count","n","parent","children","_getFileExistsTemplate","allnewfiles","allexistingfiles","why","what","onCancel","onContinue","closeButton","$primaryButton","updatePrimaryButton","checkedCount","$checkbox","promise","checked","gridview","next","toggleClass","defer","$filePickerTemplate","tmpl","$listTmpl","detach","jqXHR","$messageTemplate","$fileexistsTemplate","_getFileList","mimeType","mimetypes","empty","getFolderContents","files","mimetype","Comparators","fileInfo1","fileInfo2","comparator","sort","file1","file2","isFavorite","fileInfo","tags","_fillSlug","idx","entry","simpleSize","sizeColor","icon","parseInt","pow","filename1","filename2","date","previewUrl","addButton","$template","paths","prepend","prependTo","getOcDialog","_changeButtonsText","$element","ctrlKey","copyText","folder","moveText","eq","manageFromDocument","getToken","setToken","newToken","OCEventSource","joinChar","dataStr","typelessListeners","closed","listeners","encodeURIComponent","useFallBack","EventSource","iframeId","iframeCount","fallBackSources","iframe","source","onmessage","parse","listen","fallBackCallBack","done","lastLength","addEventListener","currentMenu","hideMenus","complete","lastMenu","slideUp","apply","arguments","isAdmin","_oc_isadmin","_oc_l10n_registry_translations","_oc_l10n_registry_plural_functions","hasAppTranslations","appId","getAppTranslations","translations","pluralFunction","L10n","load","appName","generateFilePath","register","pluralForm","bundle","_getPlural","extend","_unregister","translate","vars","allOptions","sanitize","optSanitize","DOMPurify","identity","optEscape","translation","a","b","r","_build","translatePlural","textSingular","textPlural","identifier","plural","number","language","substring","Handlebars","startSaving","selector","startAction","stop","finishedSaving","finishedAction","finishedSuccess","finishedError","delay","fadeOut","pageLoadTime","init","requirePasswordConfirmation","moment","requiresPasswordConfirmation","serverTimeDiff","nc_pageLoad","timeSinceLogin","nc_lastLogin","backendAllowsPasswordConfirmation","rejectCallback","config","_confirmPassword","$dialog","$error","$buttons","generateUrl","lastLogin","theme","_theme","_handlers","_pushState","strParams","history","pushState","location","pathname","toLowerCase","pattern","patterns","querySelectorAll","ii","fill","stroke","removeAttribute","setAttribute","replaceState","hash","_cancelPop","addOnPopStateHandler","handler","_parseHashQuery","pos","_decodeQuery","query","parseUrlQuery","search","_onPopState","state","chunkify","tz","charAt","m","History","humanFileSize","computerFileSize","string","bytes","parseFloat","isFinite","k","kb","mb","gb","g","tb","pb","p","formatDate","timestamp","format","TESTING","relativeModifiedDate","diff","fromNow","getScrollBarWidth","_scrollBarWidth","inner","outer","position","top","left","visibility","overflow","w1","offsetWidth","w2","clientWidth","removeChild","stripTime","Date","getFullYear","getMonth","getDate","naturalSortCompare","aa","bb","aNum","Number","bNum","localeCompare","waitFor","interval","internalCallback","setTimeout","isCookieSetToValue","cookies","cookie","debug","_oc_debug","webroot","_oc_webroot","coreApps","menuSpeed","PERMISSION_ALL","PERMISSION_CREATE","PERMISSION_DELETE","PERMISSION_NONE","PERMISSION_READ","PERMISSION_SHARE","PERMISSION_UPDATE","TAG_FAVORITE","fileIsBlacklisted","Config","addScript","script","addStyle","createStyleSheet","appSettings","args","appid","scriptName","cache","settings","popup","hasClass","arrowclass","loadJS","scriptname","jqxhr","appswebroots","dialogs","getCurrentUser","uid","isUserAdmin","L10N","_ajaxConnectionLostHandler","_processAjaxError","statusText","timer","setInterval","clearInterval","registerXHRForErrorProcessing","readyState","getCapabilities","realGetCapabilities","registerMenu","$toggle","$menuEl","toggle","headerMenu","isClickableElement","slideToggle","showMenu","unregisterMenu","off","basename","encodePath","dirname","isSamePath","joinPaths","getHost","host","getHostName","hostname","getPort","port","getProtocol","protocol","getCanonicalLocale","getLocale","getLanguage","addTranslations","buildQueryString","parseQueryString","queryString","components","part","decodeURIComponent","msg","PasswordConfirmation","Plugins","_plugins","targetName","plugin","plugins","getPlugins","attach","targetObject","Util","filePath","namespaces","tail","getRootPath","getRootUrl","imagePath","redirect","targetURL","reload","getRequestToken","linkTo","linkToOCS","service","version","ocsVersion","linkToRemote","generateRemoteUrl","linkToRemoteBase","realGetRootUrl","subscribe","resp","poll","setRequestToken","startPolling","NaN","session_lifetime","isNaN","getInterval","resizeMenu","appList","rightHeaderWidth","outerWidth","availableWidth","isMobile","lastShownApp","appCount","localeAliases","zh","zh_Hans","zh_Hans_CN","zh_Hans_HK","zh_Hans_MO","zh_Hans_SG","zh_Hant","zh_Hant_HK","zh_Hant_MO","zh_Hant_TW","locale","hasOwnProperty","initCore","$menu","$excludedPageClasses","cssVars","watch","onlyLegacy","test","exec","allowAuthErrors","loadState","loadConfig","auto_logout","lastActive","now","localStorage","setItem","newValue","logoutUrl","registerAutoLogout","session_keepalive","initSessionHeartBeat","setNavigationCounter","counter","appmenuElement","getElementById","querySelector","appsElement","classList","mask","add","textContent","$navigation","$appmenu","delegate","$app","metaKey","Theming","inverted","setUpMainMenu","$page","includes","caretPosition","offset","resize","snapper","Snap","disable","maxPosition","minDragDistance","animating","oldSnapperOpen","open","oldSnapperClose","_snapperOpen","_snapperClose","$target","navigationBarSlideGestureEnabled","navigationBarSlideGestureAllowed","navigationBarSlideGestureEnablePending","enable","toggleSnapperOnSize","ex","TypeError","urlRegex","plainToRich","formatLinksRich","richToPlain","formatLinksPlain","leadingSpace","trailingSpace","linkText","$content","$this","dismissOptions","dismiss","menuItem","div","innerText","ocs","product","onclick","whatsNew","regular","whatsNewTextItem","innerHTML","changelogURL","rel","onQuerySuccess","onQueryError","onDismissSuccess","onDismissError","func","funcName","oldFunc","newFunc","types","loadedStylesheets","loadScript","scriptPath","btoa","onerror","head","loadStylesheet","stylePath","link","showSuccess","warning","showWarning","showInfo","Collaboration","registerType","typeDefinition","action","getTypes","keys","getIcon","typeIconClass","getLabel","typeString","getLink","Comments","InitialState","Loader","Toast","WhatsNew","warnIfNotTesting","setDeprecatedProp","cb","Array","isArray","defineProperty","autosize","ClipboardJS","md5","OCP","user","ie8fix","hidedefault","displayname","setAvatarForUnknownUser","String","$div","devicePixelRatio","oc_userconfig","avatar","clearimageplaceholder","alt","entryTemplate","shareWith","shareType","appendTo","$list","topAction","concat","hyperlink","clickedList","has","clickedTarget","attrName","attrValue","_create","originalCss","display","originalTitle","tabIndex","role","insertBefore","removeAttr","enterCallback","$buttonrow","$button","_setOptions","_createOverlay","_init","_trigger","_setOption","$title","_setSizes","$defaultButton","$closeButton","closeCB","lessHeight","outerHeight","contentDiv","overlay","_destroyOverlay","widget","setEnterCallback","unsetEnterCallback","destroy","Template","elem","_html","o","outerHTML","toRgb","Color","mixPalette","steps","color1","color2","palette","step","ends","stepCalc","red","yellow","blue","palette1","palette2","palette3","maximum","finalInt","hashToInt","seed","rgb","placeholderText","map","word","elm","crossDomain","setRequestHeader","start","end","setSelectionRange","createTextRange","range","collapse","moveEnd","moveStart","select","showPassword","fn","setState","checkbox","$clone","class","tabindex","autocomplete","cloneElement","insertAfter","contents","areaSelector","area","hideArea","slideDown","showArea","onpopstate","___CSS_LOADER_EXPORT___","___CSS_LOADER_URL_REPLACEMENT_0___","___CSS_LOADER_URL_REPLACEMENT_1___","___CSS_LOADER_URL_REPLACEMENT_2___","___CSS_LOADER_URL_REPLACEMENT_3___","___CSS_LOADER_URL_REPLACEMENT_4___","module","exports","container","depth0","helpers","partials","stack1","lookupProperty","propertyName","nullContext","program","noop","alias1","lambda","alias2","escapeExpression","helper","hooks","helperMissing","alias3","alias4","webpackContext","req","webpackContextResolve","__webpack_require__","code","__webpack_module_cache__","moduleId","cachedModule","loaded","__webpack_modules__","amdD","amdO","O","chunkIds","priority","notFulfilled","Infinity","fulfilled","every","splice","getter","__esModule","d","definition","enumerable","globalThis","Function","obj","Symbol","toStringTag","nmd","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","__webpack_exports__"],"mappings":"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","file":"core-main.js?v=e008c9f9eba103c72c24","sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","/**\n * @copyright Copyright (c) 2016 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\n// https://developer.mozilla.org/en-US/docs/Web/API/Element/closest#Polyfill\n\nif (!Element.prototype.matches) {\n\tElement.prototype.matches\n\t\t= Element.prototype.msMatchesSelector\n\t\t|| Element.prototype.webkitMatchesSelector\n}\n\nif (!Element.prototype.closest) {\n\tElement.prototype.closest = function(s) {\n\t\tlet el = this\n\n\t\tdo {\n\t\t\tif (el.matches(s)) return el\n\t\t\tel = el.parentElement || el.parentNode\n\t\t} while (el !== null && el.nodeType === 1)\n\t\treturn null\n\t}\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\n/* eslint-disable no-console */\nif (typeof console === 'undefined' || typeof console.log === 'undefined') {\n\tif (!window.console) {\n\t\twindow.console = {}\n\t}\n\tconst noOp = () => {}\n\tconst methods = ['log', 'debug', 'warn', 'info', 'error', 'assert', 'time', 'timeEnd']\n\tfor (let i = 0; i < methods.length; i++) {\n\t\tconsole[methods[i]] = noOp\n\t}\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\n// fix device width on windows phone\nif ('-ms-user-select' in document.documentElement.style && navigator.userAgent.match(/IEMobile\\/10\\.0/)) {\n\tconst msViewportStyle = document.createElement('style')\n\tmsViewportStyle.appendChild(\n\t\tdocument.createTextNode('@-ms-viewport{width:auto!important}')\n\t)\n\tdocument.getElementsByTagName('head')[0].appendChild(msViewportStyle)\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\n/** @typedef {import('jquery')} jQuery */\nimport $ from 'jquery'\nimport { generateFilePath } from '@nextcloud/router'\n\nconst loadedScripts = {}\nconst loadedStyles = []\n\n/**\n * Load a script for the server and load it. If the script is already loaded,\n * the event handler will be called directly\n *\n * @param {string} app the app id to which the script belongs\n * @param {string} script the filename of the script\n * @param {Function} ready event handler to be called when the script is loaded\n * @return {jQuery.Deferred}\n * @deprecated 16.0.0 Use OCP.Loader.loadScript\n */\nexport const addScript = (app, script, ready) => {\n\tconsole.warn('OC.addScript is deprecated, use OCP.Loader.loadScript instead')\n\n\tlet deferred\n\tconst path = generateFilePath(app, 'js', script + '.js')\n\tif (!loadedScripts[path]) {\n\t\tdeferred = $.Deferred()\n\t\t$.getScript(path, () => deferred.resolve())\n\t\tloadedScripts[path] = deferred\n\t} else {\n\t\tif (ready) {\n\t\t\tready()\n\t\t}\n\t}\n\treturn loadedScripts[path]\n}\n\n/**\n * Loads a CSS file\n *\n * @param {string} app the app id to which the css style belongs\n * @param {string} style the filename of the css file\n * @deprecated 16.0.0 Use OCP.Loader.loadStylesheet\n */\nexport const addStyle = (app, style) => {\n\tconsole.warn('OC.addStyle is deprecated, use OCP.Loader.loadStylesheet instead')\n\n\tconst path = generateFilePath(app, 'css', style + '.css')\n\tif (loadedStyles.indexOf(path) === -1) {\n\t\tloadedStyles.push(path)\n\t\tif (document.createStyleSheet) {\n\t\t\tdocument.createStyleSheet(path)\n\t\t} else {\n\t\t\tstyle = $('<link rel=\"stylesheet\" type=\"text/css\" href=\"' + path + '\"/>')\n\t\t\t$('head').append(style)\n\t\t}\n\t}\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Daniel Calviño Sánchez <danxuliu@gmail.com>\n * @author Joas Schilling <coding@schilljs.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author npmbuildbot[bot] \"npmbuildbot[bot]@users.noreply.github.com\"\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\nimport _ from 'underscore'\n/** @typedef {import('jquery')} jQuery */\nimport $ from 'jquery'\nimport { showMessage, TOAST_DEFAULT_TIMEOUT, TOAST_PERMANENT_TIMEOUT } from '@nextcloud/dialogs'\n\n/**\n * @todo Write documentation\n * @deprecated 17.0.0 use the `@nextcloud/dialogs` package instead\n * @namespace OC.Notification\n */\nexport default {\n\n\tupdatableNotification: null,\n\n\tgetDefaultNotificationFunction: null,\n\n\t/**\n\t * @param {Function} callback callback function\n\t * @deprecated 17.0.0 use the `@nextcloud/dialogs` package\n\t */\n\tsetDefault(callback) {\n\t\tthis.getDefaultNotificationFunction = callback\n\t},\n\n\t/**\n\t * Hides a notification.\n\t *\n\t * If a row is given, only hide that one.\n\t * If no row is given, hide all notifications.\n\t *\n\t * @param {jQuery} [$row] notification row\n\t * @param {Function} [callback] callback\n\t * @deprecated 17.0.0 use the `@nextcloud/dialogs` package\n\t */\n\thide($row, callback) {\n\t\tif (_.isFunction($row)) {\n\t\t\t// first arg is the callback\n\t\t\tcallback = $row\n\t\t\t$row = undefined\n\t\t}\n\n\t\tif (!$row) {\n\t\t\tconsole.error('Missing argument $row in OC.Notification.hide() call, caller needs to be adjusted to only dismiss its own notification')\n\t\t\treturn\n\t\t}\n\n\t\t// remove the row directly\n\t\t$row.each(function() {\n\t\t\tif ($(this)[0].toastify) {\n\t\t\t\t$(this)[0].toastify.hideToast()\n\t\t\t} else {\n\t\t\t\tconsole.error('cannot hide toast because object is not set')\n\t\t\t}\n\t\t\tif (this === this.updatableNotification) {\n\t\t\t\tthis.updatableNotification = null\n\t\t\t}\n\t\t})\n\t\tif (callback) {\n\t\t\tcallback.call()\n\t\t}\n\t\tif (this.getDefaultNotificationFunction) {\n\t\t\tthis.getDefaultNotificationFunction()\n\t\t}\n\t},\n\n\t/**\n\t * Shows a notification as HTML without being sanitized before.\n\t * If you pass unsanitized user input this may lead to a XSS vulnerability.\n\t * Consider using show() instead of showHTML()\n\t *\n\t * @param {string} html Message to display\n\t * @param {object} [options] options\n\t * @param {string} [options.type] notification type\n\t * @param {number} [options.timeout=0] timeout value, defaults to 0 (permanent)\n\t * @return {jQuery} jQuery element for notification row\n\t * @deprecated 17.0.0 use the `@nextcloud/dialogs` package\n\t */\n\tshowHtml(html, options) {\n\t\toptions = options || {}\n\t\toptions.isHTML = true\n\t\toptions.timeout = (!options.timeout) ? TOAST_PERMANENT_TIMEOUT : options.timeout\n\t\tconst toast = showMessage(html, options)\n\t\ttoast.toastElement.toastify = toast\n\t\treturn $(toast.toastElement)\n\t},\n\n\t/**\n\t * Shows a sanitized notification\n\t *\n\t * @param {string} text Message to display\n\t * @param {object} [options] options\n\t * @param {string} [options.type] notification type\n\t * @param {number} [options.timeout=0] timeout value, defaults to 0 (permanent)\n\t * @return {jQuery} jQuery element for notification row\n\t * @deprecated 17.0.0 use the `@nextcloud/dialogs` package\n\t */\n\tshow(text, options) {\n\t\tconst escapeHTML = function(text) {\n\t\t\treturn text.toString()\n\t\t\t\t.split('&').join('&amp;')\n\t\t\t\t.split('<').join('&lt;')\n\t\t\t\t.split('>').join('&gt;')\n\t\t\t\t.split('\"').join('&quot;')\n\t\t\t\t.split('\\'').join('&#039;')\n\t\t}\n\n\t\toptions = options || {}\n\t\toptions.timeout = (!options.timeout) ? TOAST_PERMANENT_TIMEOUT : options.timeout\n\t\tconst toast = showMessage(escapeHTML(text), options)\n\t\ttoast.toastElement.toastify = toast\n\t\treturn $(toast.toastElement)\n\t},\n\n\t/**\n\t * Updates (replaces) a sanitized notification.\n\t *\n\t * @param {string} text Message to display\n\t * @return {jQuery} JQuery element for notificaiton row\n\t * @deprecated 17.0.0 use the `@nextcloud/dialogs` package\n\t */\n\tshowUpdate(text) {\n\t\tif (this.updatableNotification) {\n\t\t\tthis.updatableNotification.hideToast()\n\t\t}\n\t\tthis.updatableNotification = showMessage(text, { timeout: TOAST_PERMANENT_TIMEOUT })\n\t\tthis.updatableNotification.toastElement.toastify = this.updatableNotification\n\t\treturn $(this.updatableNotification.toastElement)\n\t},\n\n\t/**\n\t * Shows a notification that disappears after x seconds, default is\n\t * 7 seconds\n\t *\n\t * @param {string} text Message to show\n\t * @param {Array} [options] options array\n\t * @param {number} [options.timeout=7] timeout in seconds, if this is 0 it will show the message permanently\n\t * @param {boolean} [options.isHTML=false] an indicator for HTML notifications (true) or text (false)\n\t * @param {string} [options.type] notification type\n\t * @return {JQuery} the toast element\n\t * @deprecated 17.0.0 use the `@nextcloud/dialogs` package\n\t */\n\tshowTemporary(text, options) {\n\t\toptions = options || {}\n\t\toptions.timeout = options.timeout || TOAST_DEFAULT_TIMEOUT\n\t\tconst toast = showMessage(text, options)\n\t\ttoast.toastElement.toastify = toast\n\t\treturn $(toast.toastElement)\n\t},\n\n\t/**\n\t * Returns whether a notification is hidden.\n\t *\n\t * @return {boolean}\n\t * @deprecated 17.0.0 use the `@nextcloud/dialogs` package\n\t */\n\tisHidden() {\n\t\treturn !$('#content').find('.toastify').length\n\t},\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\nimport _ from 'underscore'\nimport $ from 'jquery'\n\nimport OC from './index'\nimport Notification from './notification'\n\n/**\n * Warn users that the connection to the server was lost temporarily\n *\n * This function is throttled to prevent stacked notfications.\n * After 7sec the first notification is gone, then we can show another one\n * if necessary.\n */\nexport const ajaxConnectionLostHandler = _.throttle(() => {\n\tNotification.showTemporary(t('core', 'Connection to server lost'))\n}, 7 * 1000, { trailing: false })\n\n/**\n * Process ajax error, redirects to main page\n * if an error/auth error status was returned.\n *\n * @param {XMLHttpRequest} xhr xhr request\n */\nexport const processAjaxError = xhr => {\n\t// purposefully aborted request ?\n\t// OC._userIsNavigatingAway needed to distinguish ajax calls cancelled by navigating away\n\t// from calls cancelled by failed cross-domain ajax due to SSO redirect\n\tif (xhr.status === 0 && (xhr.statusText === 'abort' || xhr.statusText === 'timeout' || OC._reloadCalled)) {\n\t\treturn\n\t}\n\n\tif (_.contains([302, 303, 307, 401], xhr.status) && OC.currentUser) {\n\t\t// sometimes \"beforeunload\" happens later, so need to defer the reload a bit\n\t\tsetTimeout(function() {\n\t\t\tif (!OC._userIsNavigatingAway && !OC._reloadCalled) {\n\t\t\t\tlet timer = 0\n\t\t\t\tconst seconds = 5\n\t\t\t\tconst interval = setInterval(function() {\n\t\t\t\t\tNotification.showUpdate(n('core', 'Problem loading page, reloading in %n second', 'Problem loading page, reloading in %n seconds', seconds - timer))\n\t\t\t\t\tif (timer >= seconds) {\n\t\t\t\t\t\tclearInterval(interval)\n\t\t\t\t\t\tOC.reload()\n\t\t\t\t\t}\n\t\t\t\t\ttimer++\n\t\t\t\t}, 1000 // 1 second interval\n\t\t\t\t)\n\n\t\t\t\t// only call reload once\n\t\t\t\tOC._reloadCalled = true\n\t\t\t}\n\t\t}, 100)\n\t} else if (xhr.status === 0) {\n\t\t// Connection lost (e.g. WiFi disconnected or server is down)\n\t\tsetTimeout(function() {\n\t\t\tif (!OC._userIsNavigatingAway && !OC._reloadCalled) {\n\t\t\t\t// TODO: call method above directly\n\t\t\t\tOC._ajaxConnectionLostHandler()\n\t\t\t}\n\t\t}, 100)\n\t}\n}\n\n/**\n * Registers XmlHttpRequest object for global error processing.\n *\n * This means that if this XHR object returns 401 or session timeout errors,\n * the current page will automatically be reloaded.\n *\n * @param {XMLHttpRequest} xhr xhr request\n */\nexport const registerXHRForErrorProcessing = xhr => {\n\tconst loadCallback = () => {\n\t\tif (xhr.readyState !== 4) {\n\t\t\treturn\n\t\t}\n\n\t\tif ((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304) {\n\t\t\treturn\n\t\t}\n\n\t\t// fire jquery global ajax error handler\n\t\t$(document).trigger(new $.Event('ajaxError'), xhr)\n\t}\n\n\tconst errorCallback = () => {\n\t\t// fire jquery global ajax error handler\n\t\t$(document).trigger(new $.Event('ajaxError'), xhr)\n\t}\n\n\tif (xhr.addEventListener) {\n\t\txhr.addEventListener('load', loadCallback)\n\t\txhr.addEventListener('error', errorCallback)\n\t}\n\n}\n","/**\n * @copyright Bernhard Posselt 2014\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\nlet dynamicSlideToggleEnabled = false\n\nconst Apps = {\n\tenableDynamicSlideToggle() {\n\t\tdynamicSlideToggleEnabled = true\n\t},\n}\n\n/**\n * Shows the #app-sidebar and add .with-app-sidebar to subsequent siblings\n *\n * @param {object} [$el] sidebar element to show, defaults to $('#app-sidebar')\n */\nApps.showAppSidebar = function($el) {\n\tconst $appSidebar = $el || $('#app-sidebar')\n\t$appSidebar.removeClass('disappear').show()\n\t$('#app-content').trigger(new $.Event('appresized'))\n}\n\n/**\n * Shows the #app-sidebar and removes .with-app-sidebar from subsequent\n * siblings\n *\n * @param {object} [$el] sidebar element to hide, defaults to $('#app-sidebar')\n */\nApps.hideAppSidebar = function($el) {\n\tconst $appSidebar = $el || $('#app-sidebar')\n\t$appSidebar.hide().addClass('disappear')\n\t$('#app-content').trigger(new $.Event('appresized'))\n}\n\n/**\n * Provides a way to slide down a target area through a button and slide it\n * up if the user clicks somewhere else. Used for the news app settings and\n * add new field.\n *\n * Usage:\n * <button data-apps-slide-toggle=\".slide-area\">slide</button>\n * <div class=\".slide-area\" class=\"hidden\">I'm sliding up</div>\n */\nexport const registerAppsSlideToggle = () => {\n\tlet buttons = $('[data-apps-slide-toggle]')\n\n\tif (buttons.length === 0) {\n\t\t$('#app-navigation').addClass('without-app-settings')\n\t}\n\n\t$(document).click(function(event) {\n\n\t\tif (dynamicSlideToggleEnabled) {\n\t\t\tbuttons = $('[data-apps-slide-toggle]')\n\t\t}\n\n\t\tbuttons.each(function(index, button) {\n\n\t\t\tconst areaSelector = $(button).data('apps-slide-toggle')\n\t\t\tconst area = $(areaSelector)\n\n\t\t\t/**\n\t\t\t *\n\t\t\t */\n\t\t\tfunction hideArea() {\n\t\t\t\tarea.slideUp(OC.menuSpeed * 4, function() {\n\t\t\t\t\tarea.trigger(new $.Event('hide'))\n\t\t\t\t})\n\t\t\t\tarea.removeClass('opened')\n\t\t\t\t$(button).removeClass('opened')\n\t\t\t}\n\n\t\t\t/**\n\t\t\t *\n\t\t\t */\n\t\t\tfunction showArea() {\n\t\t\t\tarea.slideDown(OC.menuSpeed * 4, function() {\n\t\t\t\t\tarea.trigger(new $.Event('show'))\n\t\t\t\t})\n\t\t\t\tarea.addClass('opened')\n\t\t\t\t$(button).addClass('opened')\n\t\t\t\tconst input = $(areaSelector + ' [autofocus]')\n\t\t\t\tif (input.length === 1) {\n\t\t\t\t\tinput.focus()\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// do nothing if the area is animated\n\t\t\tif (!area.is(':animated')) {\n\n\t\t\t\t// button toggles the area\n\t\t\t\tif ($(button).is($(event.target).closest('[data-apps-slide-toggle]'))) {\n\t\t\t\t\tif (area.is(':visible')) {\n\t\t\t\t\t\thideArea()\n\t\t\t\t\t} else {\n\t\t\t\t\t\tshowArea()\n\t\t\t\t\t}\n\n\t\t\t\t\t// all other areas that have not been clicked but are open\n\t\t\t\t\t// should be slid up\n\t\t\t\t} else {\n\t\t\t\t\tconst closest = $(event.target).closest(areaSelector)\n\t\t\t\t\tif (area.is(':visible') && closest[0] !== area[0]) {\n\t\t\t\t\t\thideArea()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\n\t})\n}\n\nexport default Apps\n","/**\n * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\nimport { generateOcsUrl } from '@nextcloud/router'\n\nimport OC from '../OC/index'\n\n/**\n * @param {string} method 'post' or 'delete'\n * @param {string} endpoint endpoint\n * @param {object} [options] destructuring object\n * @param {object} [options.data] option data\n * @param {Function} [options.success] success callback\n * @param {Function} [options.error] error callback\n */\nfunction call(method, endpoint, options) {\n\tif ((method === 'post' || method === 'delete') && OC.PasswordConfirmation.requiresPasswordConfirmation()) {\n\t\tOC.PasswordConfirmation.requirePasswordConfirmation(_.bind(call, this, method, endpoint, options))\n\t\treturn\n\t}\n\n\toptions = options || {}\n\t$.ajax({\n\t\ttype: method.toUpperCase(),\n\t\turl: generateOcsUrl('apps/provisioning_api/api/v1/config/apps') + endpoint,\n\t\tdata: options.data || {},\n\t\tsuccess: options.success,\n\t\terror: options.error,\n\t})\n}\n\n/**\n * @param {object} [options] destructuring object\n * @param {Function} [options.success] success callback\n * @since 11.0.0\n */\nexport function getApps(options) {\n\tcall('get', '', options)\n}\n\n/**\n * @param {string} app app id\n * @param {object} [options] destructuring object\n * @param {Function} [options.success] success callback\n * @param {Function} [options.error] error callback\n * @since 11.0.0\n */\nexport function getKeys(app, options) {\n\tcall('get', '/' + app, options)\n}\n\n/**\n * @param {string} app app id\n * @param {string} key key\n * @param {string | Function} defaultValue default value\n * @param {object} [options] destructuring object\n * @param {Function} [options.success] success callback\n * @param {Function} [options.error] error callback\n * @since 11.0.0\n */\nexport function getValue(app, key, defaultValue, options) {\n\toptions = options || {}\n\toptions.data = {\n\t\tdefaultValue,\n\t}\n\n\tcall('get', '/' + app + '/' + key, options)\n}\n\n/**\n * @param {string} app app id\n * @param {string} key key\n * @param {string} value value\n * @param {object} [options] destructuring object\n * @param {Function} [options.success] success callback\n * @param {Function} [options.error] error callback\n * @since 11.0.0\n */\nexport function setValue(app, key, value, options) {\n\toptions = options || {}\n\toptions.data = {\n\t\tvalue,\n\t}\n\n\tcall('post', '/' + app + '/' + key, options)\n}\n\n/**\n * @param {string} app app id\n * @param {string} key key\n * @param {object} [options] destructuring object\n * @param {Function} [options.success] success callback\n * @param {Function} [options.error] error callback\n * @since 11.0.0\n */\nexport function deleteKey(app, key, options) {\n\tcall('delete', '/' + app + '/' + key, options)\n}\n","/**\n * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Joas Schilling <coding@schilljs.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Jörn Friedrich Dreyer <jfd@butonic.de>\n * @author Robin Appelman <robin@icewind.nl>\n * @author Vincent Petry <vincent@nextcloud.com>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\n/* eslint-disable */\n import { getValue, setValue, getApps, getKeys, deleteKey } from '../OCP/appconfig'\n\nexport const appConfig = window.oc_appconfig || {}\n\n/**\n * @namespace\n * @deprecated 16.0.0 Use OCP.AppConfig instead\n */\nexport const AppConfig = {\n\t/**\n\t * @deprecated Use OCP.AppConfig.getValue() instead\n\t */\n\tgetValue: function(app, key, defaultValue, callback) {\n\t\tgetValue(app, key, defaultValue, {\n\t\t\tsuccess: callback\n\t\t})\n\t},\n\n\t/**\n\t * @deprecated Use OCP.AppConfig.setValue() instead\n\t */\n\tsetValue: function(app, key, value) {\n\t\tsetValue(app, key, value)\n\t},\n\n\t/**\n\t * @deprecated Use OCP.AppConfig.getApps() instead\n\t */\n\tgetApps: function(callback) {\n\t\tgetApps({\n\t\t\tsuccess: callback\n\t\t})\n\t},\n\n\t/**\n\t * @deprecated Use OCP.AppConfig.getKeys() instead\n\t */\n\tgetKeys: function(app, callback) {\n\t\tgetKeys(app, {\n\t\t\tsuccess: callback\n\t\t})\n\t},\n\n\t/**\n\t * @deprecated Use OCP.AppConfig.deleteKey() instead\n\t */\n\tdeleteKey: function(app, key) {\n\t\tdeleteKey(app, key)\n\t}\n\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\nconst appswebroots = (window._oc_appswebroots !== undefined) ? window._oc_appswebroots : false\n\nexport default appswebroots\n","/**\n * Copyright (c) 2015\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\n/* eslint-disable */\nimport _ from 'underscore'\nimport { dav } from 'davclient.js'\n\nconst methodMap = {\n\tcreate: 'POST',\n\tupdate: 'PROPPATCH',\n\tpatch: 'PROPPATCH',\n\tdelete: 'DELETE',\n\tread: 'PROPFIND'\n}\n\n// Throw an error when a URL is needed, and none is supplied.\nfunction urlError() {\n\tthrow new Error('A \"url\" property or function must be specified')\n}\n\n/**\n * Convert a single propfind result to JSON\n *\n * @param {Object} result\n * @param {Object} davProperties properties mapping\n */\nfunction parsePropFindResult(result, davProperties) {\n\tif (_.isArray(result)) {\n\t\treturn _.map(result, function(subResult) {\n\t\t\treturn parsePropFindResult(subResult, davProperties)\n\t\t})\n\t}\n\tvar props = {\n\t\thref: result.href\n\t}\n\n\t_.each(result.propStat, function(propStat) {\n\t\tif (propStat.status !== 'HTTP/1.1 200 OK') {\n\t\t\treturn\n\t\t}\n\n\t\tfor (var key in propStat.properties) {\n\t\t\tvar propKey = key\n\t\t\tif (key in davProperties) {\n\t\t\t\tpropKey = davProperties[key]\n\t\t\t}\n\t\t\tprops[propKey] = propStat.properties[key]\n\t\t}\n\t})\n\n\tif (!props.id) {\n\t\t// parse id from href\n\t\tprops.id = parseIdFromLocation(props.href)\n\t}\n\n\treturn props\n}\n\n/**\n * Parse ID from location\n *\n * @param {string} url url\n * @returns {string} id\n */\nfunction parseIdFromLocation(url) {\n\tvar queryPos = url.indexOf('?')\n\tif (queryPos > 0) {\n\t\turl = url.substr(0, queryPos)\n\t}\n\n\tvar parts = url.split('/')\n\tvar result\n\tdo {\n\t\tresult = parts[parts.length - 1]\n\t\tparts.pop()\n\t\t// note: first result can be empty when there is a trailing slash,\n\t\t// so we take the part before that\n\t} while (!result && parts.length > 0)\n\n\treturn result\n}\n\nfunction isSuccessStatus(status) {\n\treturn status >= 200 && status <= 299\n}\n\nfunction convertModelAttributesToDavProperties(attrs, davProperties) {\n\tvar props = {}\n\tvar key\n\tfor (key in attrs) {\n\t\tvar changedProp = davProperties[key]\n\t\tvar value = attrs[key]\n\t\tif (!changedProp) {\n\t\t\tconsole.warn('No matching DAV property for property \"' + key)\n\t\t\tchangedProp = key\n\t\t}\n\t\tif (_.isBoolean(value) || _.isNumber(value)) {\n\t\t\t// convert to string\n\t\t\tvalue = '' + value\n\t\t}\n\t\tprops[changedProp] = value\n\t}\n\treturn props\n}\n\nfunction callPropFind(client, options, model, headers) {\n\treturn client.propFind(\n\t\toptions.url,\n\t\t_.values(options.davProperties) || [],\n\t\toptions.depth,\n\t\theaders\n\t).then(function(response) {\n\t\tif (isSuccessStatus(response.status)) {\n\t\t\tif (_.isFunction(options.success)) {\n\t\t\t\tvar propsMapping = _.invert(options.davProperties)\n\t\t\t\tvar results = parsePropFindResult(response.body, propsMapping)\n\t\t\t\tif (options.depth > 0) {\n\t\t\t\t\t// discard root entry\n\t\t\t\t\tresults.shift()\n\t\t\t\t}\n\n\t\t\t\toptions.success(results)\n\n\t\t\t}\n\t\t} else if (_.isFunction(options.error)) {\n\t\t\toptions.error(response)\n\t\t}\n\t})\n}\n\nfunction callPropPatch(client, options, model, headers) {\n\treturn client.propPatch(\n\t\toptions.url,\n\t\tconvertModelAttributesToDavProperties(model.changed, options.davProperties),\n\t\theaders\n\t).then(function(result) {\n\t\tif (isSuccessStatus(result.status)) {\n\t\t\tif (_.isFunction(options.success)) {\n\t\t\t\t// pass the object's own values because the server\n\t\t\t\t// does not return the updated model\n\t\t\t\toptions.success(model.toJSON())\n\t\t\t}\n\t\t} else if (_.isFunction(options.error)) {\n\t\t\toptions.error(result)\n\t\t}\n\t})\n\n}\n\nfunction callMkCol(client, options, model, headers) {\n\t// call MKCOL without data, followed by PROPPATCH\n\treturn client.request(\n\t\toptions.type,\n\t\toptions.url,\n\t\theaders,\n\t\tnull\n\t).then(function(result) {\n\t\tif (!isSuccessStatus(result.status)) {\n\t\t\tif (_.isFunction(options.error)) {\n\t\t\t\toptions.error(result)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\n\t\tcallPropPatch(client, options, model, headers)\n\t})\n}\n\nfunction callMethod(client, options, model, headers) {\n\theaders['Content-Type'] = 'application/json'\n\treturn client.request(\n\t\toptions.type,\n\t\toptions.url,\n\t\theaders,\n\t\toptions.data\n\t).then(function(result) {\n\t\tif (!isSuccessStatus(result.status)) {\n\t\t\tif (_.isFunction(options.error)) {\n\t\t\t\toptions.error(result)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\n\t\tif (_.isFunction(options.success)) {\n\t\t\tif (options.type === 'PUT' || options.type === 'POST' || options.type === 'MKCOL') {\n\t\t\t\t// pass the object's own values because the server\n\t\t\t\t// does not return anything\n\t\t\t\tvar responseJson = result.body || model.toJSON()\n\t\t\t\tvar locationHeader = result.xhr.getResponseHeader('Content-Location')\n\t\t\t\tif (options.type === 'POST' && locationHeader) {\n\t\t\t\t\tresponseJson.id = parseIdFromLocation(locationHeader)\n\t\t\t\t}\n\t\t\t\toptions.success(responseJson)\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// if multi-status, parse\n\t\t\tif (result.status === 207) {\n\t\t\t\tvar propsMapping = _.invert(options.davProperties)\n\t\t\t\toptions.success(parsePropFindResult(result.body, propsMapping))\n\t\t\t} else {\n\t\t\t\toptions.success(result.body)\n\t\t\t}\n\t\t}\n\t})\n}\n\nexport const davCall = (options, model) => {\n\tvar client = new dav.Client({\n\t\tbaseUrl: options.url,\n\t\txmlNamespaces: _.extend({\n\t\t\t'DAV:': 'd',\n\t\t\t'http://owncloud.org/ns': 'oc'\n\t\t}, options.xmlNamespaces || {})\n\t})\n\tclient.resolveUrl = function() {\n\t\treturn options.url\n\t}\n\tvar headers = _.extend({\n\t\t'X-Requested-With': 'XMLHttpRequest',\n\t\t'requesttoken': OC.requestToken\n\t}, options.headers)\n\tif (options.type === 'PROPFIND') {\n\t\treturn callPropFind(client, options, model, headers)\n\t} else if (options.type === 'PROPPATCH') {\n\t\treturn callPropPatch(client, options, model, headers)\n\t} else if (options.type === 'MKCOL') {\n\t\treturn callMkCol(client, options, model, headers)\n\t} else {\n\t\treturn callMethod(client, options, model, headers)\n\t}\n}\n\n/**\n * DAV transport\n */\nexport const davSync = Backbone => (method, model, options) => {\n\tvar params = { type: methodMap[method] || method }\n\tvar isCollection = (model instanceof Backbone.Collection)\n\n\tif (method === 'update') {\n\t\t// if a model has an inner collection, it must define an\n\t\t// attribute \"hasInnerCollection\" that evaluates to true\n\t\tif (model.hasInnerCollection) {\n\t\t\t// if the model itself is a Webdav collection, use MKCOL\n\t\t\tparams.type = 'MKCOL'\n\t\t} else if (model.usePUT || (model.collection && model.collection.usePUT)) {\n\t\t\t// use PUT instead of PROPPATCH\n\t\t\tparams.type = 'PUT'\n\t\t}\n\t}\n\n\t// Ensure that we have a URL.\n\tif (!options.url) {\n\t\tparams.url = _.result(model, 'url') || urlError()\n\t}\n\n\t// Ensure that we have the appropriate request data.\n\tif (options.data == null && model && (method === 'create' || method === 'update' || method === 'patch')) {\n\t\tparams.data = JSON.stringify(options.attrs || model.toJSON(options))\n\t}\n\n\t// Don't process data on a non-GET request.\n\tif (params.type !== 'PROPFIND') {\n\t\tparams.processData = false\n\t}\n\n\tif (params.type === 'PROPFIND' || params.type === 'PROPPATCH') {\n\t\tvar davProperties = model.davProperties\n\t\tif (!davProperties && model.model) {\n\t\t\t// use dav properties from model in case of collection\n\t\t\tdavProperties = model.model.prototype.davProperties\n\t\t}\n\t\tif (davProperties) {\n\t\t\tif (_.isFunction(davProperties)) {\n\t\t\t\tparams.davProperties = davProperties.call(model)\n\t\t\t} else {\n\t\t\t\tparams.davProperties = davProperties\n\t\t\t}\n\t\t}\n\n\t\tparams.davProperties = _.extend(params.davProperties || {}, options.davProperties)\n\n\t\tif (_.isUndefined(options.depth)) {\n\t\t\tif (isCollection) {\n\t\t\t\toptions.depth = 1\n\t\t\t} else {\n\t\t\t\toptions.depth = 0\n\t\t\t}\n\t\t}\n\t}\n\n\t// Pass along `textStatus` and `errorThrown` from jQuery.\n\tvar error = options.error\n\toptions.error = function(xhr, textStatus, errorThrown) {\n\t\toptions.textStatus = textStatus\n\t\toptions.errorThrown = errorThrown\n\t\tif (error) {\n\t\t\terror.call(options.context, xhr, textStatus, errorThrown)\n\t\t}\n\t}\n\n\t// Make the request, allowing the user to override any Ajax options.\n\tvar xhr = options.xhr = Backbone.davCall(_.extend(params, options), model)\n\tmodel.trigger('request', model, xhr, options)\n\treturn xhr\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\nimport VendorBackbone from 'backbone'\nimport { davCall, davSync } from './backbone-webdav'\n\nconst Backbone = VendorBackbone.noConflict()\n\n// Patch Backbone for DAV\nObject.assign(Backbone, {\n\tdavCall,\n\tdavSync: davSync(Backbone),\n})\n\nexport default Backbone\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\nconst config = window._oc_config || {}\n\nexport default config\n","/**\n * @copyright 2017 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\n/* eslint-disable */\nimport _ from 'underscore'\nimport $ from 'jquery'\nimport { Collection, Model, View } from 'backbone'\n\nimport OC from './index'\n\n/**\n * @class Contact\n */\nconst Contact = Model.extend({\n\tdefaults: {\n\t\tfullName: '',\n\t\tlastMessage: '',\n\t\tactions: [],\n\t\thasOneAction: false,\n\t\thasTwoActions: false,\n\t\thasManyActions: false\n\t},\n\n\t/**\n\t * @returns {undefined}\n\t */\n\tinitialize: function() {\n\t\t// Add needed property for easier template rendering\n\t\tif (this.get('actions').length === 0) {\n\t\t\tthis.set('hasOneAction', true)\n\t\t} else if (this.get('actions').length === 1) {\n\t\t\tthis.set('hasTwoActions', true)\n\t\t\tthis.set('secondAction', this.get('actions')[0])\n\t\t} else {\n\t\t\tthis.set('hasManyActions', true)\n\t\t}\n\t}\n})\n\n/**\n * @class ContactCollection\n * @private\n */\nconst ContactCollection = Collection.extend({\n\tmodel: Contact\n})\n\n/**\n * @class ContactsListView\n * @private\n */\nconst ContactsListView = View.extend({\n\n\t/** @type {ContactCollection} */\n\t_collection: undefined,\n\n\t/** @type {array} */\n\t_subViews: [],\n\n\t/**\n\t * @param {object} options\n\t * @returns {undefined}\n\t */\n\tinitialize: function(options) {\n\t\tthis._collection = options.collection\n\t},\n\n\t/**\n\t * @returns {self}\n\t */\n\trender: function() {\n\t\tvar self = this\n\t\tself.$el.html('')\n\t\tself._subViews = []\n\n\t\tself._collection.forEach(function(contact) {\n\t\t\tvar item = new ContactsListItemView({\n\t\t\t\tmodel: contact\n\t\t\t})\n\t\t\titem.render()\n\t\t\tself.$el.append(item.$el)\n\t\t\titem.on('toggle:actionmenu', self._onChildActionMenuToggle, self)\n\t\t\tself._subViews.push(item)\n\t\t})\n\n\t\treturn self\n\t},\n\n\t/**\n\t * Event callback to propagate opening (another) entry's action menu\n\t *\n\t * @param {type} $src\n\t * @returns {undefined}\n\t */\n\t_onChildActionMenuToggle: function($src) {\n\t\tthis._subViews.forEach(function(view) {\n\t\t\tview.trigger('parent:toggle:actionmenu', $src)\n\t\t})\n\t}\n})\n\n/**\n * @class ContactsListItemView\n * @private\n */\nconst ContactsListItemView = View.extend({\n\n\t/** @type {string} */\n\tclassName: 'contact',\n\n\t/** @type {undefined|function} */\n\t_template: undefined,\n\n\t/** @type {Contact} */\n\t_model: undefined,\n\n\t/** @type {boolean} */\n\t_actionMenuShown: false,\n\n\tevents: {\n\t\t'click .icon-more': '_onToggleActionsMenu'\n\t},\n\n\tcontactTemplate: require('./contactsmenu/contact.handlebars'),\n\n\t/**\n\t * @param {object} data\n\t * @returns {undefined}\n\t */\n\ttemplate: function(data) {\n\t\treturn this.contactTemplate(data)\n\t},\n\n\t/**\n\t * @param {object} options\n\t * @returns {undefined}\n\t */\n\tinitialize: function(options) {\n\t\tthis._model = options.model\n\t\tthis.on('parent:toggle:actionmenu', this._onOtherActionMenuOpened, this)\n\t},\n\n\t/**\n\t * @returns {self}\n\t */\n\trender: function() {\n\t\tthis.$el.html(this.template({\n\t\t\tcontact: this._model.toJSON()\n\t\t}))\n\t\tthis.delegateEvents()\n\n\t\t// Show placeholder if no avatar is available (avatar is rendered as img, not div)\n\t\tthis.$('div.avatar').imageplaceholder(this._model.get('fullName'))\n\n\t\t// Show tooltip for top action\n\t\tthis.$('.top-action').tooltip({ placement: 'left' })\n\t\t// Show tooltip for second action\n\t\tthis.$('.second-action').tooltip({ placement: 'left' })\n\n\t\treturn this\n\t},\n\n\t/**\n\t * Toggle the visibility of the action popover menu\n\t *\n\t * @private\n\t * @returns {undefined}\n\t */\n\t_onToggleActionsMenu: function() {\n\t\tthis._actionMenuShown = !this._actionMenuShown\n\t\tif (this._actionMenuShown) {\n\t\t\tthis.$('.menu').show()\n\t\t} else {\n\t\t\tthis.$('.menu').hide()\n\t\t}\n\t\tthis.trigger('toggle:actionmenu', this.$el)\n\t},\n\n\t/**\n\t * @private\n\t * @argument {jQuery} $src\n\t * @returns {undefined}\n\t */\n\t_onOtherActionMenuOpened: function($src) {\n\t\tif (this.$el.is($src)) {\n\t\t\t// Ignore\n\t\t\treturn\n\t\t}\n\t\tthis._actionMenuShown = false\n\t\tthis.$('.menu').hide()\n\t}\n})\n\n/**\n * @class ContactsMenuView\n * @private\n */\nconst ContactsMenuView = View.extend({\n\n\t/** @type {undefined|function} */\n\t_loadingTemplate: undefined,\n\n\t/** @type {undefined|function} */\n\t_errorTemplate: undefined,\n\n\t/** @type {undefined|function} */\n\t_contentTemplate: undefined,\n\n\t/** @type {undefined|function} */\n\t_contactsTemplate: undefined,\n\n\t/** @type {undefined|ContactCollection} */\n\t_contacts: undefined,\n\n\t/** @type {string} */\n\t_searchTerm: '',\n\n\tevents: {\n\t\t'input #contactsmenu-search': '_onSearch'\n\t},\n\n\ttemplates: {\n\t\tloading: require('./contactsmenu/loading.handlebars'),\n\t\terror: require('./contactsmenu/error.handlebars'),\n\t\tmenu: require('./contactsmenu/menu.handlebars'),\n\t\tlist: require('./contactsmenu/list.handlebars')\n\t},\n\n\t/**\n\t * @returns {undefined}\n\t */\n\t_onSearch: _.debounce(function(e) {\n\t\tvar searchTerm = this.$('#contactsmenu-search').val()\n\t\t// IE11 triggers an 'input' event after the view has been rendered\n\t\t// resulting in an endless loading loop. To prevent this, we remember\n\t\t// the last search term to savely ignore some events\n\t\t// See https://github.com/nextcloud/server/issues/5281\n\t\tif (searchTerm !== this._searchTerm) {\n\t\t\tthis.trigger('search', this.$('#contactsmenu-search').val())\n\t\t\tthis._searchTerm = searchTerm\n\t\t}\n\t}, 700),\n\n\t/**\n\t * @param {object} data\n\t * @returns {string}\n\t */\n\tloadingTemplate: function(data) {\n\t\treturn this.templates.loading(data)\n\t},\n\n\t/**\n\t * @param {object} data\n\t * @returns {string}\n\t */\n\terrorTemplate: function(data) {\n\t\treturn this.templates.error(\n\t\t\t_.extend({\n\t\t\t\tcouldNotLoadText: t('core', 'Could not load your contacts')\n\t\t\t}, data)\n\t\t)\n\t},\n\n\t/**\n\t * @param {object} data\n\t * @returns {string}\n\t */\n\tcontentTemplate: function(data) {\n\t\treturn this.templates.menu(\n\t\t\t_.extend({\n\t\t\t\tsearchContactsText: t('core', 'Search contacts …')\n\t\t\t}, data)\n\t\t)\n\t},\n\n\t/**\n\t * @param {object} data\n\t * @returns {string}\n\t */\n\tcontactsTemplate: function(data) {\n\t\treturn this.templates.list(\n\t\t\t_.extend({\n\t\t\t\tnoContactsFoundText: t('core', 'No contacts found'),\n\t\t\t\tshowAllContactsText: t('core', 'Show all contacts …'),\n\t\t\t\tcontactsAppMgmtText: t('core', 'Install the Contacts app')\n\t\t\t}, data)\n\t\t)\n\t},\n\n\t/**\n\t * @param {object} options\n\t * @returns {undefined}\n\t */\n\tinitialize: function(options) {\n\t\tthis.options = options\n\t},\n\n\t/**\n\t * @param {string} text\n\t * @returns {undefined}\n\t */\n\tshowLoading: function(text) {\n\t\tthis.render()\n\t\tthis._contacts = undefined\n\t\tthis.$('.content').html(this.loadingTemplate({\n\t\t\tloadingText: text\n\t\t}))\n\t},\n\n\t/**\n\t * @returns {undefined}\n\t */\n\tshowError: function() {\n\t\tthis.render()\n\t\tthis._contacts = undefined\n\t\tthis.$('.content').html(this.errorTemplate())\n\t},\n\n\t/**\n\t * @param {object} viewData\n\t * @param {string} searchTerm\n\t * @returns {undefined}\n\t */\n\tshowContacts: function(viewData, searchTerm) {\n\t\tthis._contacts = viewData.contacts\n\t\tthis.render({\n\t\t\tcontacts: viewData.contacts\n\t\t})\n\n\t\tvar list = new ContactsListView({\n\t\t\tcollection: viewData.contacts\n\t\t})\n\t\tlist.render()\n\t\tthis.$('.content').html(this.contactsTemplate({\n\t\t\tcontacts: viewData.contacts,\n\t\t\tsearchTerm: searchTerm,\n\t\t\tcontactsAppEnabled: viewData.contactsAppEnabled,\n\t\t\tcontactsAppURL: OC.generateUrl('/apps/contacts'),\n\t\t\tcanInstallApp: OC.isUserAdmin(),\n\t\t\tcontactsAppMgmtURL: OC.generateUrl('/settings/apps/social/contacts')\n\t\t}))\n\t\tthis.$('#contactsmenu-contacts').html(list.$el)\n\t},\n\n\t/**\n\t * @param {object} data\n\t * @returns {self}\n\t */\n\trender: function(data) {\n\t\tvar searchVal = this.$('#contactsmenu-search').val()\n\t\tthis.$el.html(this.contentTemplate(data))\n\n\t\t// Focus search\n\t\tthis.$('#contactsmenu-search').val(searchVal)\n\t\tthis.$('#contactsmenu-search').focus()\n\t\treturn this\n\t}\n\n})\n\n/**\n * @param {Object} options\n * @param {jQuery} options.el\n * @param {jQuery} options.trigger\n * @class ContactsMenu\n * @memberOf OC\n */\nconst ContactsMenu = function(options) {\n\tthis.initialize(options)\n}\n\nContactsMenu.prototype = {\n\t/** @type {jQuery} */\n\t$el: undefined,\n\n\t/** @type {jQuery} */\n\t_$trigger: undefined,\n\n\t/** @type {ContactsMenuView} */\n\t_view: undefined,\n\n\t/** @type {Promise} */\n\t_contactsPromise: undefined,\n\n\t/**\n\t * @param {Object} options\n\t * @param {jQuery} options.el - the element to render the menu in\n\t * @param {jQuery} options.trigger - the element to click on to open the menu\n\t * @returns {undefined}\n\t */\n\tinitialize: function(options) {\n\t\tthis.$el = options.el\n\t\tthis._$trigger = options.trigger\n\n\t\tthis._view = new ContactsMenuView({\n\t\t\tel: this.$el\n\t\t})\n\t\tthis._view.on('search', function(searchTerm) {\n\t\t\tthis._loadContacts(searchTerm)\n\t\t}, this)\n\n\t\tOC.registerMenu(this._$trigger, this.$el, function() {\n\t\t\tthis._toggleVisibility(true)\n\t\t}.bind(this), true)\n\t\tthis.$el.on('beforeHide', function() {\n\t\t\tthis._toggleVisibility(false)\n\t\t}.bind(this))\n\t},\n\n\t/**\n\t * @private\n\t * @param {boolean} show\n\t * @returns {Promise}\n\t */\n\t_toggleVisibility: function(show) {\n\t\tif (show) {\n\t\t\treturn this._loadContacts()\n\t\t} else {\n\t\t\tthis.$el.html('')\n\t\t\treturn Promise.resolve()\n\t\t}\n\t},\n\n\t/**\n\t * @private\n\t * @param {string|undefined} searchTerm\n\t * @returns {Promise}\n\t */\n\t_getContacts: function(searchTerm) {\n\t\tvar url = OC.generateUrl('/contactsmenu/contacts')\n\t\treturn Promise.resolve($.ajax(url, {\n\t\t\tmethod: 'POST',\n\t\t\tdata: {\n\t\t\t\tfilter: searchTerm\n\t\t\t}\n\t\t}))\n\t},\n\n\t/**\n\t * @param {string|undefined} searchTerm\n\t * @returns {undefined}\n\t */\n\t_loadContacts: function(searchTerm) {\n\t\tvar self = this\n\n\t\tif (!self._contactsPromise) {\n\t\t\tself._contactsPromise = self._getContacts(searchTerm)\n\t\t}\n\n\t\tif (_.isUndefined(searchTerm) || searchTerm === '') {\n\t\t\tself._view.showLoading(t('core', 'Loading your contacts …'))\n\t\t} else {\n\t\t\tself._view.showLoading(t('core', 'Looking for {term} …', {\n\t\t\t\tterm: searchTerm\n\t\t\t}))\n\t\t}\n\t\treturn self._contactsPromise.then(function(data) {\n\t\t\t// Convert contact entries to Backbone collection\n\t\t\tdata.contacts = new ContactCollection(data.contacts)\n\n\t\t\tself._view.showContacts(data, searchTerm)\n\t\t}, function(e) {\n\t\t\tself._view.showError()\n\t\t\tconsole.error('There was an error loading your contacts', e)\n\t\t}).then(function() {\n\t\t\t// Delete promise, so that contacts are fetched again when the\n\t\t\t// menu is opened the next time.\n\t\t\tdelete self._contactsPromise\n\t\t}).catch(console.error.bind(this))\n\t}\n}\n\nexport default ContactsMenu\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Joas Schilling <coding@schilljs.com>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\nconst rawUid = document\n\t.getElementsByTagName('head')[0]\n\t.getAttribute('data-user')\nconst displayName = document\n\t.getElementsByTagName('head')[0]\n\t.getAttribute('data-user-displayname')\n\nexport const currentUser = rawUid !== undefined ? rawUid : false\n\nexport const getCurrentUser = () => {\n\treturn {\n\t\tuid: currentUser,\n\t\tdisplayName,\n\t}\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Search from './search'\n\n/**\n * Namespace for apps\n *\n * @namespace OCA\n */\nexport default {\n\t/**\n\t * @deprecated 20.0.0, will be removed in Nextcloud 22\n\t */\n\tSearch,\n}\n","/**\n * @copyright 2020 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\nexport default class Search {\n\n\t/**\n\t * @deprecated 20.0.0, will be removed in Nextcloud 22\n\t */\n\tconstructor() {\n\t\tconsole.warn('OCA.Search is deprecated. Please use the unified search API instead')\n\t}\n\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n * @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n *\n * @author Bartek Przybylski <bart.p.pl@gmail.com>\n * @author Christopher Schäpers <kondou@ts.unde.re>\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Daniel Calviño Sánchez <danxuliu@gmail.com>\n * @author Daniel Kesselberg <mail@danielkesselberg.de>\n * @author Florian Schunk <florian.schunk@rwth-aachen.de>\n * @author Gary Kim <gary@garykim.dev>\n * @author Hendrik Leppelsack <hendrik@leppelsack.de>\n * @author Jan-Christoph Borchardt <hey@jancborchardt.net>\n * @author Joas Schilling <coding@schilljs.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Jörn Friedrich Dreyer <jfd@butonic.de>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Loïc Hermann <loic.hermann@sciam.fr>\n * @author Morris Jobke <hey@morrisjobke.de>\n * @author Olivier Paroz <github@oparoz.com>\n * @author Robin Appelman <robin@icewind.nl>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n * @author Sujith Haridasan <Sujith_Haridasan@mentor.com>\n * @author Thomas Citharel <nextcloud@tcit.fr>\n * @author Thomas Müller <thomas.mueller@tmit.eu>\n * @author Thomas Tanghus <thomas@tanghus.net>\n * @author Vincent Petry <vincent@nextcloud.com>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\n/* eslint-disable */\nimport _ from 'underscore'\nimport $ from 'jquery'\n\nimport OC from './index'\nimport OCA from '../OCA/index'\n\n/**\n * this class to ease the usage of jquery dialogs\n */\nconst Dialogs = {\n\t// dialog button types\n\tYES_NO_BUTTONS: 70,\n\tOK_BUTTONS: 71,\n\n\tFILEPICKER_TYPE_CHOOSE: 1,\n\tFILEPICKER_TYPE_MOVE: 2,\n\tFILEPICKER_TYPE_COPY: 3,\n\tFILEPICKER_TYPE_COPY_MOVE: 4,\n\tFILEPICKER_TYPE_CUSTOM: 5,\n\n\t// used to name each dialog\n\tdialogsCounter: 0,\n\n\t/**\n\t * displays alert dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {function} callback which will be triggered when user presses OK\n\t * @param {boolean} [modal] make the dialog modal\n\t */\n\talert: function(text, title, callback, modal) {\n\t\tthis.message(\n\t\t\ttext,\n\t\t\ttitle,\n\t\t\t'alert',\n\t\t\tDialogs.OK_BUTTON,\n\t\t\tcallback,\n\t\t\tmodal\n\t\t)\n\t},\n\t/**\n\t * displays info dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {function} callback which will be triggered when user presses OK\n\t * @param {boolean} [modal] make the dialog modal\n\t */\n\tinfo: function(text, title, callback, modal) {\n\t\tthis.message(text, title, 'info', Dialogs.OK_BUTTON, callback, modal)\n\t},\n\n\t/**\n\t * displays confirmation dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {function} callback which will be triggered when user presses OK (true or false would be passed to callback respectively)\n\t * @param {boolean} [modal] make the dialog modal\n\t * @returns {Promise}\n\t */\n\tconfirm: function(text, title, callback, modal) {\n\t\treturn this.message(\n\t\t\ttext,\n\t\t\ttitle,\n\t\t\t'notice',\n\t\t\tDialogs.YES_NO_BUTTONS,\n\t\t\tcallback,\n\t\t\tmodal\n\t\t)\n\t},\n\t/**\n\t * displays confirmation dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {{type: Int, confirm: String, cancel: String, confirmClasses: String}} buttons text content of buttons\n\t * @param {function} callback which will be triggered when user presses OK (true or false would be passed to callback respectively)\n\t * @param {boolean} [modal] make the dialog modal\n\t * @returns {Promise}\n\t */\n\tconfirmDestructive: function(text, title, buttons, callback, modal) {\n\t\treturn this.message(\n\t\t\ttext,\n\t\t\ttitle,\n\t\t\t'none',\n\t\t\tbuttons,\n\t\t\tcallback,\n\t\t\tmodal === undefined ? true : modal\n\t\t)\n\t},\n\t/**\n\t * displays confirmation dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {function} callback which will be triggered when user presses OK (true or false would be passed to callback respectively)\n\t * @param {boolean} [modal] make the dialog modal\n\t * @returns {Promise}\n\t */\n\tconfirmHtml: function(text, title, callback, modal) {\n\t\treturn this.message(\n\t\t\ttext,\n\t\t\ttitle,\n\t\t\t'notice',\n\t\t\tDialogs.YES_NO_BUTTONS,\n\t\t\tcallback,\n\t\t\tmodal,\n\t\t\ttrue\n\t\t)\n\t},\n\t/**\n\t * displays prompt dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {function} callback which will be triggered when user presses OK (true or false would be passed to callback respectively)\n\t * @param {boolean} [modal] make the dialog modal\n\t * @param {string} name name of the input field\n\t * @param {boolean} password whether the input should be a password input\n\t * @returns {Promise}\n\t */\n\tprompt: function(text, title, callback, modal, name, password) {\n\t\treturn $.when(this._getMessageTemplate()).then(function($tmpl) {\n\t\t\tvar dialogName = 'oc-dialog-' + Dialogs.dialogsCounter + '-content'\n\t\t\tvar dialogId = '#' + dialogName\n\t\t\tvar $dlg = $tmpl.octemplate({\n\t\t\t\tdialog_name: dialogName,\n\t\t\t\ttitle: title,\n\t\t\t\tmessage: text,\n\t\t\t\ttype: 'notice'\n\t\t\t})\n\t\t\tvar input = $('<input/>')\n\t\t\tinput.attr('type', password ? 'password' : 'text').attr('id', dialogName + '-input').attr('placeholder', name)\n\t\t\tvar label = $('<label/>').attr('for', dialogName + '-input').text(name + ': ')\n\t\t\t$dlg.append(label)\n\t\t\t$dlg.append(input)\n\t\t\tif (modal === undefined) {\n\t\t\t\tmodal = false\n\t\t\t}\n\t\t\t$('body').append($dlg)\n\n\t\t\t// wrap callback in _.once():\n\t\t\t// only call callback once and not twice (button handler and close\n\t\t\t// event) but call it for the close event, if ESC or the x is hit\n\t\t\tif (callback !== undefined) {\n\t\t\t\tcallback = _.once(callback)\n\t\t\t}\n\n\t\t\tvar buttonlist = [{\n\t\t\t\ttext: t('core', 'No'),\n\t\t\t\tclick: function() {\n\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t// eslint-disable-next-line standard/no-callback-literal\n\t\t\t\t\t\tcallback(false, input.val())\n\t\t\t\t\t}\n\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t}\n\t\t\t}, {\n\t\t\t\ttext: t('core', 'Yes'),\n\t\t\t\tclick: function() {\n\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t// eslint-disable-next-line standard/no-callback-literal\n\t\t\t\t\t\tcallback(true, input.val())\n\t\t\t\t\t}\n\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t},\n\t\t\t\tdefaultButton: true\n\t\t\t}]\n\n\t\t\t$(dialogId).ocdialog({\n\t\t\t\tcloseOnEscape: true,\n\t\t\t\tmodal: modal,\n\t\t\t\tbuttons: buttonlist,\n\t\t\t\tclose: function() {\n\t\t\t\t\t// callback is already fired if Yes/No is clicked directly\n\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t// eslint-disable-next-line standard/no-callback-literal\n\t\t\t\t\t\tcallback(false, input.val())\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t\tinput.focus()\n\t\t\tDialogs.dialogsCounter++\n\t\t})\n\t},\n\t/**\n\t * show a file picker to pick a file from\n\t *\n\t * In order to pick several types of mime types they need to be passed as an\n\t * array of strings.\n\t *\n\t * When no mime type filter is given only files can be selected. In order to\n\t * be able to select both files and folders \"['*', 'httpd/unix-directory']\"\n\t * should be used instead.\n\t *\n\t * @param {string} title dialog title\n\t * @param {function} callback which will be triggered when user presses Choose\n\t * @param {boolean} [multiselect] whether it should be possible to select multiple files\n\t * @param {string[]} [mimetypeFilter] mimetype to filter by - directories will always be included\n\t * @param {boolean} [modal] make the dialog modal\n\t * @param {string} [type] Type of file picker : Choose, copy, move, copy and move\n\t * @param {string} [path] path to the folder that the the file can be picket from\n\t * @param {Object} [options] additonal options that need to be set\n\t */\n\tfilepicker: function(title, callback, multiselect, mimetypeFilter, modal, type, path, options) {\n\t\tvar self = this\n\n\t\tthis.filepicker.sortField = 'name'\n\t\tthis.filepicker.sortOrder = 'asc'\n\t\t// avoid opening the picker twice\n\t\tif (this.filepicker.loading) {\n\t\t\treturn\n\t\t}\n\n\t\tif (type === undefined) {\n\t\t\ttype = this.FILEPICKER_TYPE_CHOOSE\n\t\t}\n\n\t\tvar emptyText = t('core', 'No files in here')\n\t\tvar newText = t('files', 'New folder')\n\t\tif (type === this.FILEPICKER_TYPE_COPY || type === this.FILEPICKER_TYPE_MOVE || type === this.FILEPICKER_TYPE_COPY_MOVE) {\n\t\t\temptyText = t('core', 'No more subfolders in here')\n\t\t}\n\n\t\tthis.filepicker.loading = true\n\t\tthis.filepicker.filesClient = (OCA.Sharing && OCA.Sharing.PublicApp && OCA.Sharing.PublicApp.fileList) ? OCA.Sharing.PublicApp.fileList.filesClient : OC.Files.getClient()\n\n\t\tthis.filelist = null\n\t\tpath = path || ''\n\t\toptions = Object.assign({\n\t\t\tallowDirectoryChooser: false\n\t\t}, options)\n\n\t\t$.when(this._getFilePickerTemplate()).then(function($tmpl) {\n\t\t\tself.filepicker.loading = false\n\t\t\tvar dialogName = 'oc-dialog-filepicker-content'\n\t\t\tif (self.$filePicker) {\n\t\t\t\tself.$filePicker.ocdialog('close')\n\t\t\t}\n\n\t\t\tif (mimetypeFilter === undefined || mimetypeFilter === null) {\n\t\t\t\tmimetypeFilter = []\n\t\t\t}\n\t\t\tif (typeof (mimetypeFilter) === 'string') {\n\t\t\t\tmimetypeFilter = [mimetypeFilter]\n\t\t\t}\n\n\t\t\tself.$filePicker = $tmpl.octemplate({\n\t\t\t\tdialog_name: dialogName,\n\t\t\t\ttitle: title,\n\t\t\t\temptytext: emptyText,\n\t\t\t\tnewtext: newText,\n\t\t\t\tnameCol: t('core', 'Name'),\n\t\t\t\tsizeCol: t('core', 'Size'),\n\t\t\t\tmodifiedCol: t('core', 'Modified')\n\t\t\t}).data('path', path).data('multiselect', multiselect).data('mimetype', mimetypeFilter).data('allowDirectoryChooser', options.allowDirectoryChooser)\n\n\t\t\tif (modal === undefined) {\n\t\t\t\tmodal = false\n\t\t\t}\n\t\t\tif (multiselect === undefined) {\n\t\t\t\tmultiselect = false\n\t\t\t}\n\n\t\t\tself.$filePicker.find('#picker-view-toggle').remove()\n\t\t\tself.$filePicker.find('#picker-filestable').removeClass('view-grid')\n\n\t\t\t$('body').append(self.$filePicker)\n\n\t\t\tself.$showGridView = $('input#picker-showgridview')\n\t\t\tself.$showGridView.on('change', _.bind(self._onGridviewChange, self))\n\n\t\t\tself._getGridSettings()\n\n\t\t\tvar newButton = self.$filePicker.find('.actions.creatable .button-add')\n\t\t\tif (type === self.FILEPICKER_TYPE_CHOOSE && !options.allowDirectoryChooser) {\n\t\t\t\tnewButton.hide()\n\t\t\t}\n\t\t\tnewButton.on('focus', function() {\n\t\t\t\tself.$filePicker.ocdialog('setEnterCallback', function() {\n\t\t\t\t\tevent.stopImmediatePropagation()\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tnewButton.click()\n\t\t\t\t})\n\t\t\t})\n\t\t\tnewButton.on('blur', function() {\n\t\t\t\tself.$filePicker.ocdialog('unsetEnterCallback')\n\t\t\t})\n\n\t\t\tOC.registerMenu(newButton, self.$filePicker.find('.menu'), function() {\n\t\t\t\t$input.tooltip('hide')\n\t\t\t\t$input.focus()\n\t\t\t\tself.$filePicker.ocdialog('setEnterCallback', function() {\n\t\t\t\t\tevent.stopImmediatePropagation()\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tself.$filePicker.submit()\n\t\t\t\t})\n\t\t\t\tvar newName = $input.val()\n\t\t\t\tvar lastPos = newName.lastIndexOf('.')\n\t\t\t\tif (lastPos === -1) {\n\t\t\t\t\tlastPos = newName.length\n\t\t\t\t}\n\t\t\t\t$input.selectRange(0, lastPos)\n\t\t\t})\n\t\t\tvar $form = self.$filePicker.find('.filenameform')\n\t\t\tvar $input = $form.find('input[type=\\'text\\']')\n\t\t\tvar $submit = $form.find('input[type=\\'submit\\']')\n\t\t\t$submit.on('click', function(event) {\n\t\t\t\tevent.stopImmediatePropagation()\n\t\t\t\tevent.preventDefault()\n\t\t\t\t$form.submit()\n\t\t\t})\n\n\n\t\t\t/**\n\t\t\t * Checks whether the given file name is valid.\n\t\t\t *\n\t\t\t * @param name file name to check\n\t\t\t * @return true if the file name is valid.\n\t\t\t * @throws a string exception with an error message if\n\t\t\t * the file name is not valid\n\t\t\t *\n\t\t\t * NOTE: This function is duplicated in the files app:\n\t\t\t * https://github.com/nextcloud/server/blob/b9bc2417e7a8dc81feb0abe20359bedaf864f790/apps/files/js/files.js#L127-L148\n\t\t\t */\n\t\t\tvar isFileNameValid = function (name) {\n\t\t\t\tvar trimmedName = name.trim();\n\t\t\t\tif (trimmedName === '.' || trimmedName === '..')\n\t\t\t\t{\n\t\t\t\t\tthrow t('files', '\"{name}\" is an invalid file name.', {name: name})\n\t\t\t\t} else if (trimmedName.length === 0) {\n\t\t\t\t\tthrow t('files', 'File name cannot be empty.')\n\t\t\t\t} else if (trimmedName.indexOf('/') !== -1) {\n\t\t\t\t\tthrow t('files', '\"/\" is not allowed inside a file name.')\n\t\t\t\t} else if (!!(trimmedName.match(OC.config.blacklist_files_regex))) {\n\t\t\t\t\tthrow t('files', '\"{name}\" is not an allowed filetype', {name: name})\n\t\t\t\t}\n\n\t\t\t\treturn true\n\t\t\t}\n\n\t\t\tvar checkInput = function() {\n\t\t\t\tvar filename = $input.val()\n\t\t\t\ttry {\n\t\t\t\t\tif (!isFileNameValid(filename)) {\n\t\t\t\t\t\t// isFileNameValid(filename) throws an exception itself\n\t\t\t\t\t} else if (self.filelist.find(function(file) {\n\t\t\t\t\t\treturn file.name === this\n\t\t\t\t\t}, filename)) {\n\t\t\t\t\t\tthrow t('files', '{newName} already exists', { newName: filename }, undefined, {\n\t\t\t\t\t\t\tescape: false\n\t\t\t\t\t\t})\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn true\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\t$input.attr('title', error)\n\t\t\t\t\t$input.tooltip({\n\t\t\t\t\t\tplacement: 'right',\n\t\t\t\t\t\ttrigger: 'manual',\n\t\t\t\t\t\t'container': '.newFolderMenu'\n\t\t\t\t\t})\n\t\t\t\t\t$input.tooltip('_fixTitle')\n\t\t\t\t\t$input.tooltip('show')\n\t\t\t\t\t$input.addClass('error')\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\t$form.on('submit', function(event) {\n\t\t\t\tevent.stopPropagation()\n\t\t\t\tevent.preventDefault()\n\n\t\t\t\tif (checkInput()) {\n\t\t\t\t\tvar newname = $input.val()\n\t\t\t\t\tself.filepicker.filesClient.createDirectory(self.$filePicker.data('path') + \"/\" + newname).always(function (status) {\n\t\t\t\t\t\tself._fillFilePicker(self.$filePicker.data('path') + \"/\" + newname)\n\t\t\t\t\t})\n\t\t\t\t\tOC.hideMenus()\n\t\t\t\t\tself.$filePicker.ocdialog('unsetEnterCallback')\n\t\t\t\t\tself.$filePicker.click()\n\t\t\t\t\t$input.val(newText)\n\t\t\t\t}\n\t\t\t})\n\t\t\t$input.keypress(function(event) {\n\t\t\t\tif (event.keyCode === 13 || event.which === 13) {\n\t\t\t\t\tevent.stopImmediatePropagation()\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\t$form.submit()\n\t\t\t\t}\n\t\t\t})\n\t\t\t$input.on('input', function(event) {\n\t\t\t\t$input.tooltip('hide')\n\t\t\t})\n\n\t\t\tself.$filePicker.ready(function() {\n\t\t\t\tself.$fileListHeader = self.$filePicker.find('.filelist thead tr')\n\t\t\t\tself.$filelist = self.$filePicker.find('.filelist tbody')\n\t\t\t\tself.$filelistContainer = self.$filePicker.find('.filelist-container')\n\t\t\t\tself.$dirTree = self.$filePicker.find('.dirtree')\n\t\t\t\tself.$dirTree.on('click', 'div:not(:last-child)', self, function(event) {\n\t\t\t\t\tself._handleTreeListSelect(event, type)\n\t\t\t\t})\n\t\t\t\tself.$filelist.on('click', 'tr', function(event) {\n\t\t\t\t\tself._handlePickerClick(event, $(this), type)\n\t\t\t\t})\n\t\t\t\tself.$fileListHeader.on('click', 'a', function(event) {\n\t\t\t\t\tvar dir = self.$filePicker.data('path')\n\t\t\t\t\tself.filepicker.sortField = $(event.currentTarget).data('sort')\n\t\t\t\t\tself.filepicker.sortOrder = self.filepicker.sortOrder === 'asc' ? 'desc' : 'asc'\n\t\t\t\t\tself._fillFilePicker(dir)\n\t\t\t\t})\n\t\t\t\tself._fillFilePicker(path)\n\t\t\t})\n\n\t\t\t// build buttons\n\t\t\tvar functionToCall = function(returnType) {\n\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\tvar datapath\n\t\t\t\t\tif (multiselect === true) {\n\t\t\t\t\t\tdatapath = []\n\t\t\t\t\t\tself.$filelist.find('tr.filepicker_element_selected').each(function(index, element) {\n\t\t\t\t\t\t\tdatapath.push(self.$filePicker.data('path') + '/' + $(element).data('entryname'))\n\t\t\t\t\t\t})\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdatapath = self.$filePicker.data('path')\n\t\t\t\t\t\tvar selectedName = self.$filelist.find('tr.filepicker_element_selected').data('entryname')\n\t\t\t\t\t\tif (selectedName) {\n\t\t\t\t\t\t\tdatapath += '/' + selectedName\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcallback(datapath, returnType)\n\t\t\t\t\tself.$filePicker.ocdialog('close')\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar chooseCallback = function() {\n\t\t\t\tfunctionToCall(Dialogs.FILEPICKER_TYPE_CHOOSE)\n\t\t\t}\n\n\t\t\tvar copyCallback = function() {\n\t\t\t\tfunctionToCall(Dialogs.FILEPICKER_TYPE_COPY)\n\t\t\t}\n\n\t\t\tvar moveCallback = function() {\n\t\t\t\tfunctionToCall(Dialogs.FILEPICKER_TYPE_MOVE)\n\t\t\t}\n\n\t\t\tvar buttonlist = []\n\t\t\tif (type === Dialogs.FILEPICKER_TYPE_CHOOSE) {\n\t\t\t\tbuttonlist.push({\n\t\t\t\t\ttext: t('core', 'Choose'),\n\t\t\t\t\tclick: chooseCallback,\n\t\t\t\t\tdefaultButton: true\n\t\t\t\t})\n\t\t\t} else if (type === Dialogs.FILEPICKER_TYPE_CUSTOM) {\n\t\t\t\toptions.buttons.forEach(function(button) {\n\t\t\t\t\tbuttonlist.push({\n\t\t\t\t\t\ttext: button.text,\n\t\t\t\t\t\tclick: function() {\n\t\t\t\t\t\t\tfunctionToCall(button.type)\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdefaultButton: button.defaultButton\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tif (type === Dialogs.FILEPICKER_TYPE_COPY || type === Dialogs.FILEPICKER_TYPE_COPY_MOVE) {\n\t\t\t\t\tbuttonlist.push({\n\t\t\t\t\t\ttext: t('core', 'Copy'),\n\t\t\t\t\t\tclick: copyCallback,\n\t\t\t\t\t\tdefaultButton: false\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tif (type === Dialogs.FILEPICKER_TYPE_MOVE || type === Dialogs.FILEPICKER_TYPE_COPY_MOVE) {\n\t\t\t\t\tbuttonlist.push({\n\t\t\t\t\t\ttext: t('core', 'Move'),\n\t\t\t\t\t\tclick: moveCallback,\n\t\t\t\t\t\tdefaultButton: true\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tself.$filePicker.ocdialog({\n\t\t\t\tcloseOnEscape: true,\n\t\t\t\t// max-width of 600\n\t\t\t\twidth: 600,\n\t\t\t\theight: 500,\n\t\t\t\tmodal: modal,\n\t\t\t\tbuttons: buttonlist,\n\t\t\t\tstyle: {\n\t\t\t\t\tbuttons: 'aside'\n\t\t\t\t},\n\t\t\t\tclose: function() {\n\t\t\t\t\ttry {\n\t\t\t\t\t\t$(this).ocdialog('destroy').remove()\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t}\n\t\t\t\t\tself.$filePicker = null\n\t\t\t\t}\n\t\t\t})\n\n\t\t\t// We can access primary class only from oc-dialog.\n\t\t\t// Hence this is one of the approach to get the choose button.\n\t\t\tvar getOcDialog = self.$filePicker.closest('.oc-dialog')\n\t\t\tvar buttonEnableDisable = getOcDialog.find('.primary')\n\t\t\tif (self.$filePicker.data('mimetype').indexOf('httpd/unix-directory') !== -1 || self.$filePicker.data('allowDirectoryChooser')) {\n\t\t\t\tbuttonEnableDisable.prop('disabled', false)\n\t\t\t} else {\n\t\t\t\tbuttonEnableDisable.prop('disabled', true)\n\t\t\t}\n\t\t})\n\t\t\t.fail(function(status, error) {\n\t\t\t\t// If the method is called while navigating away\n\t\t\t\t// from the page, it is probably not needed ;)\n\t\t\t\tself.filepicker.loading = false\n\t\t\t\tif (status !== 0) {\n\t\t\t\t\talert(t('core', 'Error loading file picker template: {error}', { error: error }))\n\t\t\t\t}\n\t\t\t})\n\t},\n\t/**\n\t * Displays raw dialog\n\t * You better use a wrapper instead ...\n\t */\n\tmessage: function(content, title, dialogType, buttons, callback, modal, allowHtml) {\n\t\treturn $.when(this._getMessageTemplate()).then(function($tmpl) {\n\t\t\tvar dialogName = 'oc-dialog-' + Dialogs.dialogsCounter + '-content'\n\t\t\tvar dialogId = '#' + dialogName\n\t\t\tvar $dlg = $tmpl.octemplate({\n\t\t\t\tdialog_name: dialogName,\n\t\t\t\ttitle: title,\n\t\t\t\tmessage: content,\n\t\t\t\ttype: dialogType\n\t\t\t}, allowHtml ? { escapeFunction: '' } : {})\n\t\t\tif (modal === undefined) {\n\t\t\t\tmodal = false\n\t\t\t}\n\t\t\t$('body').append($dlg)\n\t\t\tvar buttonlist = []\n\t\t\tswitch (buttons) {\n\t\t\tcase Dialogs.YES_NO_BUTTONS:\n\t\t\t\tbuttonlist = [{\n\t\t\t\t\ttext: t('core', 'No'),\n\t\t\t\t\tclick: function() {\n\t\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t\tcallback(false)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttext: t('core', 'Yes'),\n\t\t\t\t\tclick: function() {\n\t\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t\tcallback(true)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\t},\n\t\t\t\t\tdefaultButton: true\n\t\t\t\t}]\n\t\t\t\tbreak\n\t\t\tcase Dialogs.OK_BUTTON:\n\t\t\t\tvar functionToCall = function() {\n\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\tcallback()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbuttonlist[0] = {\n\t\t\t\t\ttext: t('core', 'OK'),\n\t\t\t\t\tclick: functionToCall,\n\t\t\t\t\tdefaultButton: true\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tdefault:\n\t\t\t\tif (typeof(buttons) === 'object') {\n\t\t\t\t\tswitch (buttons.type) {\n\t\t\t\t\t\tcase Dialogs.YES_NO_BUTTONS:\n\t\t\t\t\t\t\tbuttonlist = [{\n\t\t\t\t\t\t\t\ttext: buttons.cancel || t('core', 'No'),\n\t\t\t\t\t\t\t\tclick: function() {\n\t\t\t\t\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t\t\t\t\tcallback(false)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\ttext: buttons.confirm || t('core', 'Yes'),\n\t\t\t\t\t\t\t\t\tclick: function() {\n\t\t\t\t\t\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t\t\t\t\t\tcallback(true)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tdefaultButton: true,\n\t\t\t\t\t\t\t\t\tclasses: buttons.confirmClasses\n\t\t\t\t\t\t\t\t}]\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\t$(dialogId).ocdialog({\n\t\t\t\tcloseOnEscape: true,\n\t\t\t\tcloseCallback: () => { callback && callback(false) },\n\t\t\t\tmodal: modal,\n\t\t\t\tbuttons: buttonlist\n\t\t\t})\n\t\t\tDialogs.dialogsCounter++\n\t\t})\n\t\t\t.fail(function(status, error) {\n\t\t\t\t// If the method is called while navigating away from\n\t\t\t\t// the page, we still want to deliver the message.\n\t\t\t\tif (status === 0) {\n\t\t\t\t\talert(title + ': ' + content)\n\t\t\t\t} else {\n\t\t\t\t\talert(t('core', 'Error loading message template: {error}', { error: error }))\n\t\t\t\t}\n\t\t\t})\n\t},\n\t_fileexistsshown: false,\n\t/**\n\t * Displays file exists dialog\n\t * @param {object} data upload object\n\t * @param {object} original file with name, size and mtime\n\t * @param {object} replacement file with name, size and mtime\n\t * @param {object} controller with onCancel, onSkip, onReplace and onRename methods\n\t * @returns {Promise} jquery promise that resolves after the dialog template was loaded\n\t */\n\tfileexists: function(data, original, replacement, controller) {\n\t\tvar self = this\n\t\tvar dialogDeferred = new $.Deferred()\n\n\t\tvar getCroppedPreview = function(file) {\n\t\t\tvar deferred = new $.Deferred()\n\t\t\t// Only process image files.\n\t\t\tvar type = file.type && file.type.split('/').shift()\n\t\t\tif (window.FileReader && type === 'image') {\n\t\t\t\tvar reader = new FileReader()\n\t\t\t\treader.onload = function(e) {\n\t\t\t\t\tvar blob = new Blob([e.target.result])\n\t\t\t\t\twindow.URL = window.URL || window.webkitURL\n\t\t\t\t\tvar originalUrl = window.URL.createObjectURL(blob)\n\t\t\t\t\tvar image = new Image()\n\t\t\t\t\timage.src = originalUrl\n\t\t\t\t\timage.onload = function() {\n\t\t\t\t\t\tvar url = crop(image)\n\t\t\t\t\t\tdeferred.resolve(url)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treader.readAsArrayBuffer(file)\n\t\t\t} else {\n\t\t\t\tdeferred.reject()\n\t\t\t}\n\t\t\treturn deferred\n\t\t}\n\n\t\tvar crop = function(img) {\n\t\t\tvar canvas = document.createElement('canvas')\n\t\t\tvar targetSize = 96\n\t\t\tvar width = img.width\n\t\t\tvar height = img.height\n\t\t\tvar x; var y; var size\n\n\t\t\t// Calculate the width and height, constraining the proportions\n\t\t\tif (width > height) {\n\t\t\t\ty = 0\n\t\t\t\tx = (width - height) / 2\n\t\t\t} else {\n\t\t\t\ty = (height - width) / 2\n\t\t\t\tx = 0\n\t\t\t}\n\t\t\tsize = Math.min(width, height)\n\n\t\t\t// Set canvas size to the cropped area\n\t\t\tcanvas.width = size\n\t\t\tcanvas.height = size\n\t\t\tvar ctx = canvas.getContext('2d')\n\t\t\tctx.drawImage(img, x, y, size, size, 0, 0, size, size)\n\n\t\t\t// Resize the canvas to match the destination (right size uses 96px)\n\t\t\tresampleHermite(canvas, size, size, targetSize, targetSize)\n\n\t\t\treturn canvas.toDataURL('image/png', 0.7)\n\t\t}\n\n\t\t/**\n\t\t * Fast image resize/resample using Hermite filter with JavaScript.\n\t\t *\n\t\t * @author: ViliusL\n\t\t *\n\t\t * @param {*} canvas\n\t\t * @param {number} W\n\t\t * @param {number} H\n\t\t * @param {number} W2\n\t\t * @param {number} H2\n\t\t */\n\t\tvar resampleHermite = function(canvas, W, H, W2, H2) {\n\t\t\tW2 = Math.round(W2)\n\t\t\tH2 = Math.round(H2)\n\t\t\tvar img = canvas.getContext('2d').getImageData(0, 0, W, H)\n\t\t\tvar img2 = canvas.getContext('2d').getImageData(0, 0, W2, H2)\n\t\t\tvar data = img.data\n\t\t\tvar data2 = img2.data\n\t\t\tvar ratio_w = W / W2\n\t\t\tvar ratio_h = H / H2\n\t\t\tvar ratio_w_half = Math.ceil(ratio_w / 2)\n\t\t\tvar ratio_h_half = Math.ceil(ratio_h / 2)\n\n\t\t\tfor (var j = 0; j < H2; j++) {\n\t\t\t\tfor (var i = 0; i < W2; i++) {\n\t\t\t\t\tvar x2 = (i + j * W2) * 4\n\t\t\t\t\tvar weight = 0\n\t\t\t\t\tvar weights = 0\n\t\t\t\t\tvar weights_alpha = 0\n\t\t\t\t\tvar gx_r = 0\n\t\t\t\t\tvar gx_g = 0\n\t\t\t\t\tvar gx_b = 0\n\t\t\t\t\tvar gx_a = 0\n\t\t\t\t\tvar center_y = (j + 0.5) * ratio_h\n\t\t\t\t\tfor (var yy = Math.floor(j * ratio_h); yy < (j + 1) * ratio_h; yy++) {\n\t\t\t\t\t\tvar dy = Math.abs(center_y - (yy + 0.5)) / ratio_h_half\n\t\t\t\t\t\tvar center_x = (i + 0.5) * ratio_w\n\t\t\t\t\t\tvar w0 = dy * dy // pre-calc part of w\n\t\t\t\t\t\tfor (var xx = Math.floor(i * ratio_w); xx < (i + 1) * ratio_w; xx++) {\n\t\t\t\t\t\t\tvar dx = Math.abs(center_x - (xx + 0.5)) / ratio_w_half\n\t\t\t\t\t\t\tvar w = Math.sqrt(w0 + dx * dx)\n\t\t\t\t\t\t\tif (w >= -1 && w <= 1) {\n\t\t\t\t\t\t\t\t// hermite filter\n\t\t\t\t\t\t\t\tweight = 2 * w * w * w - 3 * w * w + 1\n\t\t\t\t\t\t\t\tif (weight > 0) {\n\t\t\t\t\t\t\t\t\tdx = 4 * (xx + yy * W)\n\t\t\t\t\t\t\t\t\t// alpha\n\t\t\t\t\t\t\t\t\tgx_a += weight * data[dx + 3]\n\t\t\t\t\t\t\t\t\tweights_alpha += weight\n\t\t\t\t\t\t\t\t\t// colors\n\t\t\t\t\t\t\t\t\tif (data[dx + 3] < 255) { weight = weight * data[dx + 3] / 250 }\n\t\t\t\t\t\t\t\t\tgx_r += weight * data[dx]\n\t\t\t\t\t\t\t\t\tgx_g += weight * data[dx + 1]\n\t\t\t\t\t\t\t\t\tgx_b += weight * data[dx + 2]\n\t\t\t\t\t\t\t\t\tweights += weight\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdata2[x2] = gx_r / weights\n\t\t\t\t\tdata2[x2 + 1] = gx_g / weights\n\t\t\t\t\tdata2[x2 + 2] = gx_b / weights\n\t\t\t\t\tdata2[x2 + 3] = gx_a / weights_alpha\n\t\t\t\t}\n\t\t\t}\n\t\t\tcanvas.getContext('2d').clearRect(0, 0, Math.max(W, W2), Math.max(H, H2))\n\t\t\tcanvas.width = W2\n\t\t\tcanvas.height = H2\n\t\t\tcanvas.getContext('2d').putImageData(img2, 0, 0)\n\t\t}\n\n\t\tvar addConflict = function($conflicts, original, replacement) {\n\n\t\t\tvar $conflict = $conflicts.find('.template').clone().removeClass('template').addClass('conflict')\n\t\t\tvar $originalDiv = $conflict.find('.original')\n\t\t\tvar $replacementDiv = $conflict.find('.replacement')\n\n\t\t\t$conflict.data('data', data)\n\n\t\t\t$conflict.find('.filename').text(original.name)\n\t\t\t$originalDiv.find('.size').text(OC.Util.humanFileSize(original.size))\n\t\t\t$originalDiv.find('.mtime').text(OC.Util.formatDate(original.mtime))\n\t\t\t// ie sucks\n\t\t\tif (replacement.size && replacement.lastModified) {\n\t\t\t\t$replacementDiv.find('.size').text(OC.Util.humanFileSize(replacement.size))\n\t\t\t\t$replacementDiv.find('.mtime').text(OC.Util.formatDate(replacement.lastModified))\n\t\t\t}\n\t\t\tvar path = original.directory + '/' + original.name\n\t\t\tvar urlSpec = {\n\t\t\t\tfile: path,\n\t\t\t\tx: 96,\n\t\t\t\ty: 96,\n\t\t\t\tc: original.etag,\n\t\t\t\tforceIcon: 0\n\t\t\t}\n\t\t\tvar previewpath = Files.generatePreviewUrl(urlSpec)\n\t\t\t// Escaping single quotes\n\t\t\tpreviewpath = previewpath.replace(/'/g, '%27')\n\t\t\t$originalDiv.find('.icon').css({ 'background-image': \"url('\" + previewpath + \"')\" })\n\t\t\tgetCroppedPreview(replacement).then(\n\t\t\t\tfunction(path) {\n\t\t\t\t\t$replacementDiv.find('.icon').css('background-image', 'url(' + path + ')')\n\t\t\t\t}, function() {\n\t\t\t\t\tpath = OC.MimeType.getIconUrl(replacement.type)\n\t\t\t\t\t$replacementDiv.find('.icon').css('background-image', 'url(' + path + ')')\n\t\t\t\t}\n\t\t\t)\n\t\t\t// connect checkboxes with labels\n\t\t\tvar checkboxId = $conflicts.find('.conflict').length\n\t\t\t$originalDiv.find('input:checkbox').attr('id', 'checkbox_original_' + checkboxId)\n\t\t\t$replacementDiv.find('input:checkbox').attr('id', 'checkbox_replacement_' + checkboxId)\n\n\t\t\t$conflicts.append($conflict)\n\n\t\t\t// set more recent mtime bold\n\t\t\t// ie sucks\n\t\t\tif (replacement.lastModified > original.mtime) {\n\t\t\t\t$replacementDiv.find('.mtime').css('font-weight', 'bold')\n\t\t\t} else if (replacement.lastModified < original.mtime) {\n\t\t\t\t$originalDiv.find('.mtime').css('font-weight', 'bold')\n\t\t\t} else {\n\t\t\t\t// TODO add to same mtime collection?\n\t\t\t}\n\n\t\t\t// set bigger size bold\n\t\t\tif (replacement.size && replacement.size > original.size) {\n\t\t\t\t$replacementDiv.find('.size').css('font-weight', 'bold')\n\t\t\t} else if (replacement.size && replacement.size < original.size) {\n\t\t\t\t$originalDiv.find('.size').css('font-weight', 'bold')\n\t\t\t} else {\n\t\t\t\t// TODO add to same size collection?\n\t\t\t}\n\n\t\t\t// TODO show skip action for files with same size and mtime in bottom row\n\n\t\t\t// always keep readonly files\n\n\t\t\tif (original.status === 'readonly') {\n\t\t\t\t$originalDiv\n\t\t\t\t\t.addClass('readonly')\n\t\t\t\t\t.find('input[type=\"checkbox\"]')\n\t\t\t\t\t.prop('checked', true)\n\t\t\t\t\t.prop('disabled', true)\n\t\t\t\t$originalDiv.find('.message')\n\t\t\t\t\t.text(t('core', 'read-only'))\n\t\t\t}\n\t\t}\n\t\t// var selection = controller.getSelection(data.originalFiles);\n\t\t// if (selection.defaultAction) {\n\t\t//\tcontroller[selection.defaultAction](data);\n\t\t// } else {\n\t\tvar dialogName = 'oc-dialog-fileexists-content'\n\t\tvar dialogId = '#' + dialogName\n\t\tif (this._fileexistsshown) {\n\t\t\t// add conflict\n\n\t\t\tvar $conflicts = $(dialogId + ' .conflicts')\n\t\t\taddConflict($conflicts, original, replacement)\n\n\t\t\tvar count = $(dialogId + ' .conflict').length\n\t\t\tvar title = n('core',\n\t\t\t\t'{count} file conflict',\n\t\t\t\t'{count} file conflicts',\n\t\t\t\tcount,\n\t\t\t\t{ count: count }\n\t\t\t)\n\t\t\t$(dialogId).parent().children('.oc-dialog-title').text(title)\n\n\t\t\t// recalculate dimensions\n\t\t\t$(window).trigger('resize')\n\t\t\tdialogDeferred.resolve()\n\t\t} else {\n\t\t\t// create dialog\n\t\t\tthis._fileexistsshown = true\n\t\t\t$.when(this._getFileExistsTemplate()).then(function($tmpl) {\n\t\t\t\tvar title = t('core', 'One file conflict')\n\t\t\t\tvar $dlg = $tmpl.octemplate({\n\t\t\t\t\tdialog_name: dialogName,\n\t\t\t\t\ttitle: title,\n\t\t\t\t\ttype: 'fileexists',\n\n\t\t\t\t\tallnewfiles: t('core', 'New Files'),\n\t\t\t\t\tallexistingfiles: t('core', 'Already existing files'),\n\n\t\t\t\t\twhy: t('core', 'Which files do you want to keep?'),\n\t\t\t\t\twhat: t('core', 'If you select both versions, the copied file will have a number added to its name.')\n\t\t\t\t})\n\t\t\t\t$('body').append($dlg)\n\n\t\t\t\tif (original && replacement) {\n\t\t\t\t\tvar $conflicts = $dlg.find('.conflicts')\n\t\t\t\t\taddConflict($conflicts, original, replacement)\n\t\t\t\t}\n\n\t\t\t\tvar buttonlist = [{\n\t\t\t\t\ttext: t('core', 'Cancel'),\n\t\t\t\t\tclasses: 'cancel',\n\t\t\t\t\tclick: function() {\n\t\t\t\t\t\tif (typeof controller.onCancel !== 'undefined') {\n\t\t\t\t\t\t\tcontroller.onCancel(data)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttext: t('core', 'Continue'),\n\t\t\t\t\tclasses: 'continue',\n\t\t\t\t\tclick: function() {\n\t\t\t\t\t\tif (typeof controller.onContinue !== 'undefined') {\n\t\t\t\t\t\t\tcontroller.onContinue($(dialogId + ' .conflict'))\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\t}\n\t\t\t\t}]\n\n\t\t\t\t$(dialogId).ocdialog({\n\t\t\t\t\twidth: 500,\n\t\t\t\t\tcloseOnEscape: true,\n\t\t\t\t\tmodal: true,\n\t\t\t\t\tbuttons: buttonlist,\n\t\t\t\t\tcloseButton: null,\n\t\t\t\t\tclose: function() {\n\t\t\t\t\t\tself._fileexistsshown = false\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t$(this).ocdialog('destroy').remove()\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// ignore\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\n\t\t\t\t$(dialogId).css('height', 'auto')\n\n\t\t\t\tvar $primaryButton = $dlg.closest('.oc-dialog').find('button.continue')\n\t\t\t\t$primaryButton.prop('disabled', true)\n\n\t\t\t\tfunction updatePrimaryButton() {\n\t\t\t\t\tvar checkedCount = $dlg.find('.conflicts .checkbox:checked').length\n\t\t\t\t\t$primaryButton.prop('disabled', checkedCount === 0)\n\t\t\t\t}\n\n\t\t\t\t// add checkbox toggling actions\n\t\t\t\t$(dialogId).find('.allnewfiles').on('click', function() {\n\t\t\t\t\tvar $checkboxes = $(dialogId).find('.conflict .replacement input[type=\"checkbox\"]')\n\t\t\t\t\t$checkboxes.prop('checked', $(this).prop('checked'))\n\t\t\t\t})\n\t\t\t\t$(dialogId).find('.allexistingfiles').on('click', function() {\n\t\t\t\t\tvar $checkboxes = $(dialogId).find('.conflict .original:not(.readonly) input[type=\"checkbox\"]')\n\t\t\t\t\t$checkboxes.prop('checked', $(this).prop('checked'))\n\t\t\t\t})\n\t\t\t\t$(dialogId).find('.conflicts').on('click', '.replacement,.original:not(.readonly)', function() {\n\t\t\t\t\tvar $checkbox = $(this).find('input[type=\"checkbox\"]')\n\t\t\t\t\t$checkbox.prop('checked', !$checkbox.prop('checked'))\n\t\t\t\t})\n\t\t\t\t$(dialogId).find('.conflicts').on('click', '.replacement input[type=\"checkbox\"],.original:not(.readonly) input[type=\"checkbox\"]', function() {\n\t\t\t\t\tvar $checkbox = $(this)\n\t\t\t\t\t$checkbox.prop('checked', !$checkbox.prop('checked'))\n\t\t\t\t})\n\n\t\t\t\t// update counters\n\t\t\t\t$(dialogId).on('click', '.replacement,.allnewfiles', function() {\n\t\t\t\t\tvar count = $(dialogId).find('.conflict .replacement input[type=\"checkbox\"]:checked').length\n\t\t\t\t\tif (count === $(dialogId + ' .conflict').length) {\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles').prop('checked', true)\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles + .count').text(t('core', '(all selected)'))\n\t\t\t\t\t} else if (count > 0) {\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles').prop('checked', false)\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles + .count').text(t('core', '({count} selected)', { count: count }))\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles').prop('checked', false)\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles + .count').text('')\n\t\t\t\t\t}\n\t\t\t\t\tupdatePrimaryButton()\n\t\t\t\t})\n\t\t\t\t$(dialogId).on('click', '.original,.allexistingfiles', function() {\n\t\t\t\t\tvar count = $(dialogId).find('.conflict .original input[type=\"checkbox\"]:checked').length\n\t\t\t\t\tif (count === $(dialogId + ' .conflict').length) {\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles').prop('checked', true)\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles + .count').text(t('core', '(all selected)'))\n\t\t\t\t\t} else if (count > 0) {\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles').prop('checked', false)\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles + .count')\n\t\t\t\t\t\t\t.text(t('core', '({count} selected)', { count: count }))\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles').prop('checked', false)\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles + .count').text('')\n\t\t\t\t\t}\n\t\t\t\t\tupdatePrimaryButton()\n\t\t\t\t})\n\n\t\t\t\tdialogDeferred.resolve()\n\t\t\t})\n\t\t\t\t.fail(function() {\n\t\t\t\t\tdialogDeferred.reject()\n\t\t\t\t\talert(t('core', 'Error loading file exists template'))\n\t\t\t\t})\n\t\t}\n\t\t// }\n\t\treturn dialogDeferred.promise()\n\t},\n\t// get the gridview setting and set the input accordingly\n\t_getGridSettings: function() {\n\t\tvar self = this\n\t\t$.get(OC.generateUrl('/apps/files/api/v1/showgridview'), function(response) {\n\t\t\tself.$showGridView.get(0).checked = response.gridview\n\t\t\tself.$showGridView.next('#picker-view-toggle')\n\t\t\t\t.removeClass('icon-toggle-filelist icon-toggle-pictures')\n\t\t\t\t.addClass(response.gridview ? 'icon-toggle-filelist' : 'icon-toggle-pictures')\n\t\t\t$('.list-container').toggleClass('view-grid', response.gridview)\n\t\t})\n\t},\n\t_onGridviewChange: function() {\n\t\tvar show = this.$showGridView.is(':checked')\n\t\t// only save state if user is logged in\n\t\tif (OC.currentUser) {\n\t\t\t$.post(OC.generateUrl('/apps/files/api/v1/showgridview'), {\n\t\t\t\tshow: show\n\t\t\t})\n\t\t}\n\t\tthis.$showGridView.next('#picker-view-toggle')\n\t\t\t.removeClass('icon-toggle-filelist icon-toggle-pictures')\n\t\t\t.addClass(show ? 'icon-toggle-filelist' : 'icon-toggle-pictures')\n\t\t$('.list-container').toggleClass('view-grid', show)\n\t},\n\t_getFilePickerTemplate: function() {\n\t\tvar defer = $.Deferred()\n\t\tif (!this.$filePickerTemplate) {\n\t\t\tvar self = this\n\t\t\t$.get(OC.filePath('core', 'templates', 'filepicker.html'), function(tmpl) {\n\t\t\t\tself.$filePickerTemplate = $(tmpl)\n\t\t\t\tself.$listTmpl = self.$filePickerTemplate.find('.filelist tbody tr:first-child').detach()\n\t\t\t\tdefer.resolve(self.$filePickerTemplate)\n\t\t\t})\n\t\t\t\t.fail(function(jqXHR, textStatus, errorThrown) {\n\t\t\t\t\tdefer.reject(jqXHR.status, errorThrown)\n\t\t\t\t})\n\t\t} else {\n\t\t\tdefer.resolve(this.$filePickerTemplate)\n\t\t}\n\t\treturn defer.promise()\n\t},\n\t_getMessageTemplate: function() {\n\t\tvar defer = $.Deferred()\n\t\tif (!this.$messageTemplate) {\n\t\t\tvar self = this\n\t\t\t$.get(OC.filePath('core', 'templates', 'message.html'), function(tmpl) {\n\t\t\t\tself.$messageTemplate = $(tmpl)\n\t\t\t\tdefer.resolve(self.$messageTemplate)\n\t\t\t})\n\t\t\t\t.fail(function(jqXHR, textStatus, errorThrown) {\n\t\t\t\t\tdefer.reject(jqXHR.status, errorThrown)\n\t\t\t\t})\n\t\t} else {\n\t\t\tdefer.resolve(this.$messageTemplate)\n\t\t}\n\t\treturn defer.promise()\n\t},\n\t_getFileExistsTemplate: function() {\n\t\tvar defer = $.Deferred()\n\t\tif (!this.$fileexistsTemplate) {\n\t\t\tvar self = this\n\t\t\t$.get(OC.filePath('files', 'templates', 'fileexists.html'), function(tmpl) {\n\t\t\t\tself.$fileexistsTemplate = $(tmpl)\n\t\t\t\tdefer.resolve(self.$fileexistsTemplate)\n\t\t\t})\n\t\t\t\t.fail(function() {\n\t\t\t\t\tdefer.reject()\n\t\t\t\t})\n\t\t} else {\n\t\t\tdefer.resolve(this.$fileexistsTemplate)\n\t\t}\n\t\treturn defer.promise()\n\t},\n\t_getFileList: function(dir, mimeType) { // this is only used by the spreedme app atm\n\t\tif (typeof (mimeType) === 'string') {\n\t\t\tmimeType = [mimeType]\n\t\t}\n\n\t\treturn $.getJSON(\n\t\t\tOC.filePath('files', 'ajax', 'list.php'),\n\t\t\t{\n\t\t\t\tdir: dir,\n\t\t\t\tmimetypes: JSON.stringify(mimeType)\n\t\t\t}\n\t\t)\n\t},\n\n\t/**\n\t * fills the filepicker with files\n\t */\n\t_fillFilePicker: function(dir) {\n\t\tvar self = this\n\t\tthis.$filelist.empty()\n\t\tthis.$filePicker.find('.emptycontent').hide()\n\t\tthis.$filelistContainer.addClass('icon-loading')\n\t\tthis.$filePicker.data('path', dir)\n\t\tvar filter = this.$filePicker.data('mimetype')\n\t\tif (typeof (filter) === 'string') {\n\t\t\tfilter = [filter]\n\t\t}\n\t\tself.$fileListHeader.find('.sort-indicator').addClass('hidden').removeClass('icon-triangle-n').removeClass('icon-triangle-s')\n\t\tself.$fileListHeader.find('[data-sort=' + self.filepicker.sortField + '] .sort-indicator').removeClass('hidden')\n\t\tif (self.filepicker.sortOrder === 'asc') {\n\t\t\tself.$fileListHeader.find('[data-sort=' + self.filepicker.sortField + '] .sort-indicator').addClass('icon-triangle-n')\n\t\t} else {\n\t\t\tself.$fileListHeader.find('[data-sort=' + self.filepicker.sortField + '] .sort-indicator').addClass('icon-triangle-s')\n\t\t}\n\t\tself.filepicker.filesClient.getFolderContents(dir).then(function(status, files) {\n\t\t\tself.filelist = files\n\t\t\tif (filter && filter.length > 0 && filter.indexOf('*') === -1) {\n\t\t\t\tfiles = files.filter(function(file) {\n\t\t\t\t\treturn file.type === 'dir' || filter.indexOf(file.mimetype) !== -1\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tvar Comparators = {\n\t\t\t\tname: function(fileInfo1, fileInfo2) {\n\t\t\t\t\tif (fileInfo1.type === 'dir' && fileInfo2.type !== 'dir') {\n\t\t\t\t\t\treturn -1\n\t\t\t\t\t}\n\t\t\t\t\tif (fileInfo1.type !== 'dir' && fileInfo2.type === 'dir') {\n\t\t\t\t\t\treturn 1\n\t\t\t\t\t}\n\t\t\t\t\treturn OC.Util.naturalSortCompare(fileInfo1.name, fileInfo2.name)\n\t\t\t\t},\n\t\t\t\tsize: function(fileInfo1, fileInfo2) {\n\t\t\t\t\treturn fileInfo1.size - fileInfo2.size\n\t\t\t\t},\n\t\t\t\tmtime: function(fileInfo1, fileInfo2) {\n\t\t\t\t\treturn fileInfo1.mtime - fileInfo2.mtime\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar comparator = Comparators[self.filepicker.sortField] || Comparators.name\n\t\t\tfiles = files.sort(function(file1, file2) {\n\t\t\t\tvar isFavorite = function(fileInfo) {\n\t\t\t\t\treturn fileInfo.tags && fileInfo.tags.indexOf(OC.TAG_FAVORITE) >= 0\n\t\t\t\t}\n\n\t\t\t\tif (isFavorite(file1) && !isFavorite(file2)) {\n\t\t\t\t\treturn -1\n\t\t\t\t} else if (!isFavorite(file1) && isFavorite(file2)) {\n\t\t\t\t\treturn 1\n\t\t\t\t}\n\n\t\t\t\treturn self.filepicker.sortOrder === 'asc' ? comparator(file1, file2) : -comparator(file1, file2)\n\t\t\t})\n\n\t\t\tself._fillSlug()\n\n\t\t\tif (files.length === 0) {\n\t\t\t\tself.$filePicker.find('.emptycontent').show()\n\t\t\t\tself.$fileListHeader.hide()\n\t\t\t} else {\n\t\t\t\tself.$filePicker.find('.emptycontent').hide()\n\t\t\t\tself.$fileListHeader.show()\n\t\t\t}\n\n\t\t\tself.$filelist.empty();\n\n\t\t\t$.each(files, function(idx, entry) {\n\t\t\t\tentry.icon = OC.MimeType.getIconUrl(entry.mimetype)\n\t\t\t\tvar simpleSize, sizeColor\n\t\t\t\tif (typeof (entry.size) !== 'undefined' && entry.size >= 0) {\n\t\t\t\t\tsimpleSize = OC.Util.humanFileSize(parseInt(entry.size, 10), true)\n\t\t\t\t\tsizeColor = Math.round(160 - Math.pow((entry.size / (1024 * 1024)), 2))\n\t\t\t\t} else {\n\t\t\t\t\tsimpleSize = t('files', 'Pending')\n\t\t\t\t\tsizeColor = 80\n\t\t\t\t}\n\n\t\t\t\t// split the filename in half if the size is bigger than 20 char\n\t\t\t\t// for ellipsis\n\t\t\t\tif (entry.name.length >= 10) {\n\t\t\t\t\t// leave maximum 10 letters\n\t\t\t\t\tvar split = Math.min(Math.floor(entry.name.length / 2), 10)\n\t\t\t\t\tvar filename1 = entry.name.substr(0, entry.name.length - split)\n\t\t\t\t\tvar filename2 = entry.name.substr(entry.name.length - split)\n\t\t\t\t} else {\n\t\t\t\t\tvar filename1 = entry.name\n\t\t\t\t\tvar filename2 = ''\n\t\t\t\t}\n\n\t\t\t\tvar $row = self.$listTmpl.octemplate({\n\t\t\t\t\ttype: entry.type,\n\t\t\t\t\tdir: dir,\n\t\t\t\t\tfilename: entry.name,\n\t\t\t\t\tfilename1: filename1,\n\t\t\t\t\tfilename2: filename2,\n\t\t\t\t\tdate: OC.Util.relativeModifiedDate(entry.mtime),\n\t\t\t\t\tsize: simpleSize,\n\t\t\t\t\tsizeColor: sizeColor,\n\t\t\t\t\ticon: entry.icon\n\t\t\t\t})\n\t\t\t\tif (entry.type === 'file') {\n\t\t\t\t\tvar urlSpec = {\n\t\t\t\t\t\tfile: dir + '/' + entry.name,\n\t\t\t\t\t\tx: 100,\n\t\t\t\t\t\ty: 100\n\t\t\t\t\t}\n\t\t\t\t\tvar img = new Image()\n\t\t\t\t\tvar previewUrl = OC.generateUrl('/core/preview.png?') + $.param(urlSpec)\n\t\t\t\t\timg.onload = function() {\n\t\t\t\t\t\tif (img.width > 5) {\n\t\t\t\t\t\t\t$row.find('td.filename').attr('style', 'background-image:url(' + previewUrl + ')')\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\timg.src = previewUrl\n\t\t\t\t}\n\t\t\t\tself.$filelist.append($row)\n\t\t\t})\n\n\t\t\tself.$filelistContainer.removeClass('icon-loading')\n\t\t})\n\t},\n\t/**\n\t * fills the tree list with directories\n\t */\n\t_fillSlug: function() {\n\t\tvar addButton = this.$dirTree.find('.actions.creatable').detach()\n\t\tthis.$dirTree.empty()\n\t\tvar self = this\n\n\t\tself.$dirTree.append(addButton)\n\n\t\tvar dir\n\t\tvar path = this.$filePicker.data('path')\n\t\tvar $template = $('<div data-dir=\"{dir}\"><a>{name}</a></div>').addClass('crumb')\n\t\tif (path) {\n\t\t\tvar paths = path.split('/')\n\t\t\t$.each(paths, function(index, dir) {\n\t\t\t\tdir = paths.pop()\n\t\t\t\tif (dir === '') {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tself.$dirTree.prepend($template.octemplate({\n\t\t\t\t\tdir: paths.join('/') + '/' + dir,\n\t\t\t\t\tname: dir\n\t\t\t\t}))\n\t\t\t})\n\t\t}\n\n\t\t$template.octemplate({\n\t\t\tdir: '',\n\t\t\tname: '' // Ugly but works ;)\n\t\t}, { escapeFunction: null }).prependTo(this.$dirTree)\n\n\t},\n\t/**\n\t * handle selection made in the tree list\n\t */\n\t_handleTreeListSelect: function(event, type) {\n\t\tvar self = event.data\n\t\tvar dir = $(event.target).closest('.crumb').data('dir')\n\t\tself._fillFilePicker(dir)\n\t\tvar getOcDialog = (event.target).closest('.oc-dialog')\n\t\tvar buttonEnableDisable = $('.primary', getOcDialog)\n\t\tthis._changeButtonsText(type, dir.split(/[/]+/).pop())\n\t\tif (this.$filePicker.data('mimetype').indexOf('httpd/unix-directory') !== -1 || this.$filePicker.data('allowDirectoryChooser')) {\n\t\t\tbuttonEnableDisable.prop('disabled', false)\n\t\t} else {\n\t\t\tbuttonEnableDisable.prop('disabled', true)\n\t\t}\n\t},\n\t/**\n\t * handle clicks made in the filepicker\n\t */\n\t_handlePickerClick: function(event, $element, type) {\n\t\tvar getOcDialog = this.$filePicker.closest('.oc-dialog')\n\t\tvar buttonEnableDisable = getOcDialog.find('.primary')\n\t\tif ($element.data('type') === 'file') {\n\t\t\tif (this.$filePicker.data('multiselect') !== true || !event.ctrlKey) {\n\t\t\t\tthis.$filelist.find('.filepicker_element_selected').removeClass('filepicker_element_selected')\n\t\t\t}\n\t\t\t$element.toggleClass('filepicker_element_selected')\n\t\t\tbuttonEnableDisable.prop('disabled', false)\n\t\t} else if ($element.data('type') === 'dir') {\n\t\t\tthis._fillFilePicker(this.$filePicker.data('path') + '/' + $element.data('entryname'))\n\t\t\tthis._changeButtonsText(type, $element.data('entryname'))\n\t\t\tif (this.$filePicker.data('mimetype').indexOf('httpd/unix-directory') !== -1 || this.$filePicker.data('allowDirectoryChooser')) {\n\t\t\t\tbuttonEnableDisable.prop('disabled', false)\n\t\t\t} else {\n\t\t\t\tbuttonEnableDisable.prop('disabled', true)\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Handle\n\t * @param type of action\n\t * @param dir on which to change buttons text\n\t * @private\n\t */\n\t_changeButtonsText: function(type, dir) {\n\t\tvar copyText = dir === '' ? t('core', 'Copy') : t('core', 'Copy to {folder}', { folder: dir })\n\t\tvar moveText = dir === '' ? t('core', 'Move') : t('core', 'Move to {folder}', { folder: dir })\n\t\tvar buttons = $('.oc-dialog-buttonrow button')\n\t\tswitch (type) {\n\t\t\tcase this.FILEPICKER_TYPE_CHOOSE:\n\t\t\t\tbreak\n\t\t\tcase this.FILEPICKER_TYPE_CUSTOM:\n\t\t\t\tbreak\n\t\t\tcase this.FILEPICKER_TYPE_COPY:\n\t\t\t\tbuttons.text(copyText)\n\t\t\t\tbreak\n\t\t\tcase this.FILEPICKER_TYPE_MOVE:\n\t\t\t\tbuttons.text(moveText)\n\t\t\t\tbreak\n\t\t\tcase this.FILEPICKER_TYPE_COPY_MOVE:\n\t\t\t\tbuttons.eq(0).text(copyText)\n\t\t\t\tbuttons.eq(1).text(moveText)\n\t\t\t\tbreak\n\t\t}\n\t}\n}\n\nexport default Dialogs\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { emit } from '@nextcloud/event-bus'\n\n/**\n * @private\n * @param {Document} global the document to read the initial value from\n * @param {Function} emit the function to invoke for every new token\n * @return {object}\n */\nexport const manageToken = (global, emit) => {\n\tlet token = global.getElementsByTagName('head')[0].getAttribute('data-requesttoken')\n\n\treturn {\n\t\tgetToken: () => token,\n\t\tsetToken: newToken => {\n\t\t\ttoken = newToken\n\n\t\t\temit('csrf-token-update', {\n\t\t\t\ttoken,\n\t\t\t})\n\t\t},\n\t}\n}\n\nconst manageFromDocument = manageToken(document, emit)\n\n/**\n * @return {string}\n */\nexport const getToken = manageFromDocument.getToken\n\n/**\n * @param {string} newToken new token\n */\nexport const setToken = manageFromDocument.setToken\n","/**\n * @copyright 2012 Robin Appelman icewind1991@gmail.com\n *\n * @author Arthur Schiwon <blizzz@arthur-schiwon.de>\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Lukas Reschke <lukas@statuscode.ch>\n * @author Robin Appelman <robin@icewind.nl>\n * @author Thomas Müller <thomas.mueller@tmit.eu>\n * @author Vincent Petry <vincent@nextcloud.com>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\n/* eslint-disable */\nimport $ from 'jquery'\n\nimport { getToken } from './requesttoken'\n\n/**\n * Create a new event source\n * @param {string} src\n * @param {object} [data] to be send as GET\n *\n * @constructs OCEventSource\n */\nconst OCEventSource = function(src, data) {\n\tvar dataStr = ''\n\tvar name\n\tvar joinChar\n\tthis.typelessListeners = []\n\tthis.closed = false\n\tthis.listeners = {}\n\tif (data) {\n\t\tfor (name in data) {\n\t\t\tdataStr += name + '=' + encodeURIComponent(data[name]) + '&'\n\t\t}\n\t}\n\tdataStr += 'requesttoken=' + encodeURIComponent(getToken())\n\tif (!this.useFallBack && typeof EventSource !== 'undefined') {\n\t\tjoinChar = '&'\n\t\tif (src.indexOf('?') === -1) {\n\t\t\tjoinChar = '?'\n\t\t}\n\t\tthis.source = new EventSource(src + joinChar + dataStr)\n\t\tthis.source.onmessage = function(e) {\n\t\t\tfor (var i = 0; i < this.typelessListeners.length; i++) {\n\t\t\t\tthis.typelessListeners[i](JSON.parse(e.data))\n\t\t\t}\n\t\t}.bind(this)\n\t} else {\n\t\tvar iframeId = 'oc_eventsource_iframe_' + OCEventSource.iframeCount\n\t\tOCEventSource.fallBackSources[OCEventSource.iframeCount] = this\n\t\tthis.iframe = $('<iframe/>')\n\t\tthis.iframe.attr('id', iframeId)\n\t\tthis.iframe.hide()\n\n\t\tjoinChar = '&'\n\t\tif (src.indexOf('?') === -1) {\n\t\t\tjoinChar = '?'\n\t\t}\n\t\tthis.iframe.attr('src', src + joinChar + 'fallback=true&fallback_id=' + OCEventSource.iframeCount + '&' + dataStr)\n\t\t$('body').append(this.iframe)\n\t\tthis.useFallBack = true\n\t\tOCEventSource.iframeCount++\n\t}\n\t// add close listener\n\tthis.listen('__internal__', function(data) {\n\t\tif (data === 'close') {\n\t\t\tthis.close()\n\t\t}\n\t}.bind(this))\n}\nOCEventSource.fallBackSources = []\nOCEventSource.iframeCount = 0// number of fallback iframes\nOCEventSource.fallBackCallBack = function(id, type, data) {\n\tOCEventSource.fallBackSources[id].fallBackCallBack(type, data)\n}\nOCEventSource.prototype = {\n\ttypelessListeners: [],\n\tiframe: null,\n\tlisteners: {}, // only for fallback\n\tuseFallBack: false,\n\t/**\n\t * Fallback callback for browsers that don't have the\n\t * native EventSource object.\n\t *\n\t * Calls the registered listeners.\n\t *\n\t * @private\n\t * @param {String} type event type\n\t * @param {Object} data received data\n\t */\n\tfallBackCallBack: function(type, data) {\n\t\tvar i\n\t\t// ignore messages that might appear after closing\n\t\tif (this.closed) {\n\t\t\treturn\n\t\t}\n\t\tif (type) {\n\t\t\tif (typeof this.listeners.done !== 'undefined') {\n\t\t\t\tfor (i = 0; i < this.listeners[type].length; i++) {\n\t\t\t\t\tthis.listeners[type][i](data)\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor (i = 0; i < this.typelessListeners.length; i++) {\n\t\t\t\tthis.typelessListeners[i](data)\n\t\t\t}\n\t\t}\n\t},\n\tlastLength: 0, // for fallback\n\t/**\n\t * Listen to a given type of events.\n\t *\n\t * @param {String} type event type\n\t * @param {Function} callback event callback\n\t */\n\tlisten: function(type, callback) {\n\t\tif (callback && callback.call) {\n\n\t\t\tif (type) {\n\t\t\t\tif (this.useFallBack) {\n\t\t\t\t\tif (!this.listeners[type]) {\n\t\t\t\t\t\tthis.listeners[type] = []\n\t\t\t\t\t}\n\t\t\t\t\tthis.listeners[type].push(callback)\n\t\t\t\t} else {\n\t\t\t\t\tthis.source.addEventListener(type, function(e) {\n\t\t\t\t\t\tif (typeof e.data !== 'undefined') {\n\t\t\t\t\t\t\tcallback(JSON.parse(e.data))\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcallback('')\n\t\t\t\t\t\t}\n\t\t\t\t\t}, false)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.typelessListeners.push(callback)\n\t\t\t}\n\t\t}\n\t},\n\t/**\n\t * Closes this event source.\n\t */\n\tclose: function() {\n\t\tthis.closed = true\n\t\tif (typeof this.source !== 'undefined') {\n\t\t\tthis.source.close()\n\t\t}\n\t}\n}\n\nexport default OCEventSource\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Daniel Calviño Sánchez <danxuliu@gmail.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\nimport _ from 'underscore'\n/** @typedef {import('jquery')} jQuery */\nimport $ from 'jquery'\n\nimport { menuSpeed } from './constants'\n\nexport let currentMenu = null\nexport let currentMenuToggle = null\n\n/**\n * For menu toggling\n *\n * @param {jQuery} $toggle the toggle element\n * @param {jQuery} $menuEl the menu container element\n * @param {Function | undefined} toggle callback invoked everytime the menu is opened\n * @param {boolean} headerMenu is this a top right header menu?\n * @return {void}\n */\nexport const registerMenu = function($toggle, $menuEl, toggle, headerMenu) {\n\t$menuEl.addClass('menu')\n\tconst isClickableElement = $toggle.prop('tagName') === 'A' || $toggle.prop('tagName') === 'BUTTON'\n\n\t// On link and button, the enter key trigger a click event\n\t// Only use the click to avoid two fired events\n\t$toggle.on(isClickableElement ? 'click.menu' : 'click.menu keyup.menu', function(event) {\n\t\t// prevent the link event (append anchor to URL)\n\t\tevent.preventDefault()\n\n\t\t// allow enter key as a trigger\n\t\tif (event.key && event.key !== 'Enter') {\n\t\t\treturn\n\t\t}\n\n\t\tif ($menuEl.is(currentMenu)) {\n\t\t\thideMenus()\n\t\t\treturn\n\t\t} else if (currentMenu) {\n\t\t\t// another menu was open?\n\t\t\t// close it\n\t\t\thideMenus()\n\t\t}\n\n\t\tif (headerMenu === true) {\n\t\t\t$menuEl.parent().addClass('openedMenu')\n\t\t}\n\n\t\t// Set menu to expanded\n\t\t$toggle.attr('aria-expanded', true)\n\n\t\t$menuEl.slideToggle(menuSpeed, toggle)\n\t\tcurrentMenu = $menuEl\n\t\tcurrentMenuToggle = $toggle\n\t})\n}\n\n/**\n * Unregister a previously registered menu\n *\n * @param {jQuery} $toggle the toggle element\n * @param {jQuery} $menuEl the menu container element\n */\nexport const unregisterMenu = ($toggle, $menuEl) => {\n\t// close menu if opened\n\tif ($menuEl.is(currentMenu)) {\n\t\thideMenus()\n\t}\n\t$toggle.off('click.menu').removeClass('menutoggle')\n\t$menuEl.removeClass('menu')\n}\n\n/**\n * Hides any open menus\n *\n * @param {Function} complete callback when the hiding animation is done\n */\nexport const hideMenus = function(complete) {\n\tif (currentMenu) {\n\t\tconst lastMenu = currentMenu\n\t\tcurrentMenu.trigger(new $.Event('beforeHide'))\n\t\tcurrentMenu.slideUp(menuSpeed, function() {\n\t\t\tlastMenu.trigger(new $.Event('afterHide'))\n\t\t\tif (complete) {\n\t\t\t\tcomplete.apply(this, arguments)\n\t\t\t}\n\t\t})\n\t}\n\n\t// Set menu to closed\n\t$('.menutoggle').attr('aria-expanded', false)\n\n\t$('.openedMenu').removeClass('openedMenu')\n\tcurrentMenu = null\n\tcurrentMenuToggle = null\n}\n\n/**\n * Shows a given element as menu\n *\n * @param {object} [$toggle=null] menu toggle\n * @param {object} $menuEl menu element\n * @param {Function} complete callback when the showing animation is done\n */\nexport const showMenu = ($toggle, $menuEl, complete) => {\n\tif ($menuEl.is(currentMenu)) {\n\t\treturn\n\t}\n\thideMenus()\n\tcurrentMenu = $menuEl\n\tcurrentMenuToggle = $toggle\n\t$menuEl.trigger(new $.Event('beforeShow'))\n\t$menuEl.show()\n\t$menuEl.trigger(new $.Event('afterShow'))\n\t// no animation\n\tif (_.isFunction(complete)) {\n\t\tcomplete()\n\t}\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\nexport const coreApps = ['', 'admin', 'log', 'core/search', 'core', '3rdparty']\nexport const menuSpeed = 50\nexport const PERMISSION_NONE = 0\nexport const PERMISSION_CREATE = 4\nexport const PERMISSION_READ = 1\nexport const PERMISSION_UPDATE = 2\nexport const PERMISSION_DELETE = 8\nexport const PERMISSION_SHARE = 16\nexport const PERMISSION_ALL = 31\nexport const TAG_FAVORITE = '_$!<Favorite>!$_'\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\nconst isAdmin = !!window._oc_isadmin\n\n/**\n * Returns whether the current user is an administrator\n *\n * @return {boolean} true if the user is an admin, false otherwise\n * @since 9.0.0\n */\nexport const isUserAdmin = () => isAdmin\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\n// This var is global because it's shared across webpack bundles\nwindow._oc_l10n_registry_translations = window._oc_l10n_registry_translations || {}\nwindow._oc_l10n_registry_plural_functions = window._oc_l10n_registry_plural_functions || {}\n\n/**\n * @param {string} appId the app id\n * @param {object} translations the translations list\n * @param {Function} pluralFunction the translations list\n */\nconst register = (appId, translations, pluralFunction) => {\n\twindow._oc_l10n_registry_translations[appId] = translations\n\twindow._oc_l10n_registry_plural_functions[appId] = pluralFunction\n}\n\n/**\n * @param {string} appId the app id\n * @param {object} translations the translations list\n * @param {Function} pluralFunction the translations list\n */\nconst extend = (appId, translations, pluralFunction) => {\n\twindow._oc_l10n_registry_translations[appId] = Object.assign(\n\t\twindow._oc_l10n_registry_translations[appId],\n\t\ttranslations\n\t)\n\twindow._oc_l10n_registry_plural_functions[appId] = pluralFunction\n}\n\n/**\n * @param {string} appId the app id\n * @param {object} translations the translations list\n * @param {Function} pluralFunction the translations list\n */\nexport const registerAppTranslations = (appId, translations, pluralFunction) => {\n\tif (!hasAppTranslations(appId)) {\n\t\tregister(appId, translations, pluralFunction)\n\t} else {\n\t\textend(appId, translations, pluralFunction)\n\t}\n}\n\n/**\n * @param {string} appId the app id\n */\nexport const unregisterAppTranslations = appId => {\n\tdelete window._oc_l10n_registry_translations[appId]\n\tdelete window._oc_l10n_registry_plural_functions[appId]\n}\n\n/**\n * @param {string} appId the app id\n * @return {boolean}\n */\nexport const hasAppTranslations = appId => {\n\treturn window._oc_l10n_registry_translations[appId] !== undefined\n\t\t&& window._oc_l10n_registry_plural_functions[appId] !== undefined\n}\n\n/**\n * @param {string} appId the app id\n * @return {object}\n */\nexport const getAppTranslations = appId => {\n\treturn {\n\t\ttranslations: window._oc_l10n_registry_translations[appId] || {},\n\t\tpluralFunction: window._oc_l10n_registry_plural_functions[appId],\n\t}\n}\n","/**\n * Copyright (c) 2014 Vincent Petry <pvince81@owncloud.com>\n * Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)\n * Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Daniel Kesselberg <mail@danielkesselberg.de>\n * @author Joas Schilling <coding@schilljs.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Morris Jobke <hey@morrisjobke.de>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n * @author Vincent Petry <vincent@nextcloud.com>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\nimport _ from 'underscore'\nimport $ from 'jquery'\nimport DOMPurify from 'dompurify'\nimport Handlebars from 'handlebars'\nimport identity from 'lodash/fp/identity'\nimport escapeHTML from 'escape-html'\nimport { generateFilePath } from '@nextcloud/router'\n\nimport OC from './index'\nimport {\n\tgetAppTranslations,\n\thasAppTranslations,\n\tregisterAppTranslations,\n\tunregisterAppTranslations,\n} from './l10n-registry'\n\n/**\n * L10N namespace with localization functions.\n *\n * @namespace OC.L10n\n */\nconst L10n = {\n\n\t/**\n\t * Load an app's translation bundle if not loaded already.\n\t *\n\t * @param {string} appName name of the app\n\t * @param {Function} callback callback to be called when\n\t * the translations are loaded\n\t * @return {Promise} promise\n\t */\n\tload(appName, callback) {\n\t\t// already available ?\n\t\tif (hasAppTranslations(appName) || OC.getLocale() === 'en') {\n\t\t\tconst deferred = $.Deferred()\n\t\t\tconst promise = deferred.promise()\n\t\t\tpromise.then(callback)\n\t\t\tdeferred.resolve()\n\t\t\treturn promise\n\t\t}\n\n\t\tconst self = this\n\t\tconst url = generateFilePath(appName, 'l10n', OC.getLocale() + '.json')\n\n\t\t// load JSON translation bundle per AJAX\n\t\treturn $.get(url)\n\t\t\t.then(\n\t\t\t\tfunction(result) {\n\t\t\t\t\tif (result.translations) {\n\t\t\t\t\t\tself.register(appName, result.translations, result.pluralForm)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t.then(callback)\n\t},\n\n\t/**\n\t * Register an app's translation bundle.\n\t *\n\t * @param {string} appName name of the app\n\t * @param {object<string, string>} bundle bundle\n\t */\n\tregister(appName, bundle) {\n\t\tregisterAppTranslations(appName, bundle, this._getPlural)\n\t},\n\n\t/**\n\t * @private\n\t */\n\t_unregister: unregisterAppTranslations,\n\n\t/**\n\t * Translate a string\n\t *\n\t * @param {string} app the id of the app for which to translate the string\n\t * @param {string} text the string to translate\n\t * @param {object} [vars] map of placeholder key to value\n\t * @param {number} [count] number to replace %n with\n\t * @param {Array} [options] options array\n\t * @param {boolean} [options.escape=true] enable/disable auto escape of placeholders (by default enabled)\n\t * @param {boolean} [options.sanitize=true] enable/disable sanitization (by default enabled)\n\t * @return {string}\n\t */\n\ttranslate(app, text, vars, count, options) {\n\t\tconst defaultOptions = {\n\t\t\tescape: true,\n\t\t\tsanitize: true,\n\t\t}\n\t\tconst allOptions = options || {}\n\t\t_.defaults(allOptions, defaultOptions)\n\n\t\tconst optSanitize = allOptions.sanitize ? DOMPurify.sanitize : identity\n\t\tconst optEscape = allOptions.escape ? escapeHTML : identity\n\n\t\t// TODO: cache this function to avoid inline recreation\n\t\t// of the same function over and over again in case\n\t\t// translate() is used in a loop\n\t\tconst _build = function(text, vars, count) {\n\t\t\treturn text.replace(/%n/g, count).replace(/{([^{}]*)}/g,\n\t\t\t\tfunction(a, b) {\n\t\t\t\t\tconst r = vars[b]\n\t\t\t\t\tif (typeof r === 'string' || typeof r === 'number') {\n\t\t\t\t\t\treturn optSanitize(optEscape(r))\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn optSanitize(a)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t)\n\t\t}\n\t\tlet translation = text\n\t\tconst bundle = getAppTranslations(app)\n\t\tconst value = bundle.translations[text]\n\t\tif (typeof (value) !== 'undefined') {\n\t\t\ttranslation = value\n\t\t}\n\n\t\tif (typeof vars === 'object' || count !== undefined) {\n\t\t\treturn optSanitize(_build(translation, vars, count))\n\t\t} else {\n\t\t\treturn optSanitize(translation)\n\t\t}\n\t},\n\n\t/**\n\t * Translate a plural string\n\t *\n\t * @param {string} app the id of the app for which to translate the string\n\t * @param {string} textSingular the string to translate for exactly one object\n\t * @param {string} textPlural the string to translate for n objects\n\t * @param {number} count number to determine whether to use singular or plural\n\t * @param {object} [vars] map of placeholder key to value\n\t * @param {Array} [options] options array\n\t * @param {boolean} [options.escape=true] enable/disable auto escape of placeholders (by default enabled)\n\t * @return {string} Translated string\n\t */\n\ttranslatePlural(app, textSingular, textPlural, count, vars, options) {\n\t\tconst identifier = '_' + textSingular + '_::_' + textPlural + '_'\n\t\tconst bundle = getAppTranslations(app)\n\t\tconst value = bundle.translations[identifier]\n\t\tif (typeof (value) !== 'undefined') {\n\t\t\tconst translation = value\n\t\t\tif ($.isArray(translation)) {\n\t\t\t\tconst plural = bundle.pluralFunction(count)\n\t\t\t\treturn this.translate(app, translation[plural], vars, count, options)\n\t\t\t}\n\t\t}\n\n\t\tif (count === 1) {\n\t\t\treturn this.translate(app, textSingular, vars, count, options)\n\t\t} else {\n\t\t\treturn this.translate(app, textPlural, vars, count, options)\n\t\t}\n\t},\n\n\t/**\n\t * The plural function taken from symfony\n\t *\n\t * @param {number} number the number of elements\n\t * @return {number}\n\t * @private\n\t */\n\t_getPlural(number) {\n\t\tlet language = OC.getLanguage()\n\t\tif (language === 'pt-BR') {\n\t\t\t// temporary set a locale for brazilian\n\t\t\tlanguage = 'xbr'\n\t\t}\n\n\t\tif (typeof language === 'undefined' || language === '') {\n\t\t\treturn (number === 1) ? 0 : 1\n\t\t}\n\n\t\tif (language.length > 3) {\n\t\t\tlanguage = language.substring(0, language.lastIndexOf('-'))\n\t\t}\n\n\t\t/*\n\t\t * The plural rules are derived from code of the Zend Framework (2010-09-25),\n\t\t * which is subject to the new BSD license (http://framework.zend.com/license/new-bsd).\n\t\t * Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)\n\t\t */\n\t\tswitch (language) {\n\t\tcase 'az':\n\t\tcase 'bo':\n\t\tcase 'dz':\n\t\tcase 'id':\n\t\tcase 'ja':\n\t\tcase 'jv':\n\t\tcase 'ka':\n\t\tcase 'km':\n\t\tcase 'kn':\n\t\tcase 'ko':\n\t\tcase 'ms':\n\t\tcase 'th':\n\t\tcase 'tr':\n\t\tcase 'vi':\n\t\tcase 'zh':\n\t\t\treturn 0\n\n\t\tcase 'af':\n\t\tcase 'bn':\n\t\tcase 'bg':\n\t\tcase 'ca':\n\t\tcase 'da':\n\t\tcase 'de':\n\t\tcase 'el':\n\t\tcase 'en':\n\t\tcase 'eo':\n\t\tcase 'es':\n\t\tcase 'et':\n\t\tcase 'eu':\n\t\tcase 'fa':\n\t\tcase 'fi':\n\t\tcase 'fo':\n\t\tcase 'fur':\n\t\tcase 'fy':\n\t\tcase 'gl':\n\t\tcase 'gu':\n\t\tcase 'ha':\n\t\tcase 'he':\n\t\tcase 'hu':\n\t\tcase 'is':\n\t\tcase 'it':\n\t\tcase 'ku':\n\t\tcase 'lb':\n\t\tcase 'ml':\n\t\tcase 'mn':\n\t\tcase 'mr':\n\t\tcase 'nah':\n\t\tcase 'nb':\n\t\tcase 'ne':\n\t\tcase 'nl':\n\t\tcase 'nn':\n\t\tcase 'no':\n\t\tcase 'oc':\n\t\tcase 'om':\n\t\tcase 'or':\n\t\tcase 'pa':\n\t\tcase 'pap':\n\t\tcase 'ps':\n\t\tcase 'pt':\n\t\tcase 'so':\n\t\tcase 'sq':\n\t\tcase 'sv':\n\t\tcase 'sw':\n\t\tcase 'ta':\n\t\tcase 'te':\n\t\tcase 'tk':\n\t\tcase 'ur':\n\t\tcase 'zu':\n\t\t\treturn (number === 1) ? 0 : 1\n\n\t\tcase 'am':\n\t\tcase 'bh':\n\t\tcase 'fil':\n\t\tcase 'fr':\n\t\tcase 'gun':\n\t\tcase 'hi':\n\t\tcase 'hy':\n\t\tcase 'ln':\n\t\tcase 'mg':\n\t\tcase 'nso':\n\t\tcase 'xbr':\n\t\tcase 'ti':\n\t\tcase 'wa':\n\t\t\treturn ((number === 0) || (number === 1)) ? 0 : 1\n\n\t\tcase 'be':\n\t\tcase 'bs':\n\t\tcase 'hr':\n\t\tcase 'ru':\n\t\tcase 'sh':\n\t\tcase 'sr':\n\t\tcase 'uk':\n\t\t\treturn ((number % 10 === 1) && (number % 100 !== 11)) ? 0 : (((number % 10 >= 2) && (number % 10 <= 4) && ((number % 100 < 10) || (number % 100 >= 20))) ? 1 : 2)\n\n\t\tcase 'cs':\n\t\tcase 'sk':\n\t\t\treturn (number === 1) ? 0 : (((number >= 2) && (number <= 4)) ? 1 : 2)\n\n\t\tcase 'ga':\n\t\t\treturn (number === 1) ? 0 : ((number === 2) ? 1 : 2)\n\n\t\tcase 'lt':\n\t\t\treturn ((number % 10 === 1) && (number % 100 !== 11)) ? 0 : (((number % 10 >= 2) && ((number % 100 < 10) || (number % 100 >= 20))) ? 1 : 2)\n\n\t\tcase 'sl':\n\t\t\treturn (number % 100 === 1) ? 0 : ((number % 100 === 2) ? 1 : (((number % 100 === 3) || (number % 100 === 4)) ? 2 : 3))\n\n\t\tcase 'mk':\n\t\t\treturn (number % 10 === 1) ? 0 : 1\n\n\t\tcase 'mt':\n\t\t\treturn (number === 1) ? 0 : (((number === 0) || ((number % 100 > 1) && (number % 100 < 11))) ? 1 : (((number % 100 > 10) && (number % 100 < 20)) ? 2 : 3))\n\n\t\tcase 'lv':\n\t\t\treturn (number === 0) ? 0 : (((number % 10 === 1) && (number % 100 !== 11)) ? 1 : 2)\n\n\t\tcase 'pl':\n\t\t\treturn (number === 1) ? 0 : (((number % 10 >= 2) && (number % 10 <= 4) && ((number % 100 < 12) || (number % 100 > 14))) ? 1 : 2)\n\n\t\tcase 'cy':\n\t\t\treturn (number === 1) ? 0 : ((number === 2) ? 1 : (((number === 8) || (number === 11)) ? 2 : 3))\n\n\t\tcase 'ro':\n\t\t\treturn (number === 1) ? 0 : (((number === 0) || ((number % 100 > 0) && (number % 100 < 20))) ? 1 : 2)\n\n\t\tcase 'ar':\n\t\t\treturn (number === 0) ? 0 : ((number === 1) ? 1 : ((number === 2) ? 2 : (((number % 100 >= 3) && (number % 100 <= 10)) ? 3 : (((number % 100 >= 11) && (number % 100 <= 99)) ? 4 : 5))))\n\n\t\tdefault:\n\t\t\treturn 0\n\t\t}\n\t},\n}\n\nexport default L10n\n\n/**\n * Returns the user's locale\n *\n * @return {string} locale string\n */\nexport const getLocale = () => $('html').data('locale') ?? 'en'\n\n/**\n * Returns the user's language\n *\n * @return {string} language string\n */\nexport const getLanguage = () => $('html').prop('lang')\n\nHandlebars.registerHelper('t', function(app, text) {\n\treturn L10n.translate(app, text)\n})\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author rakekniven <mark.ziegler@rakekniven.de>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\n/**\n * A little class to manage a status field for a \"saving\" process.\n * It can be used to display a starting message (e.g. \"Saving...\") and then\n * replace it with a green success message or a red error message.\n *\n * @namespace OC.msg\n */\nexport default {\n\t/**\n\t * Displayes a \"Saving...\" message in the given message placeholder\n\t *\n\t * @param {object} selector Placeholder to display the message in\n\t */\n\tstartSaving(selector) {\n\t\tthis.startAction(selector, t('core', 'Saving …'))\n\t},\n\n\t/**\n\t * Displayes a custom message in the given message placeholder\n\t *\n\t * @param {object} selector Placeholder to display the message in\n\t * @param {string} message Plain text message to display (no HTML allowed)\n\t */\n\tstartAction(selector, message) {\n\t\t$(selector).text(message)\n\t\t\t.removeClass('success')\n\t\t\t.removeClass('error')\n\t\t\t.stop(true, true)\n\t\t\t.show()\n\t},\n\n\t/**\n\t * Displayes an success/error message in the given selector\n\t *\n\t * @param {object} selector Placeholder to display the message in\n\t * @param {object} response Response of the server\n\t * @param {object} response.data Data of the servers response\n\t * @param {string} response.data.message Plain text message to display (no HTML allowed)\n\t * @param {string} response.status is being used to decide whether the message\n\t * is displayed as an error/success\n\t */\n\tfinishedSaving(selector, response) {\n\t\tthis.finishedAction(selector, response)\n\t},\n\n\t/**\n\t * Displayes an success/error message in the given selector\n\t *\n\t * @param {object} selector Placeholder to display the message in\n\t * @param {object} response Response of the server\n\t * @param {object} response.data Data of the servers response\n\t * @param {string} response.data.message Plain text message to display (no HTML allowed)\n\t * @param {string} response.status is being used to decide whether the message\n\t * is displayed as an error/success\n\t */\n\tfinishedAction(selector, response) {\n\t\tif (response.status === 'success') {\n\t\t\tthis.finishedSuccess(selector, response.data.message)\n\t\t} else {\n\t\t\tthis.finishedError(selector, response.data.message)\n\t\t}\n\t},\n\n\t/**\n\t * Displayes an success message in the given selector\n\t *\n\t * @param {object} selector Placeholder to display the message in\n\t * @param {string} message Plain text success message to display (no HTML allowed)\n\t */\n\tfinishedSuccess(selector, message) {\n\t\t$(selector).text(message)\n\t\t\t.addClass('success')\n\t\t\t.removeClass('error')\n\t\t\t.stop(true, true)\n\t\t\t.delay(3000)\n\t\t\t.fadeOut(900)\n\t\t\t.show()\n\t},\n\n\t/**\n\t * Displayes an error message in the given selector\n\t *\n\t * @param {object} selector Placeholder to display the message in\n\t * @param {string} message Plain text error message to display (no HTML allowed)\n\t */\n\tfinishedError(selector, message) {\n\t\t$(selector).text(message)\n\t\t\t.addClass('error')\n\t\t\t.removeClass('success')\n\t\t\t.show()\n\t},\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\nimport _ from 'underscore'\nimport $ from 'jquery'\nimport moment from 'moment'\nimport { generateUrl } from '@nextcloud/router'\n\nimport OC from './index'\n\n/**\n * @namespace OC.PasswordConfirmation\n */\nexport default {\n\tcallback: null,\n\n\tpageLoadTime: null,\n\n\tinit() {\n\t\t$('.password-confirm-required').on('click', _.bind(this.requirePasswordConfirmation, this))\n\t\tthis.pageLoadTime = moment.now()\n\t},\n\n\trequiresPasswordConfirmation() {\n\t\tconst serverTimeDiff = this.pageLoadTime - (window.nc_pageLoad * 1000)\n\t\tconst timeSinceLogin = moment.now() - (serverTimeDiff + (window.nc_lastLogin * 1000))\n\n\t\t// if timeSinceLogin > 30 minutes and user backend allows password confirmation\n\t\treturn (window.backendAllowsPasswordConfirmation && timeSinceLogin > 30 * 60 * 1000)\n\t},\n\n\t/**\n\t * @param {Function} callback success callback function\n\t * @param {object} options options\n\t * @param {Function} rejectCallback error callback function\n\t */\n\trequirePasswordConfirmation(callback, options, rejectCallback) {\n\t\toptions = typeof options !== 'undefined' ? options : {}\n\t\tconst defaults = {\n\t\t\ttitle: t('core', 'Authentication required'),\n\t\t\ttext: t(\n\t\t\t\t'core',\n\t\t\t\t'This action requires you to confirm your password'\n\t\t\t),\n\t\t\tconfirm: t('core', 'Confirm'),\n\t\t\tlabel: t('core', 'Password'),\n\t\t\terror: '',\n\t\t}\n\n\t\tconst config = _.extend(defaults, options)\n\n\t\tconst self = this\n\n\t\tif (this.requiresPasswordConfirmation()) {\n\t\t\tOC.dialogs.prompt(\n\t\t\t\tconfig.text,\n\t\t\t\tconfig.title,\n\t\t\t\tfunction(result, password) {\n\t\t\t\t\tif (result && password !== '') {\n\t\t\t\t\t\tself._confirmPassword(password, config)\n\t\t\t\t\t} else if (_.isFunction(rejectCallback)) {\n\t\t\t\t\t\trejectCallback()\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\ttrue,\n\t\t\t\tconfig.label,\n\t\t\t\ttrue\n\t\t\t).then(function() {\n\t\t\t\tconst $dialog = $('.oc-dialog:visible')\n\t\t\t\t$dialog.find('.ui-icon').remove()\n\t\t\t\t$dialog.addClass('password-confirmation')\n\t\t\t\tif (config.error !== '') {\n\t\t\t\t\tconst $error = $('<p></p>').addClass('msg warning').text(config.error)\n\t\t\t\t\t$dialog.find('.oc-dialog-content').append($error)\n\t\t\t\t}\n\t\t\t\t$dialog.find('.oc-dialog-buttonrow').addClass('aside')\n\n\t\t\t\tconst $buttons = $dialog.find('button')\n\t\t\t\t$buttons.eq(0).hide()\n\t\t\t\t$buttons.eq(1).text(config.confirm)\n\t\t\t})\n\t\t}\n\n\t\tthis.callback = callback\n\t},\n\n\t_confirmPassword(password, config) {\n\t\tconst self = this\n\n\t\t$.ajax({\n\t\t\turl: generateUrl('/login/confirm'),\n\t\t\tdata: {\n\t\t\t\tpassword,\n\t\t\t},\n\t\t\ttype: 'POST',\n\t\t\tsuccess(response) {\n\t\t\t\twindow.nc_lastLogin = response.lastLogin\n\n\t\t\t\tif (_.isFunction(self.callback)) {\n\t\t\t\t\tself.callback()\n\t\t\t\t}\n\t\t\t},\n\t\t\terror() {\n\t\t\t\tconfig.error = t('core', 'Failed to authenticate, try again')\n\t\t\t\tOC.PasswordConfirmation.requirePasswordConfirmation(self.callback, config)\n\t\t\t},\n\t\t})\n\t},\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\nexport const theme = window._theme || {}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\nimport _ from 'underscore'\nimport OC from './index'\n\n/**\n * Utility class for the history API,\n * includes fallback to using the URL hash when\n * the browser doesn't support the history API.\n *\n * @namespace OC.Util.History\n */\nexport default {\n\n\t_handlers: [],\n\n\t/**\n\t * Push the current URL parameters to the history stack\n\t * and change the visible URL.\n\t * Note: this includes a workaround for IE8/IE9 that uses\n\t * the hash part instead of the search part.\n\t *\n\t * @param {object | string} params to append to the URL, can be either a string\n\t * or a map\n\t * @param {string} [url] URL to be used, otherwise the current URL will be used,\n\t * using the params as query string\n\t * @param {boolean} [replace=false] whether to replace instead of pushing\n\t */\n\t_pushState(params, url, replace) {\n\t\tlet strParams\n\t\tif (typeof (params) === 'string') {\n\t\t\tstrParams = params\n\t\t} else {\n\t\t\tstrParams = OC.buildQueryString(params)\n\t\t}\n\n\t\tif (window.history.pushState) {\n\t\t\turl = url || location.pathname + '?' + strParams\n\t\t\t// Workaround for bug with SVG and window.history.pushState on Firefox < 51\n\t\t\t// https://bugzilla.mozilla.org/show_bug.cgi?id=652991\n\t\t\tconst isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1\n\t\t\tif (isFirefox && parseInt(navigator.userAgent.split('/').pop()) < 51) {\n\t\t\t\tconst patterns = document.querySelectorAll('[fill^=\"url(#\"], [stroke^=\"url(#\"], [filter^=\"url(#invert\"]')\n\t\t\t\tfor (let i = 0, ii = patterns.length, pattern; i < ii; i++) {\n\t\t\t\t\tpattern = patterns[i]\n\t\t\t\t\t// eslint-disable-next-line no-self-assign\n\t\t\t\t\tpattern.style.fill = pattern.style.fill\n\t\t\t\t\t// eslint-disable-next-line no-self-assign\n\t\t\t\t\tpattern.style.stroke = pattern.style.stroke\n\t\t\t\t\tpattern.removeAttribute('filter')\n\t\t\t\t\tpattern.setAttribute('filter', 'url(#invert)')\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (replace) {\n\t\t\t\twindow.history.replaceState(params, '', url)\n\t\t\t} else {\n\t\t\t\twindow.history.pushState(params, '', url)\n\t\t\t}\n\t\t} else {\n\t\t\t// use URL hash for IE8\n\t\t\twindow.location.hash = '?' + strParams\n\t\t\t// inhibit next onhashchange that just added itself\n\t\t\t// to the event queue\n\t\t\tthis._cancelPop = true\n\t\t}\n\t},\n\n\t/**\n\t * Push the current URL parameters to the history stack\n\t * and change the visible URL.\n\t * Note: this includes a workaround for IE8/IE9 that uses\n\t * the hash part instead of the search part.\n\t *\n\t * @param {object | string} params to append to the URL, can be either a string or a map\n\t * @param {string} [url] URL to be used, otherwise the current URL will be used, using the params as query string\n\t */\n\tpushState(params, url) {\n\t\tthis._pushState(params, url, false)\n\t},\n\n\t/**\n\t * Push the current URL parameters to the history stack\n\t * and change the visible URL.\n\t * Note: this includes a workaround for IE8/IE9 that uses\n\t * the hash part instead of the search part.\n\t *\n\t * @param {object | string} params to append to the URL, can be either a string\n\t * or a map\n\t * @param {string} [url] URL to be used, otherwise the current URL will be used,\n\t * using the params as query string\n\t */\n\treplaceState(params, url) {\n\t\tthis._pushState(params, url, true)\n\t},\n\n\t/**\n\t * Add a popstate handler\n\t *\n\t * @param {Function} handler handler\n\t */\n\taddOnPopStateHandler(handler) {\n\t\tthis._handlers.push(handler)\n\t},\n\n\t/**\n\t * Parse a query string from the hash part of the URL.\n\t * (workaround for IE8 / IE9)\n\t *\n\t * @return {string}\n\t */\n\t_parseHashQuery() {\n\t\tconst hash = window.location.hash\n\t\tconst pos = hash.indexOf('?')\n\t\tif (pos >= 0) {\n\t\t\treturn hash.substr(pos + 1)\n\t\t}\n\t\tif (hash.length) {\n\t\t\t// remove hash sign\n\t\t\treturn hash.substr(1)\n\t\t}\n\t\treturn ''\n\t},\n\n\t_decodeQuery(query) {\n\t\treturn query.replace(/\\+/g, ' ')\n\t},\n\n\t/**\n\t * Parse the query/search part of the URL.\n\t * Also try and parse it from the URL hash (for IE8)\n\t *\n\t * @return {object} map of parameters\n\t */\n\tparseUrlQuery() {\n\t\tconst query = this._parseHashQuery()\n\t\tlet params\n\t\t// try and parse from URL hash first\n\t\tif (query) {\n\t\t\tparams = OC.parseQueryString(this._decodeQuery(query))\n\t\t}\n\t\t// else read from query attributes\n\t\tparams = _.extend(params || {}, OC.parseQueryString(this._decodeQuery(location.search)))\n\t\treturn params || {}\n\t},\n\n\t_onPopState(e) {\n\t\tif (this._cancelPop) {\n\t\t\tthis._cancelPop = false\n\t\t\treturn\n\t\t}\n\t\tlet params\n\t\tif (!this._handlers.length) {\n\t\t\treturn\n\t\t}\n\t\tparams = (e && e.state)\n\t\tif (_.isString(params)) {\n\t\t\tparams = OC.parseQueryString(params)\n\t\t} else if (!params) {\n\t\t\tparams = this.parseUrlQuery() || {}\n\t\t}\n\t\tfor (let i = 0; i < this._handlers.length; i++) {\n\t\t\tthis._handlers[i](params)\n\t\t}\n\t},\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\nimport moment from 'moment'\n\nimport History from './util-history'\nimport OC from './index'\nimport { formatFileSize as humanFileSize } from '@nextcloud/files'\n\n/**\n * @param {any} t -\n */\nfunction chunkify(t) {\n\t// Adapted from http://my.opera.com/GreyWyvern/blog/show.dml/1671288\n\tconst tz = []\n\tlet x = 0\n\tlet y = -1\n\tlet n = 0\n\tlet c\n\n\twhile (x < t.length) {\n\t\tc = t.charAt(x)\n\t\t// only include the dot in strings\n\t\tconst m = ((!n && c === '.') || (c >= '0' && c <= '9'))\n\t\tif (m !== n) {\n\t\t\t// next chunk\n\t\t\ty++\n\t\t\ttz[y] = ''\n\t\t\tn = m\n\t\t}\n\t\ttz[y] += c\n\t\tx++\n\t}\n\treturn tz\n}\n\n/**\n * Utility functions\n *\n * @namespace OC.Util\n */\nexport default {\n\n\tHistory,\n\n\t/**\n\t * @deprecated use https://nextcloud.github.io/nextcloud-files/modules/_humanfilesize_.html#formatfilesize\n\t */\n\thumanFileSize,\n\n\t/**\n\t * Returns a file size in bytes from a humanly readable string\n\t * Makes 2kB to 2048.\n\t * Inspired by computerFileSize in helper.php\n\t *\n\t * @param {string} string file size in human readable format\n\t * @return {number} or null if string could not be parsed\n\t *\n\t *\n\t */\n\tcomputerFileSize(string) {\n\t\tif (typeof string !== 'string') {\n\t\t\treturn null\n\t\t}\n\n\t\tconst s = string.toLowerCase().trim()\n\t\tlet bytes = null\n\n\t\tconst bytesArray = {\n\t\t\tb: 1,\n\t\t\tk: 1024,\n\t\t\tkb: 1024,\n\t\t\tmb: 1024 * 1024,\n\t\t\tm: 1024 * 1024,\n\t\t\tgb: 1024 * 1024 * 1024,\n\t\t\tg: 1024 * 1024 * 1024,\n\t\t\ttb: 1024 * 1024 * 1024 * 1024,\n\t\t\tt: 1024 * 1024 * 1024 * 1024,\n\t\t\tpb: 1024 * 1024 * 1024 * 1024 * 1024,\n\t\t\tp: 1024 * 1024 * 1024 * 1024 * 1024,\n\t\t}\n\n\t\tconst matches = s.match(/^[\\s+]?([0-9]*)(\\.([0-9]+))?( +)?([kmgtp]?b?)$/i)\n\t\tif (matches !== null) {\n\t\t\tbytes = parseFloat(s)\n\t\t\tif (!isFinite(bytes)) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t} else {\n\t\t\treturn null\n\t\t}\n\t\tif (matches[5]) {\n\t\t\tbytes = bytes * bytesArray[matches[5]]\n\t\t}\n\n\t\tbytes = Math.round(bytes)\n\t\treturn bytes\n\t},\n\n\t/**\n\t * @param {string|number} timestamp timestamp\n\t * @param {string} format date format, see momentjs docs\n\t * @return {string} timestamp formatted as requested\n\t */\n\tformatDate(timestamp, format) {\n\t\tif (window.TESTING === undefined) {\n\t\t\tconsole.warn('OC.Util.formatDate is deprecated and will be removed in Nextcloud 21. See @nextcloud/moment')\n\t\t}\n\t\tformat = format || 'LLL'\n\t\treturn moment(timestamp).format(format)\n\t},\n\n\t/**\n\t * @param {string|number} timestamp timestamp\n\t * @return {string} human readable difference from now\n\t */\n\trelativeModifiedDate(timestamp) {\n\t\tif (window.TESTING === undefined) {\n\t\t\tconsole.warn('OC.Util.relativeModifiedDate is deprecated and will be removed in Nextcloud 21. See @nextcloud/moment')\n\t\t}\n\t\tconst diff = moment().diff(moment(timestamp))\n\t\tif (diff >= 0 && diff < 45000) {\n\t\t\treturn t('core', 'seconds ago')\n\t\t}\n\t\treturn moment(timestamp).fromNow()\n\t},\n\n\t/**\n\t * Returns the width of a generic browser scrollbar\n\t *\n\t * @return {number} width of scrollbar\n\t */\n\tgetScrollBarWidth() {\n\t\tif (this._scrollBarWidth) {\n\t\t\treturn this._scrollBarWidth\n\t\t}\n\n\t\tconst inner = document.createElement('p')\n\t\tinner.style.width = '100%'\n\t\tinner.style.height = '200px'\n\n\t\tconst outer = document.createElement('div')\n\t\touter.style.position = 'absolute'\n\t\touter.style.top = '0px'\n\t\touter.style.left = '0px'\n\t\touter.style.visibility = 'hidden'\n\t\touter.style.width = '200px'\n\t\touter.style.height = '150px'\n\t\touter.style.overflow = 'hidden'\n\t\touter.appendChild(inner)\n\n\t\tdocument.body.appendChild(outer)\n\t\tconst w1 = inner.offsetWidth\n\t\touter.style.overflow = 'scroll'\n\t\tlet w2 = inner.offsetWidth\n\t\tif (w1 === w2) {\n\t\t\tw2 = outer.clientWidth\n\t\t}\n\n\t\tdocument.body.removeChild(outer)\n\n\t\tthis._scrollBarWidth = (w1 - w2)\n\n\t\treturn this._scrollBarWidth\n\t},\n\n\t/**\n\t * Remove the time component from a given date\n\t *\n\t * @param {Date} date date\n\t * @return {Date} date with stripped time\n\t */\n\tstripTime(date) {\n\t\t// FIXME: likely to break when crossing DST\n\t\t// would be better to use a library like momentJS\n\t\treturn new Date(date.getFullYear(), date.getMonth(), date.getDate())\n\t},\n\n\t/**\n\t * Compare two strings to provide a natural sort\n\t *\n\t * @param {string} a first string to compare\n\t * @param {string} b second string to compare\n\t * @return {number} -1 if b comes before a, 1 if a comes before b\n\t * or 0 if the strings are identical\n\t */\n\tnaturalSortCompare(a, b) {\n\t\tlet x\n\t\tconst aa = chunkify(a)\n\t\tconst bb = chunkify(b)\n\n\t\tfor (x = 0; aa[x] && bb[x]; x++) {\n\t\t\tif (aa[x] !== bb[x]) {\n\t\t\t\tconst aNum = Number(aa[x]); const bNum = Number(bb[x])\n\t\t\t\t// note: == is correct here\n\t\t\t\t/* eslint-disable-next-line */\n\t\t\t\tif (aNum == aa[x] && bNum == bb[x]) {\n\t\t\t\t\treturn aNum - bNum\n\t\t\t\t} else {\n\t\t\t\t\t// Note: This locale setting isn't supported by all browsers but for the ones\n\t\t\t\t\t// that do there will be more consistency between client-server sorting\n\t\t\t\t\treturn aa[x].localeCompare(bb[x], OC.getLanguage())\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn aa.length - bb.length\n\t},\n\n\t/**\n\t * Calls the callback in a given interval until it returns true\n\t *\n\t * @param {Function} callback function to call on success\n\t * @param {number} interval in milliseconds\n\t */\n\twaitFor(callback, interval) {\n\t\tconst internalCallback = function() {\n\t\t\tif (callback() !== true) {\n\t\t\t\tsetTimeout(internalCallback, interval)\n\t\t\t}\n\t\t}\n\n\t\tinternalCallback()\n\t},\n\n\t/**\n\t * Checks if a cookie with the given name is present and is set to the provided value.\n\t *\n\t * @param {string} name name of the cookie\n\t * @param {string} value value of the cookie\n\t * @return {boolean} true if the cookie with the given name has the given value\n\t */\n\tisCookieSetToValue(name, value) {\n\t\tconst cookies = document.cookie.split(';')\n\t\tfor (let i = 0; i < cookies.length; i++) {\n\t\t\tconst cookie = cookies[i].split('=')\n\t\t\tif (cookie[0].trim() === name && cookie[1].trim() === value) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\t\treturn false\n\t},\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\nconst base = window._oc_debug\n\nexport const debug = base\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\nlet webroot = window._oc_webroot\n\nif (typeof webroot === 'undefined') {\n\twebroot = location.pathname\n\tconst pos = webroot.indexOf('/index.php/')\n\tif (pos !== -1) {\n\t\twebroot = webroot.substr(0, pos)\n\t} else {\n\t\twebroot = webroot.substr(0, webroot.lastIndexOf('/'))\n\t}\n}\n\nexport default webroot\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\nexport const get = context => name => {\n\tconst namespaces = name.split('.')\n\tconst tail = namespaces.pop()\n\n\tfor (let i = 0; i < namespaces.length; i++) {\n\t\tcontext = context[namespaces[i]]\n\t\tif (!context) {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn context[tail]\n}\n\n/**\n * Set a variable by name\n *\n * @param {string} context context\n * @return {Function} setter\n * @deprecated 19.0.0 use https://lodash.com/docs#set\n */\nexport const set = context => (name, value) => {\n\tconst namespaces = name.split('.')\n\tconst tail = namespaces.pop()\n\n\tfor (let i = 0; i < namespaces.length; i++) {\n\t\tif (!context[namespaces[i]]) {\n\t\t\tcontext[namespaces[i]] = {}\n\t\t}\n\t\tcontext = context[namespaces[i]]\n\t}\n\tcontext[tail] = value\n\treturn value\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { subscribe } from '@nextcloud/event-bus'\n\nimport { addScript, addStyle } from './legacy-loader'\nimport {\n\tajaxConnectionLostHandler,\n\tprocessAjaxError,\n\tregisterXHRForErrorProcessing,\n} from './xhr-error'\nimport Apps from './apps'\nimport { AppConfig, appConfig } from './appconfig'\nimport { appSettings } from './appsettings'\nimport appswebroots from './appswebroots'\nimport Backbone from './backbone'\nimport {\n\tbasename,\n\tdirname,\n\tencodePath,\n\tisSamePath,\n\tjoinPaths,\n} from '@nextcloud/paths'\nimport {\n\tbuild as buildQueryString,\n\tparse as parseQueryString,\n} from './query-string'\nimport Config from './config'\nimport {\n\tcoreApps,\n\tmenuSpeed,\n\tPERMISSION_ALL,\n\tPERMISSION_CREATE,\n\tPERMISSION_DELETE,\n\tPERMISSION_NONE,\n\tPERMISSION_READ,\n\tPERMISSION_SHARE,\n\tPERMISSION_UPDATE,\n\tTAG_FAVORITE,\n} from './constants'\nimport ContactsMenu from './contactsmenu'\nimport { currentUser, getCurrentUser } from './currentuser'\nimport Dialogs from './dialogs'\nimport EventSource from './eventsource'\nimport { get, set } from './get_set'\nimport { getCapabilities } from './capabilities'\nimport {\n\tgetHost,\n\tgetHostName,\n\tgetPort,\n\tgetProtocol,\n} from './host'\nimport {\n\tgetToken as getRequestToken,\n} from './requesttoken'\nimport {\n\thideMenus,\n\tregisterMenu,\n\tshowMenu,\n\tunregisterMenu,\n} from './menu'\nimport { isUserAdmin } from './admin'\nimport L10N, {\n\tgetLanguage,\n\tgetLocale,\n} from './l10n'\nimport {\n\tgetCanonicalLocale,\n} from '@nextcloud/l10n'\n\nimport {\n\tgenerateUrl,\n\tgenerateFilePath,\n\tgenerateOcsUrl,\n\tgenerateRemoteUrl,\n\tgetRootUrl,\n\timagePath,\n\tlinkTo,\n} from '@nextcloud/router'\n\nimport {\n\tlinkToRemoteBase,\n} from './routing'\nimport msg from './msg'\nimport Notification from './notification'\nimport PasswordConfirmation from './password-confirmation'\nimport Plugins from './plugins'\nimport { theme } from './theme'\nimport Util from './util'\nimport { debug } from './debug'\nimport { redirect, reload } from './navigation'\nimport webroot from './webroot'\n\n/** @namespace OC */\nexport default {\n\t/*\n\t * Constants\n\t */\n\tcoreApps,\n\tmenuSpeed,\n\tPERMISSION_ALL,\n\tPERMISSION_CREATE,\n\tPERMISSION_DELETE,\n\tPERMISSION_NONE,\n\tPERMISSION_READ,\n\tPERMISSION_SHARE,\n\tPERMISSION_UPDATE,\n\tTAG_FAVORITE,\n\n\t/*\n\t * Deprecated helpers to be removed\n\t */\n\t/**\n\t * Check if a user file is allowed to be handled.\n\t *\n\t * @param {string} file to check\n\t * @return {boolean}\n\t * @deprecated 17.0.0\n\t */\n\tfileIsBlacklisted: file => !!(file.match(Config.blacklist_files_regex)),\n\n\taddScript,\n\taddStyle,\n\tApps,\n\tAppConfig,\n\tappConfig,\n\tappSettings,\n\tappswebroots,\n\tBackbone,\n\tContactsMenu,\n\tconfig: Config,\n\t/**\n\t * Currently logged in user or null if none\n\t *\n\t * @type {string}\n\t * @deprecated use `getCurrentUser` from https://www.npmjs.com/package/@nextcloud/auth\n\t */\n\tcurrentUser,\n\tdialogs: Dialogs,\n\tEventSource,\n\t/**\n\t * Returns the currently logged in user or null if there is no logged in\n\t * user (public page mode)\n\t *\n\t * @since 9.0.0\n\t * @deprecated 19.0.0 use `getCurrentUser` from https://www.npmjs.com/package/@nextcloud/auth\n\t */\n\tgetCurrentUser,\n\tisUserAdmin,\n\tL10N,\n\n\t/**\n\t * Ajax error handlers\n\t *\n\t * @todo remove from here and keep internally -> requires new tests\n\t */\n\t_ajaxConnectionLostHandler: ajaxConnectionLostHandler,\n\t_processAjaxError: processAjaxError,\n\tregisterXHRForErrorProcessing,\n\n\t/**\n\t * Capabilities\n\t *\n\t * @type {Array}\n\t * @deprecated 20.0.0 use @nextcloud/capabilities instead\n\t */\n\tgetCapabilities,\n\n\t/*\n\t * Legacy menu helpers\n\t */\n\thideMenus,\n\tregisterMenu,\n\tshowMenu,\n\tunregisterMenu,\n\n\t/*\n\t * Path helpers\n\t */\n\t/**\n\t * @deprecated 18.0.0 use https://www.npmjs.com/package/@nextcloud/paths\n\t */\n\tbasename,\n\t/**\n\t * @deprecated 18.0.0 use https://www.npmjs.com/package/@nextcloud/paths\n\t */\n\tencodePath,\n\t/**\n\t * @deprecated 18.0.0 use https://www.npmjs.com/package/@nextcloud/paths\n\t */\n\tdirname,\n\t/**\n\t * @deprecated 18.0.0 use https://www.npmjs.com/package/@nextcloud/paths\n\t */\n\tisSamePath,\n\t/**\n\t * @deprecated 18.0.0 use https://www.npmjs.com/package/@nextcloud/paths\n\t */\n\tjoinPaths,\n\n\t/**\n\t * Host (url) helpers\n\t */\n\tgetHost,\n\tgetHostName,\n\tgetPort,\n\tgetProtocol,\n\n\t/**\n\t * @deprecated 20.0.0 use `getCanonicalLocale` from https://www.npmjs.com/package/@nextcloud/l10n\n\t */\n\tgetCanonicalLocale,\n\tgetLocale,\n\tgetLanguage,\n\t/**\n\t * Loads translations for the given app asynchronously.\n\t *\n\t * @param {string} app app name\n\t * @param {Function} callback callback to call after loading\n\t * @return {Promise}\n\t * @deprecated 17.0.0 use OC.L10N.load instead\n\t */\n\taddTranslations: L10N.load,\n\n\t/**\n\t * Query string helpers\n\t */\n\tbuildQueryString,\n\tparseQueryString,\n\n\tmsg,\n\tNotification,\n\tPasswordConfirmation,\n\tPlugins,\n\ttheme,\n\tUtil,\n\tdebug,\n\t/**\n\t * @deprecated 19.0.0 use `generateFilePath` from https://www.npmjs.com/package/@nextcloud/router\n\t */\n\tfilePath: generateFilePath,\n\t/**\n\t * @deprecated 19.0.0 use `generateUrl` from https://www.npmjs.com/package/@nextcloud/router\n\t */\n\tgenerateUrl,\n\t/**\n\t * @deprecated 19.0.0 use https://lodash.com/docs#get\n\t */\n\tget: get(window),\n\t/**\n\t * @deprecated 19.0.0 use https://lodash.com/docs#set\n\t */\n\tset: set(window),\n\t/**\n\t * @deprecated 19.0.0 use `getRootUrl` from https://www.npmjs.com/package/@nextcloud/router\n\t */\n\tgetRootPath: getRootUrl,\n\t/**\n\t * @deprecated 19.0.0 use `imagePath` from https://www.npmjs.com/package/@nextcloud/router\n\t */\n\timagePath,\n\tredirect,\n\treload,\n\trequestToken: getRequestToken(),\n\t/**\n\t * @deprecated 19.0.0 use `linkTo` from https://www.npmjs.com/package/@nextcloud/router\n\t */\n\tlinkTo,\n\t/**\n\t * @param {string} service service name\n\t * @param {number} version OCS API version\n\t * @return {string} OCS API base path\n\t * @deprecated 19.0.0 use `generateOcsUrl` from https://www.npmjs.com/package/@nextcloud/router\n\t */\n\tlinkToOCS: (service, version) => {\n\t\treturn generateOcsUrl(service, {}, {\n\t\t\tocsVersion: version || 1,\n\t\t}) + '/'\n\t},\n\t/**\n\t * @deprecated 19.0.0 use `generateRemoteUrl` from https://www.npmjs.com/package/@nextcloud/router\n\t */\n\tlinkToRemote: generateRemoteUrl,\n\tlinkToRemoteBase,\n\t/**\n\t * Relative path to Nextcloud root.\n\t * For example: \"/nextcloud\"\n\t *\n\t * @type {string}\n\t *\n\t * @deprecated 19.0.0 use `getRootUrl` from https://www.npmjs.com/package/@nextcloud/router\n\t * @see OC#getRootPath\n\t */\n\twebroot,\n}\n\n// Keep the request token prop in sync\nsubscribe('csrf-token-update', e => {\n\tOC.requestToken = e.token\n\n\t// Logging might help debug (Sentry) issues\n\tconsole.info('OC.requestToken changed', e.token)\n})\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\n/* eslint-disable */\nimport $ from 'jquery'\nimport { filePath } from './routing'\nimport { generateFilePath } from \"@nextcloud/router\"\n\n/**\n * Opens a popup with the setting for an app.\n * @param {string} appid The ID of the app e.g. 'calendar', 'contacts' or 'files'.\n * @param {boolean|string} loadJS If true 'js/settings.js' is loaded. If it's a string\n * it will attempt to load a script by that name in the 'js' directory.\n * @param {boolean} [cache] If true the javascript file won't be forced refreshed. Defaults to true.\n * @param {string} [scriptName] The name of the PHP file to load. Defaults to 'settings.php' in\n * the root of the app directory hierarchy.\n *\n * @deprecated 17.0.0 this method is unused and will be removed with Nextcloud 18\n */\nexport const appSettings = args => {\n\tconsole.warn('OC.appSettings is deprecated and will be removed with Nextcloud 18')\n\n\tif (typeof args === 'undefined' || typeof args.appid === 'undefined') {\n\t\tthrow {\n\t\t\tname: 'MissingParameter',\n\t\t\tmessage: 'The parameter appid is missing'\n\t\t}\n\t}\n\tvar props = { scriptName: 'settings.php', cache: true }\n\t$.extend(props, args)\n\tvar settings = $('#appsettings')\n\tif (settings.length === 0) {\n\t\tthrow {\n\t\t\tname: 'MissingDOMElement',\n\t\t\tmessage: 'There has be be an element with id \"appsettings\" for the popup to show.'\n\t\t}\n\t}\n\tvar popup = $('#appsettings_popup')\n\tif (popup.length === 0) {\n\t\t$('body').prepend('<div class=\"popup hidden\" id=\"appsettings_popup\"></div>')\n\t\tpopup = $('#appsettings_popup')\n\t\tpopup.addClass(settings.hasClass('topright') ? 'topright' : 'bottomleft')\n\t}\n\tif (popup.is(':visible')) {\n\t\tpopup.hide().remove()\n\t} else {\n\t\tconst arrowclass = settings.hasClass('topright') ? 'up' : 'left'\n\t\t$.get(generateFilePath(props.appid, '', props.scriptName), function(data) {\n\t\t\tpopup.html(data).ready(function() {\n\t\t\t\tpopup.prepend('<span class=\"arrow ' + arrowclass + '\"></span><h2>' + t('core', 'Settings') + '</h2><a class=\"close\"></a>').show()\n\t\t\t\tpopup.find('.close').bind('click', function() {\n\t\t\t\t\tpopup.remove()\n\t\t\t\t})\n\t\t\t\tif (typeof props.loadJS !== 'undefined') {\n\t\t\t\t\tvar scriptname\n\t\t\t\t\tif (props.loadJS === true) {\n\t\t\t\t\t\tscriptname = 'settings.js'\n\t\t\t\t\t} else if (typeof props.loadJS === 'string') {\n\t\t\t\t\t\tscriptname = props.loadJS\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow {\n\t\t\t\t\t\t\tname: 'InvalidParameter',\n\t\t\t\t\t\t\tmessage: 'The \"loadJS\" parameter must be either boolean or a string.'\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (props.cache) {\n\t\t\t\t\t\t$.ajaxSetup({ cache: true })\n\t\t\t\t\t}\n\t\t\t\t\t$.getScript(generateFilePath(props.appid, 'js', scriptname))\n\t\t\t\t\t\t.fail(function(jqxhr, settings, e) {\n\t\t\t\t\t\t\tthrow e\n\t\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}).show()\n\t\t}, 'html')\n\t}\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { getCapabilities as realGetCapabilities } from '@nextcloud/capabilities'\n\n/**\n * Returns the capabilities\n *\n * @return {Array} capabilities\n *\n * @since 14.0.0\n */\nexport const getCapabilities = () => {\n\tconsole.warn('OC.getCapabilities is deprecated and will be removed in Nextcloud 21. See @nextcloud/capabilities')\n\treturn realGetCapabilities()\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\nexport const getProtocol = () => window.location.protocol.split(':')[0]\n\n/**\n * Returns the host used to access this Nextcloud instance\n * Host is sometimes the same as the hostname but now always.\n *\n * Examples:\n * http://example.com => example.com\n * https://example.com => example.com\n * http://example.com:8080 => example.com:8080\n *\n * @return {string} host\n *\n * @since 8.2.0\n * @deprecated 17.0.0 use window.location.host directly\n */\nexport const getHost = () => window.location.host\n\n/**\n * Returns the hostname used to access this Nextcloud instance\n * The hostname is always stripped of the port\n *\n * @return {string} hostname\n * @since 9.0.0\n * @deprecated 17.0.0 use window.location.hostname directly\n */\nexport const getHostName = () => window.location.hostname\n\n/**\n * Returns the port number used to access this Nextcloud instance\n *\n * @return {number} port number\n *\n * @since 8.2.0\n * @deprecated 17.0.0 use window.location.port directly\n */\nexport const getPort = () => window.location.port\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\n/**\n * Parses a URL query string into a JS map\n *\n * @param {string} queryString query string in the format param1=1234&param2=abcde&param3=xyz\n * @return {object.<string, string>} map containing key/values matching the URL parameters\n */\nexport const parse = queryString => {\n\tlet pos\n\tlet components\n\tconst result = {}\n\tlet key\n\tif (!queryString) {\n\t\treturn null\n\t}\n\tpos = queryString.indexOf('?')\n\tif (pos >= 0) {\n\t\tqueryString = queryString.substr(pos + 1)\n\t}\n\tconst parts = queryString.replace(/\\+/g, '%20').split('&')\n\tfor (let i = 0; i < parts.length; i++) {\n\t\t// split on first equal sign\n\t\tconst part = parts[i]\n\t\tpos = part.indexOf('=')\n\t\tif (pos >= 0) {\n\t\t\tcomponents = [\n\t\t\t\tpart.substr(0, pos),\n\t\t\t\tpart.substr(pos + 1),\n\t\t\t]\n\t\t} else {\n\t\t\t// key only\n\t\t\tcomponents = [part]\n\t\t}\n\t\tif (!components.length) {\n\t\t\tcontinue\n\t\t}\n\t\tkey = decodeURIComponent(components[0])\n\t\tif (!key) {\n\t\t\tcontinue\n\t\t}\n\t\t// if equal sign was there, return string\n\t\tif (components.length > 1) {\n\t\t\tresult[key] = decodeURIComponent(components[1])\n\t\t} else {\n\t\t\t// no equal sign => null value\n\t\t\tresult[key] = null\n\t\t}\n\t}\n\treturn result\n}\n\n/**\n * Builds a URL query from a JS map.\n *\n * @param {object.<string, string>} params map containing key/values matching the URL parameters\n * @return {string} String containing a URL query (without question) mark\n */\nexport const build = params => {\n\tif (!params) {\n\t\treturn ''\n\t}\n\treturn $.map(params, function(value, key) {\n\t\tlet s = encodeURIComponent(key)\n\t\tif (value !== null && typeof (value) !== 'undefined') {\n\t\t\ts += '=' + encodeURIComponent(value)\n\t\t}\n\t\treturn s\n\t}).join('&')\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\nexport default {\n\n\t/**\n\t * @type {Array.<OC.Plugin>}\n\t */\n\t_plugins: {},\n\n\t/**\n\t * Register plugin\n\t *\n\t * @param {string} targetName app name / class name to hook into\n\t * @param {OC.Plugin} plugin plugin\n\t */\n\tregister(targetName, plugin) {\n\t\tlet plugins = this._plugins[targetName]\n\t\tif (!plugins) {\n\t\t\tplugins = this._plugins[targetName] = []\n\t\t}\n\t\tplugins.push(plugin)\n\t},\n\n\t/**\n\t * Returns all plugin registered to the given target\n\t * name / app name / class name.\n\t *\n\t * @param {string} targetName app name / class name to hook into\n\t * @return {Array.<OC.Plugin>} array of plugins\n\t */\n\tgetPlugins(targetName) {\n\t\treturn this._plugins[targetName] || []\n\t},\n\n\t/**\n\t * Call attach() on all plugins registered to the given target name.\n\t *\n\t * @param {string} targetName app name / class name\n\t * @param {object} targetObject to be extended\n\t * @param {object} [options] options\n\t */\n\tattach(targetName, targetObject, options) {\n\t\tconst plugins = this.getPlugins(targetName)\n\t\tfor (let i = 0; i < plugins.length; i++) {\n\t\t\tif (plugins[i].attach) {\n\t\t\t\tplugins[i].attach(targetObject, options)\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Call detach() on all plugins registered to the given target name.\n\t *\n\t * @param {string} targetName app name / class name\n\t * @param {object} targetObject to be extended\n\t * @param {object} [options] options\n\t */\n\tdetach(targetName, targetObject, options) {\n\t\tconst plugins = this.getPlugins(targetName)\n\t\tfor (let i = 0; i < plugins.length; i++) {\n\t\t\tif (plugins[i].detach) {\n\t\t\t\tplugins[i].detach(targetObject, options)\n\t\t\t}\n\t\t}\n\t},\n\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\nexport const redirect = targetURL => { window.location = targetURL }\n\n/**\n * Reloads the current page\n *\n * @deprecated 17.0.0 use window.location.reload directly\n */\nexport const reload = () => { window.location.reload() }\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\nimport {\n\tgetRootUrl as realGetRootUrl,\n} from '@nextcloud/router'\n\n/**\n * Creates a relative url for remote use\n *\n * @param {string} service id\n * @return {string} the url\n */\nexport const linkToRemoteBase = service => {\n\treturn realGetRootUrl() + '/remote.php/' + service\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\nimport { emit } from '@nextcloud/event-bus'\nimport { loadState } from '@nextcloud/initial-state'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { generateUrl } from '@nextcloud/router'\n\nimport OC from './OC'\nimport { setToken as setRequestToken, getToken as getRequestToken } from './OC/requesttoken'\n\nlet config = null\n/**\n * The legacy jsunit tests overwrite OC.config before calling initCore\n * therefore we need to wait with assigning the config fallback until initCore calls initSessionHeartBeat\n */\nconst loadConfig = () => {\n\ttry {\n\t\tconfig = loadState('core', 'config')\n\t} catch (e) {\n\t\t// This fallback is just for our legacy jsunit tests since we have no way to mock loadState calls\n\t\tconfig = OC.config\n\t}\n}\n\n/**\n * session heartbeat (defaults to enabled)\n *\n * @return {boolean}\n */\nconst keepSessionAlive = () => {\n\treturn config.session_keepalive === undefined\n\t\t|| !!config.session_keepalive\n}\n\n/**\n * get interval in seconds\n *\n * @return {number}\n */\nconst getInterval = () => {\n\tlet interval = NaN\n\tif (config.session_lifetime) {\n\t\tinterval = Math.floor(config.session_lifetime / 2)\n\t}\n\n\t// minimum one minute, max 24 hours, default 15 minutes\n\treturn Math.min(\n\t\t24 * 3600,\n\t\tMath.max(\n\t\t\t60,\n\t\t\tisNaN(interval) ? 900 : interval\n\t\t)\n\t)\n}\n\nconst getToken = async () => {\n\tconst url = generateUrl('/csrftoken')\n\n\t// Not using Axios here as Axios is not stubbable with the sinon fake server\n\t// see https://stackoverflow.com/questions/41516044/sinon-mocha-test-with-async-ajax-calls-didnt-return-promises\n\t// see js/tests/specs/coreSpec.js for the tests\n\tconst resp = await $.get(url)\n\n\treturn resp.token\n}\n\nconst poll = async () => {\n\ttry {\n\t\tconst token = await getToken()\n\t\tsetRequestToken(token)\n\t} catch (e) {\n\t\tconsole.error('session heartbeat failed', e)\n\t}\n}\n\nconst startPolling = () => {\n\tconst interval = setInterval(poll, getInterval() * 1000)\n\n\tconsole.info('session heartbeat polling started')\n\n\treturn interval\n}\n\nconst registerAutoLogout = () => {\n\tif (!config.auto_logout || !getCurrentUser()) {\n\t\treturn\n\t}\n\n\tlet lastActive = Date.now()\n\twindow.addEventListener('mousemove', e => {\n\t\tlastActive = Date.now()\n\t\tlocalStorage.setItem('lastActive', lastActive)\n\t})\n\n\twindow.addEventListener('touchstart', e => {\n\t\tlastActive = Date.now()\n\t\tlocalStorage.setItem('lastActive', lastActive)\n\t})\n\n\twindow.addEventListener('storage', e => {\n\t\tif (e.key !== 'lastActive') {\n\t\t\treturn\n\t\t}\n\t\tlastActive = e.newValue\n\t})\n\n\tsetInterval(function() {\n\t\tconst timeout = Date.now() - config.session_lifetime * 1000\n\t\tif (lastActive < timeout) {\n\t\t\tconsole.info('Inactivity timout reached, logging out')\n\t\t\tconst logoutUrl = generateUrl('/logout') + '?requesttoken=' + encodeURIComponent(getRequestToken())\n\t\t\twindow.location = logoutUrl\n\t\t}\n\t}, 1000)\n}\n\n/**\n * Calls the server periodically to ensure that session and CSRF\n * token doesn't expire\n */\nexport const initSessionHeartBeat = () => {\n\tloadConfig()\n\n\tregisterAutoLogout()\n\n\tif (!keepSessionAlive()) {\n\t\tconsole.info('session heartbeat disabled')\n\t\treturn\n\t}\n\tlet interval = startPolling()\n\n\twindow.addEventListener('online', async () => {\n\t\tconsole.info('browser is online again, resuming heartbeat')\n\t\tinterval = startPolling()\n\t\ttry {\n\t\t\tawait poll()\n\t\t\tconsole.info('session token successfully updated after resuming network')\n\n\t\t\t// Let apps know we're online and requests will have the new token\n\t\t\temit('networkOnline', {\n\t\t\t\tsuccess: true,\n\t\t\t})\n\t\t} catch (e) {\n\t\t\tconsole.error('could not update session token after resuming network', e)\n\n\t\t\t// Let apps know we're online but requests might have an outdated token\n\t\t\temit('networkOnline', {\n\t\t\t\tsuccess: false,\n\t\t\t})\n\t\t}\n\t})\n\twindow.addEventListener('offline', () => {\n\t\tconsole.info('browser is offline, stopping heartbeat')\n\n\t\t// Let apps know we're offline\n\t\temit('networkOffline', {})\n\n\t\tclearInterval(interval)\n\t\tconsole.info('session heartbeat polling stopped')\n\t})\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Jan-Christoph Borchardt <hey@jancborchardt.net>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author nacho <nacho@ownyourbits.com>\n * @author Vincent Petry <vincent@nextcloud.com>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\n/* globals Snap */\nimport _ from 'underscore'\nimport $ from 'jquery'\nimport moment from 'moment'\nimport cssVars from 'css-vars-ponyfill'\n\nimport { initSessionHeartBeat } from './session-heartbeat'\nimport OC from './OC/index'\nimport { setUp as setUpContactsMenu } from './components/ContactsMenu'\nimport { setUp as setUpMainMenu } from './components/MainMenu'\nimport { setUp as setUpUserMenu } from './components/UserMenu'\nimport PasswordConfirmation from './OC/password-confirmation'\n\n// keep in sync with core/css/variables.scss\nconst breakpointMobileWidth = 1024\n\nconst resizeMenu = () => {\n\tconst appList = $('#appmenu li')\n\tconst rightHeaderWidth = $('.header-right').outerWidth()\n\tconst headerWidth = $('header').outerWidth()\n\tconst usePercentualAppMenuLimit = 0.67\n\tconst minAppsDesktop = 12\n\tlet availableWidth = headerWidth - $('#nextcloud').outerWidth() - (rightHeaderWidth > 210 ? rightHeaderWidth : 210)\n\tconst isMobile = $(window).width() < breakpointMobileWidth\n\tif (!isMobile) {\n\t\tavailableWidth = availableWidth * usePercentualAppMenuLimit\n\t}\n\tlet appCount = Math.floor((availableWidth / $(appList).width()))\n\tif (isMobile && appCount > minAppsDesktop) {\n\t\tappCount = minAppsDesktop\n\t}\n\tif (!isMobile && appCount < minAppsDesktop) {\n\t\tappCount = minAppsDesktop\n\t}\n\n\t// show at least 2 apps in the popover\n\tif (appList.length - 1 - appCount >= 1) {\n\t\tappCount--\n\t}\n\n\t$('#more-apps a').removeClass('active')\n\tlet lastShownApp\n\tfor (let k = 0; k < appList.length - 1; k++) {\n\t\tconst name = $(appList[k]).data('id')\n\t\tif (k < appCount) {\n\t\t\t$(appList[k]).removeClass('hidden')\n\t\t\t$('#apps li[data-id=' + name + ']').addClass('in-header')\n\t\t\tlastShownApp = appList[k]\n\t\t} else {\n\t\t\t$(appList[k]).addClass('hidden')\n\t\t\t$('#apps li[data-id=' + name + ']').removeClass('in-header')\n\t\t\t// move active app to last position if it is active\n\t\t\tif (appCount > 0 && $(appList[k]).children('a').hasClass('active')) {\n\t\t\t\t$(lastShownApp).addClass('hidden')\n\t\t\t\t$('#apps li[data-id=' + $(lastShownApp).data('id') + ']').removeClass('in-header')\n\t\t\t\t$(appList[k]).removeClass('hidden')\n\t\t\t\t$('#apps li[data-id=' + name + ']').addClass('in-header')\n\t\t\t}\n\t\t}\n\t}\n\n\t// show/hide more apps icon\n\tif ($('#apps li:not(.in-header)').length === 0) {\n\t\t$('#more-apps').hide()\n\t\t$('#navigation').hide()\n\t} else {\n\t\t$('#more-apps').show()\n\t}\n}\n\nconst initLiveTimestamps = () => {\n\t// Update live timestamps every 30 seconds\n\tsetInterval(() => {\n\t\t$('.live-relative-timestamp').each(function() {\n\t\t\t$(this).text(OC.Util.relativeModifiedDate(parseInt($(this).attr('data-timestamp'), 10)))\n\t\t})\n\t}, 30 * 1000)\n}\n\n/**\n * Moment doesn't have aliases for every locale and doesn't parse some locale IDs correctly so we need to alias them\n */\nconst localeAliases = {\n\tzh: 'zh-cn',\n\tzh_Hans: 'zh-cn',\n\tzh_Hans_CN: 'zh-cn',\n\tzh_Hans_HK: 'zh-cn',\n\tzh_Hans_MO: 'zh-cn',\n\tzh_Hans_SG: 'zh-cn',\n\tzh_Hant: 'zh-hk',\n\tzh_Hant_HK: 'zh-hk',\n\tzh_Hant_MO: 'zh-mo',\n\tzh_Hant_TW: 'zh-tw',\n}\nlet locale = OC.getLocale()\nif (Object.prototype.hasOwnProperty.call(localeAliases, locale)) {\n\tlocale = localeAliases[locale]\n}\n\n/**\n * Set users locale to moment.js as soon as possible\n */\nmoment.locale(locale)\n\n/**\n * Initializes core\n */\nexport const initCore = () => {\n\tconst userAgent = window.navigator.userAgent\n\tconst edge = userAgent.indexOf('Edge/')\n\n\tif (edge > 0) {\n\t\t$('html').addClass('edge')\n\t\tconsole.info('Legacy browser detected, applying css vars polyfill')\n\t\tcssVars({\n\t\t\twatch: true,\n\t\t\t// set edge < 16 as incompatible\n\t\t\tonlyLegacy: !(/Edge\\/([0-9]{2})\\./i.test(navigator.userAgent)\n\t\t\t\t&& parseInt(/Edge\\/([0-9]{2})\\./i.exec(navigator.userAgent)[1]) < 16),\n\t\t})\n\t}\n\n\t$(window).on('unload.main', () => { OC._unloadCalled = true })\n\t$(window).on('beforeunload.main', () => {\n\t\t// super-trick thanks to http://stackoverflow.com/a/4651049\n\t\t// in case another handler displays a confirmation dialog (ex: navigating away\n\t\t// during an upload), there are two possible outcomes: user clicked \"ok\" or\n\t\t// \"cancel\"\n\n\t\t// first timeout handler is called after unload dialog is closed\n\t\tsetTimeout(() => {\n\t\t\tOC._userIsNavigatingAway = true\n\n\t\t\t// second timeout event is only called if user cancelled (Chrome),\n\t\t\t// but in other browsers it might still be triggered, so need to\n\t\t\t// set a higher delay...\n\t\t\tsetTimeout(() => {\n\t\t\t\tif (!OC._unloadCalled) {\n\t\t\t\t\tOC._userIsNavigatingAway = false\n\t\t\t\t}\n\t\t\t}, 10000)\n\t\t}, 1)\n\t})\n\t$(document).on('ajaxError.main', function(event, request, settings) {\n\t\tif (settings && settings.allowAuthErrors) {\n\t\t\treturn\n\t\t}\n\t\tOC._processAjaxError(request)\n\t})\n\n\tinitSessionHeartBeat()\n\n\tOC.registerMenu($('#expand'), $('#expanddiv'), false, true)\n\n\t// toggle for menus\n\t$(document).on('mouseup.closemenus', event => {\n\t\tconst $el = $(event.target)\n\t\tif ($el.closest('.menu').length || $el.closest('.menutoggle').length) {\n\t\t\t// don't close when clicking on the menu directly or a menu toggle\n\t\t\treturn false\n\t\t}\n\n\t\tOC.hideMenus()\n\t})\n\n\tsetUpMainMenu()\n\tsetUpUserMenu()\n\tsetUpContactsMenu()\n\n\t// move triangle of apps dropdown to align with app name triangle\n\t// 2 is the additional offset between the triangles\n\tif ($('#navigation').length) {\n\t\t$('#header #nextcloud + .menutoggle').on('click', () => {\n\t\t\t$('#menu-css-helper').remove()\n\t\t\tconst caretPosition = $('.header-appname + .icon-caret').offset().left - 2\n\t\t\tif (caretPosition > 255) {\n\t\t\t\t// if the app name is longer than the menu, just put the triangle in the middle\n\n\t\t\t} else {\n\t\t\t\t$('head').append('<style id=\"menu-css-helper\">#navigation:after { left: ' + caretPosition + 'px }</style>')\n\t\t\t}\n\t\t})\n\t\t$('#header #appmenu .menutoggle').on('click', () => {\n\t\t\t$('#appmenu').toggleClass('menu-open')\n\t\t\tif ($('#appmenu').is(':visible')) {\n\t\t\t\t$('#menu-css-helper').remove()\n\t\t\t}\n\t\t})\n\t}\n\n\t$(window).resize(resizeMenu)\n\tsetTimeout(resizeMenu, 0)\n\n\t// just add snapper for logged in users\n\t// and if the app doesn't handle the nav slider itself\n\tif ($('#app-navigation').length && !$('html').hasClass('lte9')\n\t\t&& !$('#app-content').hasClass('no-snapper')) {\n\n\t\t// App sidebar on mobile\n\t\tconst snapper = new Snap({\n\t\t\telement: document.getElementById('app-content'),\n\t\t\tdisable: 'right',\n\t\t\tmaxPosition: 300, // $navigation-width\n\t\t\tminDragDistance: 100,\n\t\t})\n\n\t\t$('#app-content').prepend('<div id=\"app-navigation-toggle\" class=\"icon-menu\" style=\"display:none\" tabindex=\"0\"></div>')\n\n\t\t// keep track whether snapper is currently animating, and\n\t\t// prevent to call open or close while that is the case\n\t\t// to avoid duplicating events (snap.js doesn't check this)\n\t\tlet animating = false\n\t\tsnapper.on('animating', () => {\n\t\t\t// we need this because the trigger button\n\t\t\t// is also implicitly wired to close by snapper\n\t\t\tanimating = true\n\t\t})\n\t\tsnapper.on('animated', () => {\n\t\t\tanimating = false\n\t\t})\n\t\tsnapper.on('start', () => {\n\t\t\t// we need this because dragging triggers that\n\t\t\tanimating = true\n\t\t})\n\t\tsnapper.on('end', () => {\n\t\t\t// we need this because dragging stop triggers that\n\t\t\tanimating = false\n\t\t})\n\n\t\t// These are necessary because calling open or close\n\t\t// on snapper during an animation makes it trigger an\n\t\t// unfinishable animation, which itself will continue\n\t\t// triggering animating events and cause high CPU load,\n\t\t//\n\t\t// Ref https://github.com/jakiestfu/Snap.js/issues/216\n\t\tconst oldSnapperOpen = snapper.open\n\t\tconst oldSnapperClose = snapper.close\n\t\tconst _snapperOpen = () => {\n\t\t\tif (animating || snapper.state().state !== 'closed') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\toldSnapperOpen('left')\n\t\t}\n\n\t\tconst _snapperClose = () => {\n\t\t\tif (animating || snapper.state().state === 'closed') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\toldSnapperClose()\n\t\t}\n\n\t\t// Needs to be deferred to properly catch in-between\n\t\t// events that snap.js is triggering after dragging.\n\t\t//\n\t\t// Skipped when running unit tests as we are not testing\n\t\t// the snap.js workarounds...\n\t\tif (!window.TESTING) {\n\t\t\tsnapper.open = () => {\n\t\t\t\t_.defer(_snapperOpen)\n\t\t\t}\n\t\t\tsnapper.close = () => {\n\t\t\t\t_.defer(_snapperClose)\n\t\t\t}\n\t\t}\n\n\t\t$('#app-navigation-toggle').click((e) => {\n\t\t\t// close is implicit in the button by snap.js\n\t\t\tif (snapper.state().state !== 'left') {\n\t\t\t\tsnapper.open()\n\t\t\t}\n\t\t})\n\t\t$('#app-navigation-toggle').keypress(e => {\n\t\t\tif (snapper.state().state === 'left') {\n\t\t\t\tsnapper.close()\n\t\t\t} else {\n\t\t\t\tsnapper.open()\n\t\t\t}\n\t\t})\n\n\t\t// close sidebar when switching navigation entry\n\t\tconst $appNavigation = $('#app-navigation')\n\t\t$appNavigation.delegate('a, :button', 'click', event => {\n\t\t\tconst $target = $(event.target)\n\t\t\t// don't hide navigation when changing settings or adding things\n\t\t\tif ($target.is('.app-navigation-noclose')\n\t\t\t\t|| $target.closest('.app-navigation-noclose').length) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif ($target.is('.app-navigation-entry-utils-menu-button')\n\t\t\t\t|| $target.closest('.app-navigation-entry-utils-menu-button').length) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif ($target.is('.add-new')\n\t\t\t\t|| $target.closest('.add-new').length) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif ($target.is('#app-settings')\n\t\t\t\t|| $target.closest('#app-settings').length) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tsnapper.close()\n\t\t})\n\n\t\tlet navigationBarSlideGestureEnabled = false\n\t\tlet navigationBarSlideGestureAllowed = true\n\t\tlet navigationBarSlideGestureEnablePending = false\n\n\t\tOC.allowNavigationBarSlideGesture = () => {\n\t\t\tnavigationBarSlideGestureAllowed = true\n\n\t\t\tif (navigationBarSlideGestureEnablePending) {\n\t\t\t\tsnapper.enable()\n\n\t\t\t\tnavigationBarSlideGestureEnabled = true\n\t\t\t\tnavigationBarSlideGestureEnablePending = false\n\t\t\t}\n\t\t}\n\n\t\tOC.disallowNavigationBarSlideGesture = () => {\n\t\t\tnavigationBarSlideGestureAllowed = false\n\n\t\t\tif (navigationBarSlideGestureEnabled) {\n\t\t\t\tconst endCurrentDrag = true\n\t\t\t\tsnapper.disable(endCurrentDrag)\n\n\t\t\t\tnavigationBarSlideGestureEnabled = false\n\t\t\t\tnavigationBarSlideGestureEnablePending = true\n\t\t\t}\n\t\t}\n\n\t\tconst toggleSnapperOnSize = () => {\n\t\t\tif ($(window).width() > breakpointMobileWidth) {\n\t\t\t\tsnapper.close()\n\t\t\t\tsnapper.disable()\n\n\t\t\t\tnavigationBarSlideGestureEnabled = false\n\t\t\t\tnavigationBarSlideGestureEnablePending = false\n\t\t\t} else if (navigationBarSlideGestureAllowed) {\n\t\t\t\tsnapper.enable()\n\n\t\t\t\tnavigationBarSlideGestureEnabled = true\n\t\t\t\tnavigationBarSlideGestureEnablePending = false\n\t\t\t} else {\n\t\t\t\tnavigationBarSlideGestureEnablePending = true\n\t\t\t}\n\t\t}\n\n\t\t$(window).resize(_.debounce(toggleSnapperOnSize, 250))\n\n\t\t// initial call\n\t\ttoggleSnapperOnSize()\n\n\t}\n\n\tinitLiveTimestamps()\n\tPasswordConfirmation.init()\n}\n","/**\n * @copyright 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\n$.prototype.tooltip = (function(tooltip) {\n\treturn function(config) {\n\t\ttry {\n\t\t\treturn tooltip.call(this, config)\n\t\t} catch (ex) {\n\t\t\tif (ex instanceof TypeError && config === 'destroy') {\n\t\t\t\tif (window.TESTING === undefined) {\n\t\t\t\t\tconsole.error('Deprecated call $.tooltip(\\'destroy\\') has been deprecated and should be removed')\n\t\t\t\t}\n\t\t\t\treturn tooltip.call(this, 'dispose')\n\t\t\t}\n\t\t\tif (ex instanceof TypeError && config === 'fixTitle') {\n\t\t\t\tif (window.TESTING === undefined) {\n\t\t\t\t\tconsole.error('Deprecated call $.tooltip(\\'fixTitle\\') has been deprecated and should be removed')\n\t\t\t\t}\n\t\t\t\treturn tooltip.call(this, '_fixTitle')\n\t\t\t}\n\t\t}\n\t}\n})($.prototype.tooltip)\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\nimport OC from '../OC'\n\nimport $ from 'jquery'\n\nexport const setUp = () => {\n\tconst $menu = $('#header #settings')\n\t// Using page terminoogy as below\n\tconst $excludedPageClasses = [\n\t\t'user-status-menu-item__header',\n\t]\n\n\t// show loading feedback\n\t$menu.delegate('a', 'click', event => {\n\t\tlet $page = $(event.target)\n\t\tif (!$page.is('a')) {\n\t\t\t$page = $page.closest('a')\n\t\t}\n\t\tif (event.which === 1 && !event.ctrlKey && !event.metaKey) {\n\t\t\tif (!$excludedPageClasses.includes($page.attr('class'))) {\n\t\t\t\t$page.find('img').remove()\n\t\t\t\t$page.find('div').remove() // prevent odd double-clicks\n\t\t\t\t$page.prepend($('<div/>').addClass('icon-loading-small'))\n\t\t\t}\n\t\t} else {\n\t\t\t// Close navigation when opening menu entry in\n\t\t\t// a new tab\n\t\t\tOC.hideMenus(() => false)\n\t\t}\n\t})\n\n\t$menu.delegate('a', 'mouseup', event => {\n\t\tif (event.which === 2) {\n\t\t\t// Close navigation when opening app in\n\t\t\t// a new tab via middle click\n\t\t\tOC.hideMenus(() => false)\n\t\t}\n\t})\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\nimport OC from '../OC'\n\n/**\n * Set up the main menu toggle to react to media query changes.\n * If the screen is small enough, the main menu becomes a toggle.\n * If the screen is bigger, the main menu is not a toggle any more.\n */\nexport const setUp = () => {\n\n\tObject.assign(OC, {\n\t\tsetNavigationCounter(id, counter) {\n\t\t\tconst appmenuElement = document.getElementById('appmenu').querySelector('[data-id=\"' + id + '\"] svg')\n\t\t\tconst appsElement = document.getElementById('apps').querySelector('[data-id=\"' + id + '\"] svg')\n\t\t\tif (counter === 0) {\n\t\t\t\tappmenuElement.classList.remove('has-unread')\n\t\t\t\tappsElement.classList.remove('has-unread')\n\t\t\t\tappmenuElement.getElementsByTagName('image')[0].style.mask = ''\n\t\t\t\tappsElement.getElementsByTagName('image')[0].style.mask = ''\n\t\t\t} else {\n\t\t\t\tappmenuElement.classList.add('has-unread')\n\t\t\t\tappsElement.classList.add('has-unread')\n\t\t\t\tappmenuElement.getElementsByTagName('image')[0].style.mask = 'url(#hole)'\n\t\t\t\tappsElement.getElementsByTagName('image')[0].style.mask = 'url(#hole)'\n\t\t\t}\n\t\t\tdocument.getElementById('appmenu').querySelector('[data-id=\"' + id + '\"] .unread-counter').textContent = counter\n\t\t\tdocument.getElementById('apps').querySelector('[data-id=\"' + id + '\"] .unread-counter').textContent = counter\n\t\t},\n\t})\n\t// init the more-apps menu\n\tOC.registerMenu($('#more-apps > a'), $('#navigation'))\n\n\t// toggle the navigation\n\tconst $toggle = $('#header .header-appname-container')\n\tconst $navigation = $('#navigation')\n\tconst $appmenu = $('#appmenu')\n\n\t// init the menu\n\tOC.registerMenu($toggle, $navigation)\n\t$toggle.data('oldhref', $toggle.attr('href'))\n\t$toggle.attr('href', '#')\n\t$navigation.hide()\n\n\t// show loading feedback on more apps list\n\t$navigation.delegate('a', 'click', event => {\n\t\tlet $app = $(event.target)\n\t\tif (!$app.is('a')) {\n\t\t\t$app = $app.closest('a')\n\t\t}\n\t\tif (event.which === 1 && !event.ctrlKey && !event.metaKey) {\n\t\t\t$app.find('svg').remove()\n\t\t\t$app.find('div').remove() // prevent odd double-clicks\n\t\t\t// no need for theming, loader is already inverted on dark mode\n\t\t\t// but we need it over the primary colour\n\t\t\t$app.prepend($('<div/>').addClass('icon-loading-small'))\n\t\t} else {\n\t\t\t// Close navigation when opening app in\n\t\t\t// a new tab\n\t\t\tOC.hideMenus(() => false)\n\t\t}\n\t})\n\n\t$navigation.delegate('a', 'mouseup', event => {\n\t\tif (event.which === 2) {\n\t\t\t// Close navigation when opening app in\n\t\t\t// a new tab via middle click\n\t\t\tOC.hideMenus(() => false)\n\t\t}\n\t})\n\n\t// show loading feedback on visible apps list\n\t$appmenu.delegate('li:not(#more-apps) > a', 'click', event => {\n\t\tlet $app = $(event.target)\n\t\tif (!$app.is('a')) {\n\t\t\t$app = $app.closest('a')\n\t\t}\n\n\t\tif (event.which === 1 && !event.ctrlKey && !event.metaKey && $app.parent('#more-apps').length === 0) {\n\t\t\t$app.find('svg').remove()\n\t\t\t$app.find('div').remove() // prevent odd double-clicks\n\t\t\t$app.prepend($('<div/>').addClass(\n\t\t\t\tOCA.Theming && OCA.Theming.inverted\n\t\t\t\t\t? 'icon-loading-small'\n\t\t\t\t\t: 'icon-loading-small-dark'\n\t\t\t))\n\t\t\t// trigger redirect\n\t\t\t// needed for ie, but also works for every browser\n\t\t\twindow.location = $app.attr('href')\n\t\t} else {\n\t\t\t// Close navigation when opening app in\n\t\t\t// a new tab\n\t\t\tOC.hideMenus(() => false)\n\t\t}\n\t})\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\nimport OC from '../OC'\n\n/**\n * @todo move to contacts menu code https://github.com/orgs/nextcloud/projects/31#card-21213129\n */\nexport const setUp = () => {\n\t// eslint-disable-next-line no-new\n\tnew OC.ContactsMenu({\n\t\tel: $('#contactsmenu .menu'),\n\t\ttrigger: $('#contactsmenu .menutoggle'),\n\t})\n}\n","/**\n * @copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\n/*\n * Detects links:\n * Either the http(s) protocol is given or two strings, basically limited to ascii with the last\n * word being at least one digit long,\n * followed by at least another character\n *\n * The downside: anything not ascii is excluded. Not sure how common it is in areas using different\n * alphabets… the upside: fake domains with similar looking characters won't be formatted as links\n */\nconst urlRegex = /(\\s|^)(https?:\\/\\/)?((?:[-A-Z0-9+_]+\\.)+[-A-Z]+(?:\\/[-A-Z0-9+&@#%?=~_|!:,.;()]*)*)(\\s|$)/ig\n\n/**\n * @param {any} content -\n */\nexport function plainToRich(content) {\n\treturn this.formatLinksRich(content)\n}\n\n/**\n * @param {any} content -\n */\nexport function richToPlain(content) {\n\treturn this.formatLinksPlain(content)\n}\n\n/**\n * @param {any} content -\n */\nexport function formatLinksRich(content) {\n\treturn content.replace(urlRegex, function(_, leadingSpace, protocol, url, trailingSpace) {\n\t\tlet linkText = url\n\t\tif (!protocol) {\n\t\t\tprotocol = 'https://'\n\t\t} else if (protocol === 'http://') {\n\t\t\tlinkText = protocol + url\n\t\t}\n\n\t\treturn leadingSpace + '<a class=\"external\" target=\"_blank\" rel=\"noopener noreferrer\" href=\"' + protocol + url + '\">' + linkText + '</a>' + trailingSpace\n\t})\n}\n\n/**\n * @param {any} content -\n */\nexport function formatLinksPlain(content) {\n\tconst $content = $('<div></div>').html(content)\n\t$content.find('a').each(function() {\n\t\tconst $this = $(this)\n\t\t$this.html($this.attr('href'))\n\t})\n\treturn $content.html()\n}\n","/**\n * @copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\nimport _ from 'underscore'\nimport $ from 'jquery'\nimport { generateOcsUrl } from '@nextcloud/router'\n\n/**\n * @param {any} options -\n */\nexport function query(options) {\n\toptions = options || {}\n\tconst dismissOptions = options.dismiss || {}\n\t$.ajax({\n\t\ttype: 'GET',\n\t\turl: options.url || generateOcsUrl('core/whatsnew?format=json'),\n\t\tsuccess: options.success || function(data, statusText, xhr) {\n\t\t\tonQuerySuccess(data, statusText, xhr, dismissOptions)\n\t\t},\n\t\terror: options.error || onQueryError,\n\t})\n}\n\n/**\n * @param {any} version -\n * @param {any} options -\n */\nexport function dismiss(version, options) {\n\toptions = options || {}\n\t$.ajax({\n\t\ttype: 'POST',\n\t\turl: options.url || generateOcsUrl('core/whatsnew'),\n\t\tdata: { version: encodeURIComponent(version) },\n\t\tsuccess: options.success || onDismissSuccess,\n\t\terror: options.error || onDismissError,\n\t})\n\t// remove element immediately\n\t$('.whatsNewPopover').remove()\n}\n\n/**\n * @param {any} data -\n * @param {any} statusText -\n * @param {any} xhr -\n * @param {any} dismissOptions -\n */\nfunction onQuerySuccess(data, statusText, xhr, dismissOptions) {\n\tconsole.debug('querying Whats New data was successful: ' + statusText)\n\tconsole.debug(data)\n\n\tif (xhr.status !== 200) {\n\t\treturn\n\t}\n\n\tlet item, menuItem, text, icon\n\n\tconst div = document.createElement('div')\n\tdiv.classList.add('popovermenu', 'open', 'whatsNewPopover', 'menu-left')\n\n\tconst list = document.createElement('ul')\n\n\t// header\n\titem = document.createElement('li')\n\tmenuItem = document.createElement('span')\n\tmenuItem.className = 'menuitem'\n\n\ttext = document.createElement('span')\n\ttext.innerText = t('core', 'New in') + ' ' + data.ocs.data.product\n\ttext.className = 'caption'\n\tmenuItem.appendChild(text)\n\n\ticon = document.createElement('span')\n\ticon.className = 'icon-close'\n\ticon.onclick = function() {\n\t\tdismiss(data.ocs.data.version, dismissOptions)\n\t}\n\tmenuItem.appendChild(icon)\n\n\titem.appendChild(menuItem)\n\tlist.appendChild(item)\n\n\t// Highlights\n\tfor (const i in data.ocs.data.whatsNew.regular) {\n\t\tconst whatsNewTextItem = data.ocs.data.whatsNew.regular[i]\n\t\titem = document.createElement('li')\n\n\t\tmenuItem = document.createElement('span')\n\t\tmenuItem.className = 'menuitem'\n\n\t\ticon = document.createElement('span')\n\t\ticon.className = 'icon-checkmark'\n\t\tmenuItem.appendChild(icon)\n\n\t\ttext = document.createElement('p')\n\t\ttext.innerHTML = _.escape(whatsNewTextItem)\n\t\tmenuItem.appendChild(text)\n\n\t\titem.appendChild(menuItem)\n\t\tlist.appendChild(item)\n\t}\n\n\t// Changelog URL\n\tif (!_.isUndefined(data.ocs.data.changelogURL)) {\n\t\titem = document.createElement('li')\n\n\t\tmenuItem = document.createElement('a')\n\t\tmenuItem.href = data.ocs.data.changelogURL\n\t\tmenuItem.rel = 'noreferrer noopener'\n\t\tmenuItem.target = '_blank'\n\n\t\ticon = document.createElement('span')\n\t\ticon.className = 'icon-link'\n\t\tmenuItem.appendChild(icon)\n\n\t\ttext = document.createElement('span')\n\t\ttext.innerText = t('core', 'View changelog')\n\t\tmenuItem.appendChild(text)\n\n\t\titem.appendChild(menuItem)\n\t\tlist.appendChild(item)\n\t}\n\n\tdiv.appendChild(list)\n\tdocument.body.appendChild(div)\n}\n\n/**\n * @param {any} x -\n * @param {any} t -\n * @param {any} e -\n */\nfunction onQueryError(x, t, e) {\n\tconsole.debug('querying Whats New Data resulted in an error: ' + t + e)\n\tconsole.debug(x)\n}\n\n/**\n * @param {any} data -\n */\nfunction onDismissSuccess(data) {\n\t// noop\n}\n\n/**\n * @param {any} data -\n */\nfunction onDismissError(data) {\n\tconsole.debug('dismissing Whats New data resulted in an error: ' + data)\n}\n","/**\n * @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\nimport escapeHTML from 'escape-html'\n\n/**\n * @typedef TypeDefinition\n * @function {Function} action This action is executed to let the user select a resource\n * @param {string} icon Contains the icon css class for the type\n * @function Object() { [native code] }\n */\n\n/**\n * @type {TypeDefinition[]}\n */\nconst types = {}\n\n/**\n * Those translations will be used by the vue component but they should be shipped with the server\n * FIXME: Those translations should be added to the library\n *\n * @return {Array}\n */\nexport const l10nProjects = () => {\n\treturn [\n\t\tt('core', 'Add to a project'),\n\t\tt('core', 'Show details'),\n\t\tt('core', 'Hide details'),\n\t\tt('core', 'Rename project'),\n\t\tt('core', 'Failed to rename the project'),\n\t\tt('core', 'Failed to create a project'),\n\t\tt('core', 'Failed to add the item to the project'),\n\t\tt('core', 'Connect items to a project to make them easier to find'),\n\t\tt('core', 'Type to search for existing projects'),\n\t]\n}\n\nexport default {\n\t/**\n\t *\n\t * @param {string} type type\n\t * @param {TypeDefinition} typeDefinition typeDefinition\n\t */\n\tregisterType(type, typeDefinition) {\n\t\ttypes[type] = typeDefinition\n\t},\n\ttrigger(type) {\n\t\treturn types[type].action()\n\t},\n\tgetTypes() {\n\t\treturn Object.keys(types)\n\t},\n\tgetIcon(type) {\n\t\treturn types[type].typeIconClass || ''\n\t},\n\tgetLabel(type) {\n\t\treturn escapeHTML(types[type].typeString || type)\n\t},\n\tgetLink(type, id) {\n\t\t/* TODO: Allow action to be executed instead of href as well */\n\t\treturn typeof types[type] !== 'undefined' ? types[type].link(id) : ''\n\t},\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\n/* eslint-disable @nextcloud/no-deprecations */\nimport { initCore } from './init'\n\nimport _ from 'underscore'\nimport $ from 'jquery'\nimport 'jquery-migrate/dist/jquery-migrate.min'\n// TODO: switch to `jquery-ui` package and import widgets and effects individually\n// `jquery-ui-dist` is used as a workaround for the issue of missing effects\nimport 'jquery-ui-dist/jquery-ui'\nimport 'jquery-ui-dist/jquery-ui.css'\nimport 'jquery-ui-dist/jquery-ui.theme.css'\n// END TODO\nimport autosize from 'autosize'\nimport Backbone from 'backbone'\nimport 'bootstrap/js/dist/tooltip'\nimport './Polyfill/tooltip'\nimport ClipboardJS from 'clipboard'\nimport { dav } from 'davclient.js'\nimport Handlebars from 'handlebars'\nimport '@nextcloud/jcrop/js/jquery.Jcrop'\nimport '@nextcloud/jcrop/css/jquery.Jcrop.css'\nimport md5 from 'blueimp-md5'\nimport moment from 'moment'\nimport 'select2'\nimport 'select2/select2.css'\nimport 'snap.js/dist/snap'\nimport 'strengthify'\nimport 'strengthify/strengthify.css'\n\nimport OC from './OC/index'\nimport OCP from './OCP/index'\nimport OCA from './OCA/index'\nimport { getToken as getRequestToken } from './OC/requesttoken'\n\nconst warnIfNotTesting = function() {\n\tif (window.TESTING === undefined) {\n\t\tconsole.warn.apply(console, arguments)\n\t}\n}\n\n/**\n * Mark a function as deprecated and automatically\n * warn if used!\n *\n * @param {Function} func the library to deprecate\n * @param {string} funcName the name of the library\n * @param {number} version the version this gets removed\n * @return {Function}\n */\nconst deprecate = (func, funcName, version) => {\n\tconst oldFunc = func\n\tconst newFunc = function() {\n\t\twarnIfNotTesting(`The ${funcName} library is deprecated! It will be removed in nextcloud ${version}.`)\n\t\treturn oldFunc.apply(this, arguments)\n\t}\n\tObject.assign(newFunc, oldFunc)\n\treturn newFunc\n}\n\nconst setDeprecatedProp = (global, cb, msg) => {\n\t(Array.isArray(global) ? global : [global]).forEach(global => {\n\t\tif (window[global] !== undefined) {\n\t\t\tdelete window[global]\n\t\t}\n\t\tObject.defineProperty(window, global, {\n\t\t\tget: () => {\n\t\t\t\tif (msg) {\n\t\t\t\t\twarnIfNotTesting(`${global} is deprecated: ${msg}`)\n\t\t\t\t} else {\n\t\t\t\t\twarnIfNotTesting(`${global} is deprecated`)\n\t\t\t\t}\n\n\t\t\t\treturn cb()\n\t\t\t},\n\t\t})\n\t})\n}\n\nwindow._ = _\nsetDeprecatedProp(['$', 'jQuery'], () => $, 'The global jQuery is deprecated. It will be removed in a later versions without another warning. Please ship your own.')\nsetDeprecatedProp('autosize', () => autosize, 'please ship your own, this will be removed in Nextcloud 20')\nsetDeprecatedProp('Backbone', () => Backbone, 'please ship your own, this will be removed in Nextcloud 20')\nsetDeprecatedProp(['Clipboard', 'ClipboardJS'], () => ClipboardJS, 'please ship your own, this will be removed in Nextcloud 20')\nwindow.dav = dav\nsetDeprecatedProp('Handlebars', () => Handlebars, 'please ship your own, this will be removed in Nextcloud 20')\nsetDeprecatedProp('md5', () => md5, 'please ship your own, this will be removed in Nextcloud 20')\nsetDeprecatedProp('moment', () => moment, 'please ship your own, this will be removed in Nextcloud 20')\n\nwindow.OC = OC\nsetDeprecatedProp('initCore', () => initCore, 'this is an internal function')\nsetDeprecatedProp('oc_appswebroots', () => OC.appswebroots, 'use OC.appswebroots instead, this will be removed in Nextcloud 20')\nsetDeprecatedProp('oc_config', () => OC.config, 'use OC.config instead, this will be removed in Nextcloud 20')\nsetDeprecatedProp('oc_current_user', () => OC.getCurrentUser().uid, 'use OC.getCurrentUser().uid instead, this will be removed in Nextcloud 20')\nsetDeprecatedProp('oc_debug', () => OC.debug, 'use OC.debug instead, this will be removed in Nextcloud 20')\nsetDeprecatedProp('oc_defaults', () => OC.theme, 'use OC.theme instead, this will be removed in Nextcloud 20')\nsetDeprecatedProp('oc_isadmin', OC.isUserAdmin, 'use OC.isUserAdmin() instead, this will be removed in Nextcloud 20')\nsetDeprecatedProp('oc_requesttoken', () => getRequestToken(), 'use OC.requestToken instead, this will be removed in Nextcloud 20')\nsetDeprecatedProp('oc_webroot', () => OC.webroot, 'use OC.getRootPath() instead, this will be removed in Nextcloud 20')\nsetDeprecatedProp('OCDialogs', () => OC.dialogs, 'use OC.dialogs instead, this will be removed in Nextcloud 20')\nwindow.OCP = OCP\nwindow.OCA = OCA\n$.fn.select2 = deprecate($.fn.select2, 'select2', 19)\n\n/**\n * translate a string\n *\n * @param {string} app the id of the app for which to translate the string\n * @param {string} text the string to translate\n * @param [vars] map of placeholder key to value\n * @param {number} [count] number to replace %n with\n * @return {string}\n */\nwindow.t = _.bind(OC.L10N.translate, OC.L10N)\n\n/**\n * translate a string\n *\n * @param {string} app the id of the app for which to translate the string\n * @param {string} text_singular the string to translate for exactly one object\n * @param {string} text_plural the string to translate for n objects\n * @param {number} count number to determine whether to use singular or plural\n * @param [vars] map of placeholder key to value\n * @return {string} Translated string\n */\nwindow.n = _.bind(OC.L10N.translatePlural, OC.L10N)\n","/**\n * @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\nconst loadedScripts = {}\nconst loadedStylesheets = {}\n/**\n * @namespace OCP\n * @class Loader\n */\nexport default {\n\n\t/**\n\t * Load a script asynchronously\n\t *\n\t * @param {string} app the app name\n\t * @param {string} file the script file name\n\t * @return {Promise}\n\t */\n\tloadScript(app, file) {\n\t\tconst key = app + file\n\t\tif (Object.prototype.hasOwnProperty.call(loadedScripts, key)) {\n\t\t\treturn Promise.resolve()\n\t\t}\n\t\tloadedScripts[key] = true\n\t\treturn new Promise(function(resolve, reject) {\n\t\t\tconst scriptPath = OC.filePath(app, 'js', file)\n\t\t\tconst script = document.createElement('script')\n\t\t\tscript.src = scriptPath\n\t\t\tscript.setAttribute('nonce', btoa(OC.requestToken))\n\t\t\tscript.onload = () => resolve()\n\t\t\tscript.onerror = () => reject(new Error(`Failed to load script from ${scriptPath}`))\n\t\t\tdocument.head.appendChild(script)\n\t\t})\n\t},\n\n\t/**\n\t * Load a stylesheet file asynchronously\n\t *\n\t * @param {string} app the app name\n\t * @param {string} file the script file name\n\t * @return {Promise}\n\t */\n\tloadStylesheet(app, file) {\n\t\tconst key = app + file\n\t\tif (Object.prototype.hasOwnProperty.call(loadedStylesheets, key)) {\n\t\t\treturn Promise.resolve()\n\t\t}\n\t\tloadedStylesheets[key] = true\n\t\treturn new Promise(function(resolve, reject) {\n\t\t\tconst stylePath = OC.filePath(app, 'css', file)\n\t\t\tconst link = document.createElement('link')\n\t\t\tlink.href = stylePath\n\t\t\tlink.type = 'text/css'\n\t\t\tlink.rel = 'stylesheet'\n\t\t\tlink.onload = () => resolve()\n\t\t\tlink.onerror = () => reject(new Error(`Failed to load stylesheet from ${stylePath}`))\n\t\t\tdocument.head.appendChild(link)\n\t\t})\n\t},\n}\n","/**\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\nimport {\n\tshowError,\n\tshowInfo, showMessage,\n\tshowSuccess,\n\tshowWarning,\n} from '@nextcloud/dialogs'\n\nexport default {\n\t/**\n\t * @deprecated 19.0.0 use `showSuccess` from the `@nextcloud/dialogs` package instead\n\t *\n\t * @param {string} text the toast text\n\t * @param {object} options options\n\t * @return {Toast}\n\t */\n\tsuccess(text, options) {\n\t\treturn showSuccess(text, options)\n\t},\n\t/**\n\t * @deprecated 19.0.0 use `showWarning` from the `@nextcloud/dialogs` package instead\n\t *\n\t * @param {string} text the toast text\n\t * @param {object} options options\n\t * @return {Toast}\n\t */\n\twarning(text, options) {\n\t\treturn showWarning(text, options)\n\t},\n\t/**\n\t * @deprecated 19.0.0 use `showError` from the `@nextcloud/dialogs` package instead\n\t *\n\t * @param {string} text the toast text\n\t * @param {object} options options\n\t * @return {Toast}\n\t */\n\terror(text, options) {\n\t\treturn showError(text, options)\n\t},\n\t/**\n\t * @deprecated 19.0.0 use `showInfo` from the `@nextcloud/dialogs` package instead\n\t *\n\t * @param {string} text the toast text\n\t * @param {object} options options\n\t * @return {Toast}\n\t */\n\tinfo(text, options) {\n\t\treturn showInfo(text, options)\n\t},\n\t/**\n\t * @deprecated 19.0.0 use `showMessage` from the `@nextcloud/dialogs` package instead\n\t *\n\t * @param {string} text the toast text\n\t * @param {object} options options\n\t * @return {Toast}\n\t */\n\tmessage(text, options) {\n\t\treturn showMessage(text, options)\n\t},\n\n}\n","/**\n * @copyright Copyright (c) 2016 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { loadState } from '@nextcloud/initial-state'\n\nimport * as AppConfig from './appconfig'\nimport * as Comments from './comments'\nimport * as WhatsNew from './whatsnew'\n\nimport Collaboration from './collaboration'\nimport Loader from './loader'\nimport Toast from './toast'\n\n/** @namespace OCP */\nexport default {\n\tAppConfig,\n\tCollaboration,\n\tComments,\n\tInitialState: {\n\t\t/**\n\t\t * @deprecated 18.0.0 add https://www.npmjs.com/package/@nextcloud/initial-state to your app\n\t\t */\n\t\tloadState,\n\t},\n\tLoader,\n\t/**\n\t * @deprecated 19.0.0 use the `@nextcloud/dialogs` package instead\n\t */\n\tToast,\n\tWhatsNew,\n}\n","/**\n * @copyright 2018 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\nimport OC from '../OC'\n\n/**\n * This plugin inserts the right avatar for the user, depending on, whether a\n * custom avatar is uploaded - which it uses then - or not, and display a\n * placeholder with the first letter of the users name instead.\n * For this it queries the core_avatar_get route, thus this plugin is fit very\n * tightly for owncloud, and it may not work anywhere else.\n *\n * You may use this on any <div></div>\n * Here I'm using <div class=\"avatardiv\"></div> as an example.\n *\n * There are 5 ways to call this:\n *\n * 1. $('.avatardiv').avatar('jdoe', 128);\n * This will make the div to jdoe's fitting avatar, with a size of 128px.\n *\n * 2. $('.avatardiv').avatar('jdoe');\n * This will make the div to jdoe's fitting avatar. If the div already has a\n * height, it will be used for the avatars size. Otherwise this plugin will\n * search for 'size' DOM data, to use for avatar size. If neither are available\n * it will default to 64px.\n *\n * 3. $('.avatardiv').avatar();\n * This will search the DOM for 'user' data, to use as the username. If there\n * is no username available it will default to a placeholder with the value of\n * \"?\". The size will be determined the same way, as the second example.\n *\n * 4. $('.avatardiv').avatar('jdoe', 128, true);\n * This will behave like the first example, except it will also append random\n * hashes to the custom avatar images, to force image reloading in IE8.\n *\n * 5. $('.avatardiv').avatar('jdoe', 128, undefined, true);\n * This will behave like the first example, but it will hide the avatardiv, if\n * it will display the default placeholder. undefined is the ie8fix from\n * example 4 and can be either true, or false/undefined, to be ignored.\n *\n * 6. $('.avatardiv').avatar('jdoe', 128, undefined, true, callback);\n * This will behave like the above example, but it will call the function\n * defined in callback after the avatar is placed into the DOM.\n *\n */\n\n$.fn.avatar = function(user, size, ie8fix, hidedefault, callback, displayname) {\n\tconst setAvatarForUnknownUser = function(target) {\n\t\ttarget.imageplaceholder('?')\n\t\ttarget.css('background-color', '#b9b9b9')\n\t}\n\n\tif (typeof (user) !== 'undefined') {\n\t\tuser = String(user)\n\t}\n\tif (typeof (displayname) !== 'undefined') {\n\t\tdisplayname = String(displayname)\n\t}\n\n\tif (typeof (size) === 'undefined') {\n\t\tif (this.height() > 0) {\n\t\t\tsize = this.height()\n\t\t} else if (this.data('size') > 0) {\n\t\t\tsize = this.data('size')\n\t\t} else {\n\t\t\tsize = 64\n\t\t}\n\t}\n\n\tthis.height(size)\n\tthis.width(size)\n\n\tif (typeof (user) === 'undefined') {\n\t\tif (typeof (this.data('user')) !== 'undefined') {\n\t\t\tuser = this.data('user')\n\t\t} else {\n\t\t\tsetAvatarForUnknownUser(this)\n\t\t\treturn\n\t\t}\n\t}\n\n\t// sanitize\n\tuser = String(user).replace(/\\//g, '')\n\n\tconst $div = this\n\tlet url\n\n\t// If this is our own avatar we have to use the version attribute\n\tif (user === OC.getCurrentUser().uid) {\n\t\turl = OC.generateUrl(\n\t\t\t'/avatar/{user}/{size}?v={version}',\n\t\t\t{\n\t\t\t\tuser,\n\t\t\t\tsize: Math.ceil(size * window.devicePixelRatio),\n\t\t\t\tversion: oc_userconfig.avatar.version,\n\t\t\t})\n\t} else {\n\t\turl = OC.generateUrl(\n\t\t\t'/avatar/{user}/{size}',\n\t\t\t{\n\t\t\t\tuser,\n\t\t\t\tsize: Math.ceil(size * window.devicePixelRatio),\n\t\t\t})\n\t}\n\n\tconst img = new Image()\n\n\t// If the new image loads successfully set it.\n\timg.onload = function() {\n\t\t$div.clearimageplaceholder()\n\t\t$div.append(img)\n\n\t\tif (typeof callback === 'function') {\n\t\t\tcallback()\n\t\t}\n\t}\n\t// Fallback when avatar loading fails:\n\t// Use old placeholder when a displayname attribute is defined,\n\t// otherwise show the unknown user placeholder.\n\timg.onerror = function() {\n\t\t$div.clearimageplaceholder()\n\t\tif (typeof (displayname) !== 'undefined') {\n\t\t\t$div.imageplaceholder(user, displayname)\n\t\t} else {\n\t\t\tsetAvatarForUnknownUser($div)\n\t\t}\n\n\t\tif (typeof callback === 'function') {\n\t\t\tcallback()\n\t\t}\n\t}\n\n\tif (size < 32) {\n\t\t$div.addClass('icon-loading-small')\n\t} else {\n\t\t$div.addClass('icon-loading')\n\t}\n\timg.width = size\n\timg.height = size\n\timg.src = url\n\timg.alt = ''\n}\n","/**\n * @copyright 2018 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\nimport OC from '../OC'\n\nconst LIST = ''\n\t+ '<div class=\"menu popovermenu menu-left hidden contactsmenu-popover\">'\n\t+ ' <ul>'\n\t+ ' <li>'\n\t+ ' <a>'\n\t+ ' <span class=\"icon-loading-small\"></span>'\n\t+ ' </a>'\n\t+ ' </li>'\n\t+ ' </ul>'\n\t+ '</div>'\n\nconst entryTemplate = require('./contactsmenu/jquery_entry.handlebars')\n\n$.fn.contactsMenu = function(shareWith, shareType, appendTo) {\n\t// 0 - user, 4 - email, 6 - remote\n\tconst allowedTypes = [0, 4, 6]\n\tif (allowedTypes.indexOf(shareType) === -1) {\n\t\treturn\n\t}\n\n\tconst $div = this\n\tappendTo.append(LIST)\n\tconst $list = appendTo.find('div.contactsmenu-popover')\n\n\t$div.click(function() {\n\t\tif (!$list.hasClass('hidden')) {\n\t\t\t$list.addClass('hidden')\n\t\t\t$list.hide()\n\t\t\treturn\n\t\t}\n\n\t\t$list.removeClass('hidden')\n\t\t$list.show()\n\n\t\tif ($list.hasClass('loaded')) {\n\t\t\treturn\n\t\t}\n\n\t\t$list.addClass('loaded')\n\t\t$.ajax(OC.generateUrl('/contactsmenu/findOne'), {\n\t\t\tmethod: 'POST',\n\t\t\tdata: {\n\t\t\t\tshareType,\n\t\t\t\tshareWith,\n\t\t\t},\n\t\t}).then(function(data) {\n\t\t\t$list.find('ul').find('li').addClass('hidden')\n\n\t\t\tlet actions\n\t\t\tif (!data.topAction) {\n\t\t\t\tactions = [{\n\t\t\t\t\thyperlink: '#',\n\t\t\t\t\ttitle: t('core', 'No action available'),\n\t\t\t\t}]\n\t\t\t} else {\n\t\t\t\tactions = [data.topAction].concat(data.actions)\n\t\t\t}\n\n\t\t\tactions.forEach(function(action) {\n\t\t\t\t$list.find('ul').append(entryTemplate(action))\n\t\t\t})\n\n\t\t\t$div.trigger('load')\n\t\t}, function(jqXHR) {\n\t\t\t$list.find('ul').find('li').addClass('hidden')\n\n\t\t\tlet title\n\t\t\tif (jqXHR.status === 404) {\n\t\t\t\ttitle = t('core', 'No action available')\n\t\t\t} else {\n\t\t\t\ttitle = t('core', 'Error fetching contact actions')\n\t\t\t}\n\n\t\t\t$list.find('ul').append(entryTemplate({\n\t\t\t\thyperlink: '#',\n\t\t\t\ttitle,\n\t\t\t}))\n\n\t\t\t$div.trigger('loaderror', jqXHR)\n\t\t})\n\t})\n\n\t$(document).click(function(event) {\n\t\tconst clickedList = ($list.has(event.target).length > 0)\n\t\tlet clickedTarget = ($div.has(event.target).length > 0)\n\n\t\t$div.each(function() {\n\t\t\tif ($(this).is(event.target)) {\n\t\t\t\tclickedTarget = true\n\t\t\t}\n\t\t})\n\n\t\tif (clickedList || clickedTarget) {\n\t\t\treturn\n\t\t}\n\n\t\t$list.addClass('hidden')\n\t\t$list.hide()\n\t})\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\n/**\n * check if an element exists.\n * allows you to write if ($('#myid').exists()) to increase readability\n *\n * @see {@link http://stackoverflow.com/questions/31044/is-there-an-exists-function-for-jquery}\n * @return {boolean}\n */\n$.fn.exists = function() {\n\treturn this.length > 0\n}\n","/**\n * @copyright 2018 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\n/**\n * Filter jQuery selector by attribute value\n *\n * @param {string} attrName attribute name\n * @param {string} attrValue attribute value\n * @return {void}\n */\n$.fn.filterAttr = function(attrName, attrValue) {\n\treturn this.filter(function() {\n\t\treturn $(this).attr(attrName) === attrValue\n\t})\n}\n","/**\n * @copyright 2018 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Gary Kim <gary@garykim.dev>\n * @author Joas Schilling <coding@schilljs.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\n$.widget('oc.ocdialog', {\n\toptions: {\n\t\twidth: 'auto',\n\t\theight: 'auto',\n\t\tcloseButton: true,\n\t\tcloseOnEscape: true,\n\t\tcloseCallback: null,\n\t\tmodal: false,\n\t},\n\t_create() {\n\t\tconst self = this\n\n\t\tthis.originalCss = {\n\t\t\tdisplay: this.element[0].style.display,\n\t\t\twidth: this.element[0].style.width,\n\t\t\theight: this.element[0].style.height,\n\t\t}\n\n\t\tthis.originalTitle = this.element.attr('title')\n\t\tthis.options.title = this.options.title || this.originalTitle\n\n\t\tthis.$dialog = $('<div class=\"oc-dialog\" />')\n\t\t\t.attr({\n\t\t\t\t// Setting tabIndex makes the div focusable\n\t\t\t\ttabIndex: -1,\n\t\t\t\trole: 'dialog',\n\t\t\t})\n\t\t\t.insertBefore(this.element)\n\t\tthis.$dialog.append(this.element.detach())\n\t\tthis.element.removeAttr('title').addClass('oc-dialog-content').appendTo(this.$dialog)\n\n\t\tthis.$dialog.css({\n\t\t\tdisplay: 'inline-block',\n\t\t\tposition: 'fixed',\n\t\t})\n\n\t\tthis.enterCallback = null\n\n\t\t$(document).on('keydown keyup', function(event) {\n\t\t\tif (\n\t\t\t\tevent.target !== self.$dialog.get(0)\n\t\t\t\t&& self.$dialog.find($(event.target)).length === 0\n\t\t\t) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// Escape\n\t\t\tif (\n\t\t\t\tevent.keyCode === 27\n\t\t\t\t&& event.type === 'keydown'\n\t\t\t\t&& self.options.closeOnEscape\n\t\t\t) {\n\t\t\t\tevent.stopImmediatePropagation()\n\t\t\t\tself.close()\n\t\t\t\treturn false\n\t\t\t}\n\t\t\t// Enter\n\t\t\tif (event.keyCode === 13) {\n\t\t\t\tevent.stopImmediatePropagation()\n\t\t\t\tif (self.enterCallback !== null) {\n\t\t\t\t\tself.enterCallback()\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tif (event.type === 'keyup') {\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\t// If no button is selected we trigger the primary\n\t\t\t\tif (\n\t\t\t\t\tself.$buttonrow\n\t\t\t\t\t&& self.$buttonrow.find($(event.target)).length === 0\n\t\t\t\t) {\n\t\t\t\t\tconst $button = self.$buttonrow.find('button.primary')\n\t\t\t\t\tif ($button && !$button.prop('disabled')) {\n\t\t\t\t\t\t$button.trigger('click')\n\t\t\t\t\t}\n\t\t\t\t} else if (self.$buttonrow) {\n\t\t\t\t\t$(event.target).trigger('click')\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t}\n\t\t})\n\n\t\tthis._setOptions(this.options)\n\t\tthis._createOverlay()\n\t},\n\t_init() {\n\t\tthis.$dialog.focus()\n\t\tthis._trigger('open')\n\t},\n\t_setOption(key, value) {\n\t\tconst self = this\n\t\tswitch (key) {\n\t\tcase 'title':\n\t\t\tif (this.$title) {\n\t\t\t\tthis.$title.text(value)\n\t\t\t} else {\n\t\t\t\tconst $title = $('<h2 class=\"oc-dialog-title\">'\n\t\t\t\t\t\t+ value\n\t\t\t\t\t\t+ '</h2>')\n\t\t\t\tthis.$title = $title.prependTo(this.$dialog)\n\t\t\t}\n\t\t\tthis._setSizes()\n\t\t\tbreak\n\t\tcase 'buttons':\n\t\t\tif (this.$buttonrow) {\n\t\t\t\tthis.$buttonrow.empty()\n\t\t\t} else {\n\t\t\t\tconst $buttonrow = $('<div class=\"oc-dialog-buttonrow\" />')\n\t\t\t\tthis.$buttonrow = $buttonrow.appendTo(this.$dialog)\n\t\t\t}\n\t\t\tif (value.length === 1) {\n\t\t\t\tthis.$buttonrow.addClass('onebutton')\n\t\t\t} else if (value.length === 2) {\n\t\t\t\tthis.$buttonrow.addClass('twobuttons')\n\t\t\t} else if (value.length === 3) {\n\t\t\t\tthis.$buttonrow.addClass('threebuttons')\n\t\t\t}\n\t\t\t$.each(value, function(idx, val) {\n\t\t\t\tconst $button = $('<button>').text(val.text)\n\t\t\t\tif (val.classes) {\n\t\t\t\t\t$button.addClass(val.classes)\n\t\t\t\t}\n\t\t\t\tif (val.defaultButton) {\n\t\t\t\t\t$button.addClass('primary')\n\t\t\t\t\tself.$defaultButton = $button\n\t\t\t\t}\n\t\t\t\tself.$buttonrow.append($button)\n\t\t\t\t$button.click(function() {\n\t\t\t\t\tval.click.apply(self.element[0], arguments)\n\t\t\t\t})\n\t\t\t})\n\t\t\tthis.$buttonrow.find('button')\n\t\t\t\t.on('focus', function(event) {\n\t\t\t\t\tself.$buttonrow.find('button').removeClass('primary')\n\t\t\t\t\t$(this).addClass('primary')\n\t\t\t\t})\n\t\t\tthis._setSizes()\n\t\t\tbreak\n\t\tcase 'style':\n\t\t\tif (value.buttons !== undefined) {\n\t\t\t\tthis.$buttonrow.addClass(value.buttons)\n\t\t\t}\n\t\t\tbreak\n\t\tcase 'closeButton':\n\t\t\tif (value) {\n\t\t\t\tconst $closeButton = $('<a class=\"oc-dialog-close\"></a>')\n\t\t\t\tthis.$dialog.prepend($closeButton)\n\t\t\t\t$closeButton.on('click', function() {\n\t\t\t\t\tself.options.closeCallback && self.options.closeCallback()\n\t\t\t\t\tself.close()\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tthis.$dialog.find('.oc-dialog-close').remove()\n\t\t\t}\n\t\t\tbreak\n\t\tcase 'width':\n\t\t\tthis.$dialog.css('width', value)\n\t\t\tbreak\n\t\tcase 'height':\n\t\t\tthis.$dialog.css('height', value)\n\t\t\tbreak\n\t\tcase 'close':\n\t\t\tthis.closeCB = value\n\t\t\tbreak\n\t\t}\n\t\t// this._super(key, value);\n\t\t$.Widget.prototype._setOption.apply(this, arguments)\n\t},\n\t_setOptions(options) {\n\t\t// this._super(options);\n\t\t$.Widget.prototype._setOptions.apply(this, arguments)\n\t},\n\t_setSizes() {\n\t\tlet lessHeight = 0\n\t\tif (this.$title) {\n\t\t\tlessHeight += this.$title.outerHeight(true)\n\t\t}\n\t\tif (this.$buttonrow) {\n\t\t\tlessHeight += this.$buttonrow.outerHeight(true)\n\t\t}\n\t\tthis.element.css({\n\t\t\theight: 'calc(100% - ' + lessHeight + 'px)',\n\t\t})\n\t},\n\t_createOverlay() {\n\t\tif (!this.options.modal) {\n\t\t\treturn\n\t\t}\n\n\t\tconst self = this\n\t\tlet contentDiv = $('#content')\n\t\tif (contentDiv.length === 0) {\n\t\t\t// nextcloud-vue compatibility\n\t\t\tcontentDiv = $('.content')\n\t\t}\n\t\tthis.overlay = $('<div>')\n\t\t\t.addClass('oc-dialog-dim')\n\t\t\t.appendTo(contentDiv)\n\t\tthis.overlay.on('click keydown keyup', function(event) {\n\t\t\tif (event.target !== self.$dialog.get(0) && self.$dialog.find($(event.target)).length === 0) {\n\t\t\t\tevent.preventDefault()\n\t\t\t\tevent.stopPropagation()\n\n\t\t\t}\n\t\t})\n\t},\n\t_destroyOverlay() {\n\t\tif (!this.options.modal) {\n\t\t\treturn\n\t\t}\n\n\t\tif (this.overlay) {\n\t\t\tthis.overlay.off('click keydown keyup')\n\t\t\tthis.overlay.remove()\n\t\t\tthis.overlay = null\n\t\t}\n\t},\n\twidget() {\n\t\treturn this.$dialog\n\t},\n\tsetEnterCallback(callback) {\n\t\tthis.enterCallback = callback\n\t},\n\tunsetEnterCallback() {\n\t\tthis.enterCallback = null\n\t},\n\tclose() {\n\t\tthis._destroyOverlay()\n\t\tconst self = this\n\t\t// Ugly hack to catch remaining keyup events.\n\t\tsetTimeout(function() {\n\t\t\tself._trigger('close', self)\n\t\t}, 200)\n\n\t\tself.$dialog.remove()\n\t\tthis.destroy()\n\t},\n\tdestroy() {\n\t\tif (this.$title) {\n\t\t\tthis.$title.remove()\n\t\t}\n\t\tif (this.$buttonrow) {\n\t\t\tthis.$buttonrow.remove()\n\t\t}\n\n\t\tif (this.originalTitle) {\n\t\t\tthis.element.attr('title', this.originalTitle)\n\t\t}\n\t\tthis.element.removeClass('oc-dialog-content')\n\t\t\t.css(this.originalCss).detach().insertBefore(this.$dialog)\n\t\tthis.$dialog.remove()\n\t},\n})\n","/**\n * @copyright Copyright (c) 2016 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\nimport escapeHTML from 'escape-html'\n\n/**\n * jQuery plugin for micro templates\n *\n * Strings are automatically escaped, but that can be disabled by setting\n * escapeFunction to null.\n *\n * Usage examples:\n *\n * var htmlStr = '<p>Bake, uncovered, until the {greasystuff} is melted and the {pasta} is heated through, about {min} minutes.</p>'\n * $(htmlStr).octemplate({greasystuff: 'cheese', pasta: 'macaroni', min: 10});\n *\n * var htmlStr = '<p>Welcome back {user}</p>';\n * $(htmlStr).octemplate({user: 'John Q. Public'}, {escapeFunction: null});\n *\n * Be aware that the target string must be wrapped in an HTML element for the\n * plugin to work. The following won't work:\n *\n * var textStr = 'Welcome back {user}';\n * $(textStr).octemplate({user: 'John Q. Public'});\n *\n * For anything larger than one-liners, you can use a simple $.get() ajax\n * request to get the template, or you can embed them it the page using the\n * text/template type:\n *\n * <script id=\"contactListItemTemplate\" type=\"text/template\">\n * <tr class=\"contact\" data-id=\"{id}\">\n * <td class=\"name\">\n * <input type=\"checkbox\" name=\"id\" value=\"{id}\" /><span class=\"nametext\">{name}</span>\n * </td>\n * <td class=\"email\">\n * <a href=\"mailto:{email}\">{email}</a>\n * </td>\n * <td class=\"phone\">{phone}</td>\n * </tr>\n * </script>\n *\n * var $tmpl = $('#contactListItemTemplate');\n * var contacts = // fetched in some ajax call\n *\n * $.each(contacts, function(idx, contact) {\n * $contactList.append(\n * $tmpl.octemplate({\n * id: contact.getId(),\n * name: contact.getDisplayName(),\n * email: contact.getPreferredEmail(),\n * phone: contact.getPreferredPhone(),\n * });\n * );\n * });\n */\n/**\n * Object Template\n * Inspired by micro templating done by e.g. underscore.js\n */\nconst Template = {\n\tinit(vars, options, elem) {\n\t\t// Mix in the passed in options with the default options\n\t\tthis.vars = vars\n\t\tthis.options = $.extend({}, this.options, options)\n\n\t\tthis.elem = elem\n\t\tconst self = this\n\n\t\tif (typeof this.options.escapeFunction === 'function') {\n\t\t\tconst keys = Object.keys(this.vars)\n\t\t\tfor (let key = 0; key < keys.length; key++) {\n\t\t\t\tif (typeof this.vars[keys[key]] === 'string') {\n\t\t\t\t\tthis.vars[keys[key]] = self.options.escapeFunction(this.vars[keys[key]])\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst _html = this._build(this.vars)\n\t\treturn $(_html)\n\t},\n\t// From stackoverflow.com/questions/1408289/best-way-to-do-variable-interpolation-in-javascript\n\t_build(o) {\n\t\tconst data = this.elem.attr('type') === 'text/template' ? this.elem.html() : this.elem.get(0).outerHTML\n\t\ttry {\n\t\t\treturn data.replace(/{([^{}]*)}/g,\n\t\t\t\tfunction(a, b) {\n\t\t\t\t\tconst r = o[b]\n\t\t\t\t\treturn typeof r === 'string' || typeof r === 'number' ? r : a\n\t\t\t\t}\n\t\t\t)\n\t\t} catch (e) {\n\t\t\tconsole.error(e, 'data:', data)\n\t\t}\n\t},\n\toptions: {\n\t\tescapeFunction: escapeHTML,\n\t},\n}\n\n$.fn.octemplate = function(vars, options) {\n\tvars = vars || {}\n\tif (this.length) {\n\t\tconst _template = Object.create(Template)\n\t\treturn _template.init(vars, options, this)\n\t}\n}\n","/**\n * @copyright 2016-2018 John Molakvoæ <skjnldsv@protonmail.com>\n * @copyright 2013 Morris Jobke <morris.jobke@gmail.com>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Sergey Shliakhov <husband.sergey@gmail.com>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\n/* eslint-disable */\nimport $ from 'jquery'\nimport md5 from 'blueimp-md5'\n\n/*\n * Adds a background color to the element called on and adds the first character\n * of the passed in string. This string is also the seed for the generation of\n * the background color.\n *\n * You have following HTML:\n *\n * <div id=\"albumart\"></div>\n *\n * And call this from Javascript:\n *\n * $('#albumart').imageplaceholder('The Album Title');\n *\n * Which will result in:\n *\n * <div id=\"albumart\" style=\"background-color: rgb(121, 90, 171); ... \">T</div>\n *\n * You may also call it like this, to have a different background, than the seed:\n *\n * $('#albumart').imageplaceholder('The Album Title', 'Album Title');\n *\n * Resulting in:\n *\n * <div id=\"albumart\" style=\"background-color: rgb(121, 90, 171); ... \">A</div>\n *\n */\n\n/*\n* Alternatively, you can use the prototype function to convert your string to rgb colors:\n*\n* \"a6741a86aded5611a8e46ce16f2ad646\".toRgb()\n*\n* Will return the rgb parameters within the following object:\n*\n* Color {r: 208, g: 158, b: 109}\n*\n*/\n\nconst toRgb = (s) => {\n\t// Normalize hash\n\tvar hash = s.toLowerCase()\n\n\t// Already a md5 hash?\n\tif (hash.match(/^([0-9a-f]{4}-?){8}$/) === null) {\n\t\thash = md5(hash)\n\t}\n\n\thash = hash.replace(/[^0-9a-f]/g, '')\n\n\tfunction Color(r, g, b) {\n\t\tthis.r = r\n\t\tthis.g = g\n\t\tthis.b = b\n\t}\n\n\tfunction stepCalc(steps, ends) {\n\t\tvar step = new Array(3)\n\t\tstep[0] = (ends[1].r - ends[0].r) / steps\n\t\tstep[1] = (ends[1].g - ends[0].g) / steps\n\t\tstep[2] = (ends[1].b - ends[0].b) / steps\n\t\treturn step\n\t}\n\n\tfunction mixPalette(steps, color1, color2) {\n\t\tvar palette = []\n\t\tpalette.push(color1)\n\t\tvar step = stepCalc(steps, [color1, color2])\n\t\tfor (var i = 1; i < steps; i++) {\n\t\t\tvar r = parseInt(color1.r + (step[0] * i))\n\t\t\tvar g = parseInt(color1.g + (step[1] * i))\n\t\t\tvar b = parseInt(color1.b + (step[2] * i))\n\t\t\tpalette.push(new Color(r, g, b))\n\t\t}\n\t\treturn palette\n\t}\n\n\tconst red = new Color(182, 70, 157);\n\tconst yellow = new Color(221, 203, 85);\n\tconst blue = new Color(0, 130, 201); // Nextcloud blue\n\t// Number of steps to go from a color to another\n\t// 3 colors * 6 will result in 18 generated colors\n\tconst steps = 6;\n\n\tconst palette1 = mixPalette(steps, red, yellow);\n\tconst palette2 = mixPalette(steps, yellow, blue);\n\tconst palette3 = mixPalette(steps, blue, red);\n\n\tconst finalPalette = palette1.concat(palette2).concat(palette3);\n\n\t// Convert a string to an integer evenly\n\tfunction hashToInt(hash, maximum) {\n\t\tvar finalInt = 0\n\t\tvar result = []\n\n\t\t// Splitting evenly the string\n\t\tfor (var i = 0; i < hash.length; i++) {\n\t\t\t// chars in md5 goes up to f, hex:16\n\t\t\tresult.push(parseInt(hash.charAt(i), 16) % 16)\n\t\t}\n\t\t// Adds up all results\n\t\tfor (var j in result) {\n\t\t\tfinalInt += result[j]\n\t\t}\n\t\t// chars in md5 goes up to f, hex:16\n\t\t// make sure we're always using int in our operation\n\t\treturn parseInt(parseInt(finalInt) % maximum)\n\t}\n\n\treturn finalPalette[hashToInt(hash, steps * 3)]\n}\n\nString.prototype.toRgb = function() {\n\tconsole.warn('String.prototype.toRgb is deprecated! It will be removed in Nextcloud 22.')\n\n\treturn toRgb(this)\n}\n\n$.fn.imageplaceholder = function(seed, text, size) {\n\ttext = text || seed\n\n\t// Compute the hash\n\tvar rgb = toRgb(seed)\n\tthis.css('background-color', 'rgb(' + rgb.r + ', ' + rgb.g + ', ' + rgb.b + ')')\n\n\t// Placeholders are square\n\tvar height = this.height() || size || 32\n\tthis.height(height)\n\tthis.width(height)\n\n\t// CSS rules\n\tthis.css('color', '#fff')\n\tthis.css('font-weight', 'normal')\n\tthis.css('text-align', 'center')\n\n\t// calculate the height\n\tthis.css('line-height', height + 'px')\n\tthis.css('font-size', (height * 0.55) + 'px')\n\n\tif (seed !== null && seed.length) {\n\t\tvar placeholderText = text.replace(/\\s+/g, ' ').trim().split(' ', 2).map((word) => word[0].toUpperCase()).join('')\n\t\tthis.html(placeholderText);\n\t}\n}\n\n$.fn.clearimageplaceholder = function() {\n\tthis.css('background-color', '')\n\tthis.css('color', '')\n\tthis.css('font-weight', '')\n\tthis.css('text-align', '')\n\tthis.css('line-height', '')\n\tthis.css('font-size', '')\n\tthis.html('')\n\tthis.removeClass('icon-loading')\n\tthis.removeClass('icon-loading-small')\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\nimport { getToken } from '../OC/requesttoken'\n\n$(document).on('ajaxSend', function(elm, xhr, settings) {\n\tif (settings.crossDomain === false) {\n\t\txhr.setRequestHeader('requesttoken', getToken())\n\t\txhr.setRequestHeader('OCS-APIREQUEST', 'true')\n\t}\n})\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\n/**\n * select a range in an input field\n *\n * @see {@link http://stackoverflow.com/questions/499126/jquery-set-cursor-position-in-text-area}\n * @param {number} start start selection from\n * @param {number} end number of char from start\n * @return {void}\n */\n$.fn.selectRange = function(start, end) {\n\treturn this.each(function() {\n\t\tif (this.setSelectionRange) {\n\t\t\tthis.focus()\n\t\t\tthis.setSelectionRange(start, end)\n\t\t} else if (this.createTextRange) {\n\t\t\tconst range = this.createTextRange()\n\t\t\trange.collapse(true)\n\t\t\trange.moveEnd('character', end)\n\t\t\trange.moveStart('character', start)\n\t\t\trange.select()\n\t\t}\n\t})\n}\n","/**\n * @copyright 2018 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\n/**\n * @name Show Password\n * @description\n * @version 1.3.0\n * @requires Jquery 1.5\n *\n * @author Jan Jarfalk <jan.jarfalk@unwrongest.com>\n * author-website http://www.unwrongest.com\n *\n * special-thanks Michel Gratton\n *\n * @license MIT\n */\n$.fn.extend({\n\tshowPassword(c) {\n\n\t\t// Setup callback object\n\t\tconst callback = { fn: null, args: {} }\n\t\tcallback.fn = c\n\n\t\t// Clones passwords and turn the clones into text inputs\n\t\tconst cloneElement = function(element) {\n\n\t\t\tconst $element = $(element)\n\n\t\t\tconst $clone = $('<input />')\n\n\t\t\t// Name added for JQuery Validation compatibility\n\t\t\t// Element name is required to avoid script warning.\n\t\t\t$clone.attr({\n\t\t\t\ttype: 'text',\n\t\t\t\tclass: $element.attr('class'),\n\t\t\t\tstyle: $element.attr('style'),\n\t\t\t\tsize: $element.attr('size'),\n\t\t\t\tname: $element.attr('name') + '-clone',\n\t\t\t\ttabindex: $element.attr('tabindex'),\n\t\t\t\tautocomplete: 'off',\n\t\t\t})\n\n\t\t\tif ($element.attr('placeholder') !== undefined) {\n\t\t\t\t$clone.attr('placeholder', $element.attr('placeholder'))\n\t\t\t}\n\n\t\t\treturn $clone\n\n\t\t}\n\n\t\t// Transfers values between two elements\n\t\tconst update = function(a, b) {\n\t\t\tb.val(a.val())\n\t\t}\n\n\t\t// Shows a or b depending on checkbox\n\t\tconst setState = function(checkbox, a, b) {\n\n\t\t\tif (checkbox.is(':checked')) {\n\t\t\t\tupdate(a, b)\n\t\t\t\tb.show()\n\t\t\t\ta.hide()\n\t\t\t} else {\n\t\t\t\tupdate(b, a)\n\t\t\t\tb.hide()\n\t\t\t\ta.show()\n\t\t\t}\n\n\t\t}\n\n\t\treturn this.each(function() {\n\n\t\t\tconst $input = $(this)\n\t\t\tconst $checkbox = $($input.data('typetoggle'))\n\n\t\t\t// Create clone\n\t\t\tconst $clone = cloneElement($input)\n\t\t\t$clone.insertAfter($input)\n\n\t\t\t// Set callback arguments\n\t\t\tif (callback.fn) {\n\t\t\t\tcallback.args.input = $input\n\t\t\t\tcallback.args.checkbox = $checkbox\n\t\t\t\tcallback.args.clone = $clone\n\t\t\t}\n\n\t\t\t$checkbox.bind('click', function() {\n\t\t\t\tsetState($checkbox, $input, $clone)\n\t\t\t})\n\n\t\t\t$input.bind('keyup', function() {\n\t\t\t\tupdate($input, $clone)\n\t\t\t})\n\n\t\t\t$clone.bind('keyup', function() {\n\t\t\t\tupdate($clone, $input)\n\n\t\t\t\t// Added for JQuery Validation compatibility\n\t\t\t\t// This will trigger validation if it's ON for keyup event\n\t\t\t\t$input.trigger('keyup')\n\n\t\t\t})\n\n\t\t\t// Added for JQuery Validation compatibility\n\t\t\t// This will trigger validation if it's ON for blur event\n\t\t\t$clone.bind('blur', function() {\n\t\t\t\t$input.trigger('focusout')\n\t\t\t})\n\n\t\t\tsetState($checkbox, $input, $clone)\n\n\t\t\t// set type of password field clone (type=text) to password right on submit\n\t\t\t// to prevent browser save the value of this field\n\t\t\t$clone.closest('form').submit(function(e) {\n\t\t\t\t// .prop has to be used, because .attr throws\n\t\t\t\t// an error while changing a type of an input\n\t\t\t\t// element\n\t\t\t\t$clone.prop('type', 'password')\n\t\t\t})\n\n\t\t\tif (callback.fn) {\n\t\t\t\tcallback.fn(callback.args)\n\t\t\t}\n\n\t\t})\n\t},\n})\n","/**\n * @copyright Copyright (c) 2016 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\n// Set autocomplete width the same as the related input\n// See http://stackoverflow.com/a/11845718\n$.ui.autocomplete.prototype._resizeMenu = function() {\n\tconst ul = this.menu.element\n\tul.outerWidth(this.element.outerWidth())\n}\n","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./jquery-ui-fixes.scss\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./jquery.ocdialog.scss\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\nimport './avatar'\nimport './contactsmenu'\nimport './exists'\nimport './filterattr'\nimport './ocdialog'\nimport './octemplate'\nimport './placeholder'\nimport './requesttoken'\nimport './selectrange'\nimport './showpassword'\nimport './ui-fixes'\n\nimport './css/jquery-ui-fixes.scss'\nimport './css/jquery.ocdialog.scss'\n\n/**\n * Disable automatic evaluation of responses for $.ajax() functions (and its\n * higher-level alternatives like $.get() and $.post()).\n *\n * If a response to a $.ajax() request returns a content type of \"application/javascript\"\n * JQuery would previously execute the response body. This is a pretty unexpected\n * behaviour and can result in a bypass of our Content-Security-Policy as well as\n * multiple unexpected XSS vectors.\n */\n$.ajaxSetup({\n\tcontents: {\n\t\tscript: false,\n\t},\n})\n\n/**\n * Disable execution of eval in jQuery. We do require an allowed eval CSP\n * configuration at the moment for handlebars et al. But for jQuery there is\n * not much of a reason to execute JavaScript directly via eval.\n *\n * This thus mitigates some unexpected XSS vectors.\n */\n$.globalEval = function() {\n}\n","/**\n * @copyright 2018 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license GPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\nimport 'core-js/stable'\nimport 'regenerator-runtime/runtime'\nimport './Polyfill/index'\n\n// If you remove the line below, tests won't pass\n// eslint-disable-next-line no-unused-vars\nimport OC from './OC/index'\n\nimport './globals'\nimport './jquery/index'\nimport { initCore } from './init'\nimport { registerAppsSlideToggle } from './OC/apps'\n\nwindow.addEventListener('DOMContentLoaded', function() {\n\tinitCore()\n\tregisterAppsSlideToggle()\n\n\t// fallback to hashchange when no history support\n\tif (window.history.pushState) {\n\t\twindow.onpopstate = _.bind(OC.Util.History._onPopState, OC.Util.History)\n\t} else {\n\t\t$(window).on('hashchange', _.bind(OC.Util.History._onPopState, OC.Util.History))\n\t}\n})\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/getUrl.js\";\nimport ___CSS_LOADER_URL_IMPORT_0___ from \"./images/ui-icons_1d2d44_256x240.png\";\nimport ___CSS_LOADER_URL_IMPORT_1___ from \"./images/ui-icons_ffffff_256x240.png\";\nimport ___CSS_LOADER_URL_IMPORT_2___ from \"./images/ui-icons_ffd27a_256x240.png\";\nimport ___CSS_LOADER_URL_IMPORT_3___ from \"./images/ui-bg_diagonals-thick_20_666666_40x40.png\";\nimport ___CSS_LOADER_URL_IMPORT_4___ from \"./images/ui-bg_flat_10_000000_40x100.png\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\nvar ___CSS_LOADER_URL_REPLACEMENT_1___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_1___);\nvar ___CSS_LOADER_URL_REPLACEMENT_2___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_2___);\nvar ___CSS_LOADER_URL_REPLACEMENT_3___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_3___);\nvar ___CSS_LOADER_URL_REPLACEMENT_4___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_4___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".ui-widget-content{border:1px solid var(--color-border);background:var(--color-main-background) none;color:var(--color-main-text)}.ui-widget-content a{color:var(--color-main-text)}.ui-widget-header{border:none;color:var(--color-main-text);background-image:none}.ui-widget-header a{color:var(--color-main-text)}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid var(--color-border);background:var(--color-main-background) none;font-weight:bold;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #ddd;background:var(--color-main-background) none;font-weight:bold;color:var(--color-main-text)}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited{color:var(--color-main-text)}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid var(--color-primary);background:var(--color-main-background) none;font-weight:bold;color:var(--color-main-text)}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:var(--color-main-text)}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid var(--color-main-background);background:var(--color-main-background) none;color:var(--color-text-light);font-weight:600}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:var(--color-text-lighter)}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:var(--color-error);background:var(--color-error) none;color:#fff}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#fff}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#fff}.ui-state-default .ui-icon{background-image:url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \")}.ui-state-active .ui-icon{background-image:url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \")}.ui-state-highlight .ui-icon{background-image:url(\" + ___CSS_LOADER_URL_REPLACEMENT_1___ + \")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(\" + ___CSS_LOADER_URL_REPLACEMENT_2___ + \")}.ui-icon.ui-icon-none{display:none}.ui-widget-overlay{background:#666 url(\" + ___CSS_LOADER_URL_REPLACEMENT_3___ + \") 50% 50% repeat;opacity:.5}.ui-widget-shadow{margin:-5px 0 0 -5px;padding:5px;background:#000 url(\" + ___CSS_LOADER_URL_REPLACEMENT_4___ + \") 50% 50% repeat-x;opacity:.2;border-radius:5px}.ui-tabs{border:none}.ui-tabs .ui-tabs-nav.ui-corner-all{border-bottom-left-radius:0;border-bottom-right-radius:0}.ui-tabs .ui-tabs-nav{background:none;margin-bottom:15px}.ui-tabs .ui-tabs-nav .ui-state-default{border:none;border-bottom:1px solid transparent;font-weight:normal;margin:0 !important;padding:0 !important}.ui-tabs .ui-tabs-nav .ui-state-hover,.ui-tabs .ui-tabs-nav .ui-state-active{border:none;border-bottom:1px solid var(--color-main-text);color:var(--color-main-text)}.ui-tabs .ui-tabs-nav .ui-state-hover a,.ui-tabs .ui-tabs-nav .ui-state-hover a:link,.ui-tabs .ui-tabs-nav .ui-state-hover a:hover,.ui-tabs .ui-tabs-nav .ui-state-hover a:visited,.ui-tabs .ui-tabs-nav .ui-state-active a,.ui-tabs .ui-tabs-nav .ui-state-active a:link,.ui-tabs .ui-tabs-nav .ui-state-active a:hover,.ui-tabs .ui-tabs-nav .ui-state-active a:visited{color:var(--color-main-text)}.ui-tabs .ui-tabs-nav .ui-state-active{font-weight:bold}.ui-autocomplete.ui-menu{padding:0}.ui-autocomplete.ui-menu.item-count-1,.ui-autocomplete.ui-menu.item-count-2{overflow-y:hidden}.ui-autocomplete.ui-menu .ui-menu-item a{color:var(--color-text-lighter);display:block;padding:4px 4px 4px 14px}.ui-autocomplete.ui-menu .ui-menu-item a.ui-state-focus,.ui-autocomplete.ui-menu .ui-menu-item a.ui-state-active{box-shadow:inset 4px 0 var(--color-primary-element);color:var(--color-main-text)}.ui-autocomplete.ui-widget-content{background:var(--color-main-background);border-top:none}.ui-autocomplete.ui-corner-all{border-radius:0;border-bottom-left-radius:var(--border-radius);border-bottom-right-radius:var(--border-radius)}.ui-autocomplete .ui-state-hover,.ui-autocomplete .ui-widget-content .ui-state-hover,.ui-autocomplete .ui-widget-header .ui-state-hover,.ui-autocomplete .ui-state-focus,.ui-autocomplete .ui-widget-content .ui-state-focus,.ui-autocomplete .ui-widget-header .ui-state-focus{border:1px solid transparent;background:inherit;color:var(--color-primary-element)}.ui-autocomplete .ui-menu-item a{border-radius:0 !important}.ui-button.primary{background-color:var(--color-primary);color:var(--color-primary-text);border:1px solid var(--color-primary-text)}.ui-draggable-handle,.ui-selectable{touch-action:pan-y}\", \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/jquery/css/jquery-ui-fixes.scss\"],\"names\":[],\"mappings\":\"AAEA,mBACC,oCAAA,CACA,4CAAA,CACA,4BAAA,CAED,qBACC,4BAAA,CAED,kBACC,WAAA,CACA,4BAAA,CACA,qBAAA,CAED,oBACC,4BAAA,CAKD,2FAGC,oCAAA,CACA,4CAAA,CACA,gBAAA,CACA,UAAA,CAED,yEAGC,UAAA,CAED,0KAMC,qBAAA,CACA,4CAAA,CACA,gBAAA,CACA,4BAAA,CAED,2FAIC,4BAAA,CAED,wFAGC,qCAAA,CACA,4CAAA,CACA,gBAAA,CACA,4BAAA,CAED,sEAGC,4BAAA,CAKD,iGAGC,6CAAA,CACA,4CAAA,CACA,6BAAA,CACA,eAAA,CAED,uGAGC,+BAAA,CAED,qFAGC,yBAAA,CACA,kCAAA,CACA,UAAA,CAED,2FAGC,UAAA,CAED,oGAGC,UAAA,CAKD,2BACC,wDAAA,CAED,kDAEC,wDAAA,CAED,0BACC,wDAAA,CAED,6BACC,wDAAA,CAED,uDAEC,wDAAA,CAED,sBACC,YAAA,CAMD,mBACC,sEAAA,CACA,UAAA,CAED,kBACC,oBAAA,CACA,WAAA,CACA,wEAAA,CACA,UAAA,CACA,iBAAA,CAID,SACC,WAAA,CAEA,oCACC,2BAAA,CACA,4BAAA,CAGD,sBACC,eAAA,CACA,kBAAA,CAEA,wCACC,WAAA,CACA,mCAAA,CACA,kBAAA,CACA,mBAAA,CACA,oBAAA,CAGD,6EAEC,WAAA,CACA,8CAAA,CACA,4BAAA,CACA,0WACC,4BAAA,CAGF,uCACC,gBAAA,CAOF,yBACC,SAAA,CAIA,4EAEC,iBAAA,CAGD,yCACC,+BAAA,CACA,aAAA,CACA,wBAAA,CAEA,iHACC,mDAAA,CACA,4BAAA,CAKH,mCACC,uCAAA,CACA,eAAA,CAGD,+BACC,eAAA,CACA,8CAAA,CACA,+CAAA,CAGD,gRAKC,4BAAA,CACA,kBAAA,CACA,kCAAA,CAIA,iCACC,0BAAA,CAKH,mBACC,qCAAA,CACA,+BAAA,CACA,0CAAA,CAKD,oCAEC,kBAAA\",\"sourcesContent\":[\"/* Component containers\\n----------------------------------*/\\n.ui-widget-content {\\n\\tborder: 1px solid var(--color-border);\\n\\tbackground: var(--color-main-background) none;\\n\\tcolor: var(--color-main-text);\\n}\\n.ui-widget-content a {\\n\\tcolor: var(--color-main-text);\\n}\\n.ui-widget-header {\\n\\tborder: none;\\n\\tcolor: var(--color-main-text);\\n\\tbackground-image: none;\\n}\\n.ui-widget-header a {\\n\\tcolor: var(--color-main-text);\\n}\\n\\n/* Interaction states\\n----------------------------------*/\\n.ui-state-default,\\n.ui-widget-content .ui-state-default,\\n.ui-widget-header .ui-state-default {\\n\\tborder: 1px solid var(--color-border);\\n\\tbackground: var(--color-main-background) none;\\n\\tfont-weight: bold;\\n\\tcolor: #555;\\n}\\n.ui-state-default a,\\n.ui-state-default a:link,\\n.ui-state-default a:visited {\\n\\tcolor: #555;\\n}\\n.ui-state-hover,\\n.ui-widget-content .ui-state-hover,\\n.ui-widget-header .ui-state-hover,\\n.ui-state-focus,\\n.ui-widget-content .ui-state-focus,\\n.ui-widget-header .ui-state-focus {\\n\\tborder: 1px solid #ddd;\\n\\tbackground: var(--color-main-background) none;\\n\\tfont-weight: bold;\\n\\tcolor: var(--color-main-text);\\n}\\n.ui-state-hover a,\\n.ui-state-hover a:hover,\\n.ui-state-hover a:link,\\n.ui-state-hover a:visited {\\n\\tcolor: var(--color-main-text);\\n}\\n.ui-state-active,\\n.ui-widget-content .ui-state-active,\\n.ui-widget-header .ui-state-active {\\n\\tborder: 1px solid var(--color-primary);\\n\\tbackground: var(--color-main-background) none;\\n\\tfont-weight: bold;\\n\\tcolor: var(--color-main-text);\\n}\\n.ui-state-active a,\\n.ui-state-active a:link,\\n.ui-state-active a:visited {\\n\\tcolor: var(--color-main-text);\\n}\\n\\n/* Interaction Cues\\n----------------------------------*/\\n.ui-state-highlight,\\n.ui-widget-content .ui-state-highlight,\\n.ui-widget-header .ui-state-highlight {\\n\\tborder: 1px solid var(--color-main-background);\\n\\tbackground: var(--color-main-background) none;\\n\\tcolor: var(--color-text-light);\\n\\tfont-weight: 600;\\n}\\n.ui-state-highlight a,\\n.ui-widget-content .ui-state-highlight a,\\n.ui-widget-header .ui-state-highlight a {\\n\\tcolor: var(--color-text-lighter);\\n}\\n.ui-state-error,\\n.ui-widget-content .ui-state-error,\\n.ui-widget-header .ui-state-error {\\n\\tborder: var(--color-error);\\n\\tbackground: var(--color-error) none;\\n\\tcolor: #ffffff;\\n}\\n.ui-state-error a,\\n.ui-widget-content .ui-state-error a,\\n.ui-widget-header .ui-state-error a {\\n\\tcolor: #ffffff;\\n}\\n.ui-state-error-text,\\n.ui-widget-content .ui-state-error-text,\\n.ui-widget-header .ui-state-error-text {\\n\\tcolor: #ffffff;\\n}\\n\\n/* Icons\\n----------------------------------*/\\n.ui-state-default .ui-icon {\\n\\tbackground-image: url('images/ui-icons_1d2d44_256x240.png');\\n}\\n.ui-state-hover .ui-icon,\\n.ui-state-focus .ui-icon {\\n\\tbackground-image: url('images/ui-icons_1d2d44_256x240.png');\\n}\\n.ui-state-active .ui-icon {\\n\\tbackground-image: url('images/ui-icons_1d2d44_256x240.png');\\n}\\n.ui-state-highlight .ui-icon {\\n\\tbackground-image: url('images/ui-icons_ffffff_256x240.png');\\n}\\n.ui-state-error .ui-icon,\\n.ui-state-error-text .ui-icon {\\n\\tbackground-image: url('images/ui-icons_ffd27a_256x240.png');\\n}\\n.ui-icon.ui-icon-none {\\n\\tdisplay: none;\\n}\\n\\n/* Misc visuals\\n----------------------------------*/\\n/* Overlays */\\n.ui-widget-overlay {\\n\\tbackground: #666666 url('images/ui-bg_diagonals-thick_20_666666_40x40.png') 50% 50% repeat;\\n\\topacity: .5;\\n}\\n.ui-widget-shadow {\\n\\tmargin: -5px 0 0 -5px;\\n\\tpadding: 5px;\\n\\tbackground: #000000 url('images/ui-bg_flat_10_000000_40x100.png') 50% 50% repeat-x;\\n\\topacity: .2;\\n\\tborder-radius: 5px;\\n}\\n\\n/* Tabs customizations */\\n.ui-tabs {\\n\\tborder: none;\\n\\n\\t.ui-tabs-nav.ui-corner-all {\\n\\t\\tborder-bottom-left-radius: 0;\\n\\t\\tborder-bottom-right-radius: 0;\\n\\t}\\n\\n\\t.ui-tabs-nav {\\n\\t\\tbackground: none;\\n\\t\\tmargin-bottom: 15px;\\n\\n\\t\\t.ui-state-default {\\n\\t\\t\\tborder: none;\\n\\t\\t\\tborder-bottom: 1px solid transparent;\\n\\t\\t\\tfont-weight: normal;\\n\\t\\t\\tmargin: 0 !important;\\n\\t\\t\\tpadding: 0 !important;\\n\\t\\t}\\n\\n\\t\\t.ui-state-hover,\\n\\t\\t.ui-state-active {\\n\\t\\t\\tborder: none;\\n\\t\\t\\tborder-bottom: 1px solid var(--color-main-text);\\n\\t\\t\\tcolor: var(--color-main-text);\\n\\t\\t\\ta, a:link, a:hover, a:visited {\\n\\t\\t\\t\\tcolor: var(--color-main-text);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\t.ui-state-active {\\n\\t\\t\\tfont-weight: bold;\\n\\t\\t}\\n\\t}\\n}\\n\\n/* Select menus */\\n.ui-autocomplete {\\n\\t&.ui-menu {\\n\\t\\tpadding: 0;\\n\\n\\t\\t/* scrolling starts from three items,\\n\\t\\t * so hide overflow and scrollbars for a clean layout */\\n\\t\\t&.item-count-1,\\n\\t\\t&.item-count-2 {\\n\\t\\t\\toverflow-y: hidden;\\n\\t\\t}\\n\\n\\t\\t.ui-menu-item a {\\n\\t\\t\\tcolor: var(--color-text-lighter);\\n\\t\\t\\tdisplay: block;\\n\\t\\t\\tpadding: 4px 4px 4px 14px;\\n\\n\\t\\t\\t&.ui-state-focus, &.ui-state-active {\\n\\t\\t\\t\\tbox-shadow: inset 4px 0 var(--color-primary-element);\\n\\t\\t\\t\\tcolor: var(--color-main-text);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\t&.ui-widget-content {\\n\\t\\tbackground: var(--color-main-background);\\n\\t\\tborder-top: none;\\n\\t}\\n\\n\\t&.ui-corner-all {\\n\\t\\tborder-radius: 0;\\n\\t\\tborder-bottom-left-radius: var(--border-radius);\\n\\t\\tborder-bottom-right-radius: var(--border-radius);\\n\\t}\\n\\n\\t.ui-state-hover, .ui-widget-content .ui-state-hover,\\n\\t.ui-widget-header .ui-state-hover,\\n\\t.ui-state-focus,\\n\\t.ui-widget-content .ui-state-focus,\\n\\t.ui-widget-header .ui-state-focus {\\n\\t\\tborder: 1px solid transparent;\\n\\t\\tbackground: inherit;\\n\\t\\tcolor: var(--color-primary-element);\\n\\t}\\n\\n\\t.ui-menu-item {\\n\\t\\ta {\\n\\t\\t\\tborder-radius: 0 !important;\\n\\t\\t}\\n\\t}\\n}\\n\\n.ui-button.primary {\\n\\tbackground-color: var(--color-primary);\\n\\tcolor: var(--color-primary-text);\\n\\tborder: 1px solid var(--color-primary-text);\\n}\\n\\n\\n/* DRAGGABLE */\\n.ui-draggable-handle,\\n.ui-selectable {\\n\\ttouch-action: pan-y;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".oc-dialog{background:var(--color-main-background);color:var(--color-text-light);border-radius:var(--border-radius-large);box-shadow:0 0 30px var(--color-box-shadow);padding:15px;z-index:10000;font-size:100%;box-sizing:border-box;min-width:200px;top:50%;left:50%;transform:translate(-50%, -50%);max-height:calc(100% - 20px);max-width:calc(100% - 20px);overflow:auto}.oc-dialog-title{background:var(--color-main-background)}.oc-dialog-buttonrow{position:relative;display:flex;background:transparent;right:0;bottom:0;padding:0;padding-top:10px;box-sizing:border-box;width:100%;background-image:linear-gradient(rgba(255, 255, 255, 0), var(--color-main-background))}.oc-dialog-buttonrow.twobuttons{justify-content:space-between}.oc-dialog-buttonrow.onebutton,.oc-dialog-buttonrow.twobuttons.aside{justify-content:flex-end}.oc-dialog-buttonrow button{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;height:44px;min-width:44px}.oc-dialog-close{position:absolute;top:0;right:0;padding:25px;background:var(--icon-close-000) no-repeat center;opacity:.5}.oc-dialog-close:hover,.oc-dialog-close:focus,.oc-dialog-close:active{opacity:1}.oc-dialog-dim{background-color:#000;opacity:.2;z-index:9999;position:fixed;top:0;left:0;width:100%;height:100%}body.theme--dark .oc-dialog-dim{opacity:.8}.oc-dialog-content{width:100%;max-width:550px}.oc-dialog.password-confirmation .oc-dialog-content{width:auto}.oc-dialog.password-confirmation .oc-dialog-content input[type=password]{width:100%}.oc-dialog.password-confirmation .oc-dialog-content label{display:none}\", \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/jquery/css/jquery.ocdialog.scss\"],\"names\":[],\"mappings\":\"AAAA,WACC,uCAAA,CACA,6BAAA,CACA,wCAAA,CACA,2CAAA,CACA,YAAA,CACA,aAAA,CACA,cAAA,CACA,qBAAA,CACA,eAAA,CACA,OAAA,CACA,QAAA,CACA,+BAAA,CACA,4BAAA,CACA,2BAAA,CACA,aAAA,CAED,iBACC,uCAAA,CAED,qBACC,iBAAA,CACA,YAAA,CACA,sBAAA,CACA,OAAA,CACA,QAAA,CACA,SAAA,CACA,gBAAA,CACA,qBAAA,CACA,UAAA,CACA,sFAAA,CAEA,gCACO,6BAAA,CAGP,qEAEC,wBAAA,CAGD,4BACI,kBAAA,CACA,eAAA,CACH,sBAAA,CACA,WAAA,CACA,cAAA,CAIF,iBACC,iBAAA,CACA,KAAA,CACA,OAAA,CACA,YAAA,CACA,iDAAA,CACA,UAAA,CAEA,sEAGC,SAAA,CAIF,eACC,qBAAA,CACA,UAAA,CACA,YAAA,CACA,cAAA,CACA,KAAA,CACA,MAAA,CACA,UAAA,CACA,WAAA,CAGD,gCACC,UAAA,CAGD,mBACC,UAAA,CACA,eAAA,CAIA,oDACC,UAAA,CAEA,yEACC,UAAA,CAED,0DACC,YAAA\",\"sourcesContent\":[\".oc-dialog {\\n\\tbackground: var(--color-main-background);\\n\\tcolor: var(--color-text-light);\\n\\tborder-radius: var(--border-radius-large);\\n\\tbox-shadow: 0 0 30px var(--color-box-shadow);\\n\\tpadding: 15px;\\n\\tz-index: 10000;\\n\\tfont-size: 100%;\\n\\tbox-sizing: border-box;\\n\\tmin-width: 200px;\\n\\ttop: 50%;\\n\\tleft: 50%;\\n\\ttransform: translate(-50%, -50%);\\n\\tmax-height: calc(100% - 20px);\\n\\tmax-width: calc(100% - 20px);\\n\\toverflow: auto;\\n}\\n.oc-dialog-title {\\n\\tbackground: var(--color-main-background);\\n}\\n.oc-dialog-buttonrow {\\n\\tposition: relative;\\n\\tdisplay: flex;\\n\\tbackground: transparent;\\n\\tright: 0;\\n\\tbottom: 0;\\n\\tpadding: 0;\\n\\tpadding-top: 10px;\\n\\tbox-sizing: border-box;\\n\\twidth: 100%;\\n\\tbackground-image: linear-gradient(rgba(255, 255, 255, 0.0), var(--color-main-background));\\n\\n\\t&.twobuttons {\\n justify-content: space-between;\\n }\\n\\n\\t&.onebutton,\\n\\t&.twobuttons.aside {\\n\\t\\tjustify-content: flex-end;\\n\\t}\\n\\n\\tbutton {\\n\\t white-space: nowrap;\\n\\t overflow: hidden;\\n\\t\\ttext-overflow: ellipsis;\\n\\t\\theight: 44px;\\n\\t\\tmin-width: 44px;\\n\\t}\\n}\\n\\n.oc-dialog-close {\\n\\tposition: absolute;\\n\\ttop: 0;\\n\\tright: 0;\\n\\tpadding: 25px;\\n\\tbackground: var(--icon-close-000) no-repeat center;\\n\\topacity: .5;\\n\\n\\t&:hover,\\n\\t&:focus,\\n\\t&:active {\\n\\t\\topacity: 1;\\n\\t}\\n}\\n\\n.oc-dialog-dim {\\n\\tbackground-color: #000;\\n\\topacity: .2;\\n\\tz-index: 9999;\\n\\tposition: fixed;\\n\\ttop: 0;\\n\\tleft: 0;\\n\\twidth: 100%;\\n\\theight: 100%;\\n}\\n\\nbody.theme--dark .oc-dialog-dim {\\n\\topacity: .8;\\n}\\n\\n.oc-dialog-content {\\n\\twidth: 100%;\\n\\tmax-width: 550px;\\n}\\n\\n.oc-dialog.password-confirmation {\\n\\t.oc-dialog-content {\\n\\t\\twidth: auto;\\n\\n\\t\\tinput[type=password] {\\n\\t\\t\\twidth: 100%;\\n\\t\\t}\\n\\t\\tlabel {\\n\\t\\t\\tdisplay: none;\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileUrl\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(2, data, 0),\"inverse\":container.program(5, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":2,\"column\":1},\"end\":{\"line\":10,\"column\":8}}})) != null ? stack1 : \"\");\n},\"2\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileTitle\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":2},\"end\":{\"line\":7,\"column\":9}}})) != null ? stack1 : \"\");\n},\"3\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t\t\t<a class=\\\"profile-link--avatar\\\" href=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileUrl\") : stack1), depth0))\n + \"\\\">\\n\t\t\t\t<img src=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=32\\\" class=\\\"avatar\\\" srcset=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=32 1x, \"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=64 2x, \"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=128 4x\\\" alt=\\\"\\\">\\n\t\t\t</a>\\n\";\n},\"5\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t\t<img src=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=32\\\" class=\\\"avatar\\\" srcset=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=32 1x, \"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=64 2x, \"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=128 4x\\\" alt=\\\"\\\">\\n\";\n},\"7\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileUrl\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(8, data, 0),\"inverse\":container.program(11, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":12,\"column\":1},\"end\":{\"line\":20,\"column\":8}}})) != null ? stack1 : \"\");\n},\"8\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileTitle\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(9, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":13,\"column\":2},\"end\":{\"line\":17,\"column\":9}}})) != null ? stack1 : \"\");\n},\"9\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t\t\t<a class=\\\"profile-link--avatar\\\" href=\\\"\"\n + container.escapeExpression(container.lambda(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileUrl\") : stack1), depth0))\n + \"\\\">\\n\t\t\t\t<div class=\\\"avatar\\\"></div>\\n\t\t\t</a>\\n\";\n},\"11\":function(container,depth0,helpers,partials,data) {\n return \"\t\t<div class=\\\"avatar\\\"></div>\\n\";\n},\"13\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileTitle\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(14, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":23,\"column\":1},\"end\":{\"line\":29,\"column\":8}}})) != null ? stack1 : \"\");\n},\"14\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t\t<a class=\\\"body profile-link--full-name\\\" href=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileUrl\") : stack1), depth0))\n + \"\\\">\\n\t\t\t<div class=\\\"full-name\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"fullName\") : stack1), depth0))\n + \"</div>\\n\t\t\t<div class=\\\"last-message\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"lastMessage\") : stack1), depth0))\n + \"</div>\\n\t\t\t<div class=\\\"email-address\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"emailAddresses\") : stack1), depth0))\n + \"</div>\\n\t\t</a>\\n\";\n},\"16\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t<div class=\\\"body\\\">\\n\t\t<div class=\\\"full-name\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"fullName\") : stack1), depth0))\n + \"</div>\\n\t\t<div class=\\\"last-message\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"lastMessage\") : stack1), depth0))\n + \"</div>\\n\t\t<div class=\\\"email-address\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"emailAddresses\") : stack1), depth0))\n + \"</div>\\n\t</div>\\n\";\n},\"18\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<a class=\\\"top-action\\\" href=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"hyperlink\") : stack1), depth0))\n + \"\\\" title=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"title\") : stack1), depth0))\n + \"\\\">\\n\t<img src=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"icon\") : stack1), depth0))\n + \"\\\" alt=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"title\") : stack1), depth0))\n + \"\\\">\\n</a>\\n\";\n},\"20\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<a class=\\\"second-action\\\" href=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"secondAction\") : stack1)) != null ? lookupProperty(stack1,\"hyperlink\") : stack1), depth0))\n + \"\\\" title=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"secondAction\") : stack1)) != null ? lookupProperty(stack1,\"title\") : stack1), depth0))\n + \"\\\">\\n\t<img src=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"secondAction\") : stack1)) != null ? lookupProperty(stack1,\"icon\") : stack1), depth0))\n + \"\\\" alt=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"secondAction\") : stack1)) != null ? lookupProperty(stack1,\"title\") : stack1), depth0))\n + \"\\\">\\n</a>\\n\";\n},\"22\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t<span class=\\\"other-actions icon-more\\\"></span>\\n\t<div class=\\\"menu popovermenu\\\">\\n\t\t<ul>\\n\"\n + ((stack1 = lookupProperty(helpers,\"each\").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"actions\") : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(23, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":51,\"column\":3},\"end\":{\"line\":58,\"column\":12}}})) != null ? stack1 : \"\")\n + \"\t\t</ul>\\n\t</div>\\n\";\n},\"23\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3=\"function\", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t\t\t<li>\\n\t\t\t\t<a href=\\\"\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"hyperlink\") || (depth0 != null ? lookupProperty(depth0,\"hyperlink\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"hyperlink\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":53,\"column\":13},\"end\":{\"line\":53,\"column\":26}}}) : helper)))\n + \"\\\">\\n\t\t\t\t\t<img src=\\\"\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"icon\") || (depth0 != null ? lookupProperty(depth0,\"icon\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"icon\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":54,\"column\":15},\"end\":{\"line\":54,\"column\":23}}}) : helper)))\n + \"\\\" alt=\\\"\\\">\\n\t\t\t\t\t<span>\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"title\") || (depth0 != null ? lookupProperty(depth0,\"title\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"title\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":55,\"column\":11},\"end\":{\"line\":55,\"column\":20}}}) : helper)))\n + \"</span>\\n\t\t\t\t</a>\\n\t\t\t</li>\\n\";\n},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.program(7, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":0},\"end\":{\"line\":21,\"column\":7}}})) != null ? stack1 : \"\")\n + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileUrl\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(13, data, 0),\"inverse\":container.program(16, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":22,\"column\":0},\"end\":{\"line\":36,\"column\":7}}})) != null ? stack1 : \"\")\n + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(18, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":37,\"column\":0},\"end\":{\"line\":41,\"column\":7}}})) != null ? stack1 : \"\")\n + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"hasTwoActions\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(20, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":42,\"column\":0},\"end\":{\"line\":46,\"column\":7}}})) != null ? stack1 : \"\")\n + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"hasManyActions\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(22, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":47,\"column\":0},\"end\":{\"line\":61,\"column\":7}}})) != null ? stack1 : \"\");\n},\"useData\":true});","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<div class=\\\"emptycontent\\\">\\n\t<div class=\\\"icon-search\\\"></div>\\n\t<h2>\"\n + container.escapeExpression(((helper = (helper = lookupProperty(helpers,\"couldNotLoadText\") || (depth0 != null ? lookupProperty(depth0,\"couldNotLoadText\") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"couldNotLoadText\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":5},\"end\":{\"line\":3,\"column\":25}}}) : helper)))\n + \"</h2>\\n</div>\\n\";\n},\"useData\":true});","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<div class=\\\"emptycontent\\\">\\n\t<div class=\\\"icon-search\\\"></div>\\n\t<h2>\"\n + container.escapeExpression(((helper = (helper = lookupProperty(helpers,\"noContactsFoundText\") || (depth0 != null ? lookupProperty(depth0,\"noContactsFoundText\") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"noContactsFoundText\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":4,\"column\":5},\"end\":{\"line\":4,\"column\":28}}}) : helper)))\n + \"</h2>\\n</div>\\n\";\n},\"3\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3=\"function\", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<div class=\\\"footer\\\"><a href=\\\"\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"contactsAppURL\") || (depth0 != null ? lookupProperty(depth0,\"contactsAppURL\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"contactsAppURL\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":9,\"column\":29},\"end\":{\"line\":9,\"column\":47}}}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"showAllContactsText\") || (depth0 != null ? lookupProperty(depth0,\"showAllContactsText\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"showAllContactsText\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":9,\"column\":49},\"end\":{\"line\":9,\"column\":72}}}) : helper)))\n + \"</a></div>\\n\";\n},\"5\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,\"canInstallApp\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(6, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":10,\"column\":0},\"end\":{\"line\":12,\"column\":0}}})) != null ? stack1 : \"\");\n},\"6\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3=\"function\", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<div class=\\\"footer\\\"><a href=\\\"\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"contactsAppMgmtURL\") || (depth0 != null ? lookupProperty(depth0,\"contactsAppMgmtURL\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"contactsAppMgmtURL\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":11,\"column\":29},\"end\":{\"line\":11,\"column\":51}}}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"contactsAppMgmtText\") || (depth0 != null ? lookupProperty(depth0,\"contactsAppMgmtText\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"contactsAppMgmtText\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":11,\"column\":53},\"end\":{\"line\":11,\"column\":76}}}) : helper)))\n + \"</a></div>\\n\";\n},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"unless\").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,\"contacts\") : depth0)) != null ? lookupProperty(stack1,\"length\") : stack1),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":0},\"end\":{\"line\":6,\"column\":11}}})) != null ? stack1 : \"\")\n + \"<div id=\\\"contactsmenu-contacts\\\"></div>\\n\"\n + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"contactsAppEnabled\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.program(5, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":8,\"column\":0},\"end\":{\"line\":12,\"column\":7}}})) != null ? stack1 : \"\");\n},\"useData\":true});","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<div class=\\\"emptycontent\\\">\\n\t<div class=\\\"icon-loading\\\"></div>\\n\t<h2>\"\n + container.escapeExpression(((helper = (helper = lookupProperty(helpers,\"loadingText\") || (depth0 != null ? lookupProperty(depth0,\"loadingText\") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"loadingText\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":5},\"end\":{\"line\":3,\"column\":20}}}) : helper)))\n + \"</h2>\\n</div>\\n\";\n},\"useData\":true});","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3=\"function\", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<label class=\\\"hidden-visually\\\" for=\\\"contactsmenu-search\\\">\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"searchContactsText\") || (depth0 != null ? lookupProperty(depth0,\"searchContactsText\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"searchContactsText\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":57},\"end\":{\"line\":1,\"column\":79}}}) : helper)))\n + \"</label>\\n<input id=\\\"contactsmenu-search\\\" type=\\\"search\\\" placeholder=\\\"\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"searchContactsText\") || (depth0 != null ? lookupProperty(depth0,\"searchContactsText\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"searchContactsText\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":2,\"column\":59},\"end\":{\"line\":2,\"column\":81}}}) : helper)))\n + \"\\\" value=\\\"\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"searchTerm\") || (depth0 != null ? lookupProperty(depth0,\"searchTerm\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"searchTerm\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":2,\"column\":90},\"end\":{\"line\":2,\"column\":104}}}) : helper)))\n + \"\\\">\\n<div class=\\\"content\\\">\\n</div>\\n\";\n},\"useData\":true});","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<img src=\\\"\"\n + container.escapeExpression(((helper = (helper = lookupProperty(helpers,\"icon\") || (depth0 != null ? lookupProperty(depth0,\"icon\") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"icon\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":24},\"end\":{\"line\":3,\"column\":32}}}) : helper)))\n + \"\\\">\";\n},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3=\"function\", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<li>\\n\t<a href=\\\"\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"hyperlink\") || (depth0 != null ? lookupProperty(depth0,\"hyperlink\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"hyperlink\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":2,\"column\":10},\"end\":{\"line\":2,\"column\":23}}}) : helper)))\n + \"\\\">\\n\t\t\"\n + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"icon\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":2},\"end\":{\"line\":3,\"column\":41}}})) != null ? stack1 : \"\")\n + \"\\n\t\t<span>\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"title\") || (depth0 != null ? lookupProperty(depth0,\"title\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"title\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":4,\"column\":8},\"end\":{\"line\":4,\"column\":17}}}) : helper)))\n + \"</span>\\n\t</a>\\n</li>\\n\";\n},\"useData\":true});","var map = {\n\t\"./af\": 42786,\n\t\"./af.js\": 42786,\n\t\"./ar\": 30867,\n\t\"./ar-dz\": 14130,\n\t\"./ar-dz.js\": 14130,\n\t\"./ar-kw\": 96135,\n\t\"./ar-kw.js\": 96135,\n\t\"./ar-ly\": 56440,\n\t\"./ar-ly.js\": 56440,\n\t\"./ar-ma\": 47702,\n\t\"./ar-ma.js\": 47702,\n\t\"./ar-sa\": 16040,\n\t\"./ar-sa.js\": 16040,\n\t\"./ar-tn\": 37100,\n\t\"./ar-tn.js\": 37100,\n\t\"./ar.js\": 30867,\n\t\"./az\": 31083,\n\t\"./az.js\": 31083,\n\t\"./be\": 9808,\n\t\"./be.js\": 9808,\n\t\"./bg\": 68338,\n\t\"./bg.js\": 68338,\n\t\"./bm\": 67438,\n\t\"./bm.js\": 67438,\n\t\"./bn\": 8905,\n\t\"./bn-bd\": 76225,\n\t\"./bn-bd.js\": 76225,\n\t\"./bn.js\": 8905,\n\t\"./bo\": 11560,\n\t\"./bo.js\": 11560,\n\t\"./br\": 1278,\n\t\"./br.js\": 1278,\n\t\"./bs\": 80622,\n\t\"./bs.js\": 80622,\n\t\"./ca\": 2468,\n\t\"./ca.js\": 2468,\n\t\"./cs\": 5822,\n\t\"./cs.js\": 5822,\n\t\"./cv\": 50877,\n\t\"./cv.js\": 50877,\n\t\"./cy\": 47373,\n\t\"./cy.js\": 47373,\n\t\"./da\": 24780,\n\t\"./da.js\": 24780,\n\t\"./de\": 59740,\n\t\"./de-at\": 60217,\n\t\"./de-at.js\": 60217,\n\t\"./de-ch\": 60894,\n\t\"./de-ch.js\": 60894,\n\t\"./de.js\": 59740,\n\t\"./dv\": 5300,\n\t\"./dv.js\": 5300,\n\t\"./el\": 50837,\n\t\"./el.js\": 50837,\n\t\"./en-au\": 78348,\n\t\"./en-au.js\": 78348,\n\t\"./en-ca\": 77925,\n\t\"./en-ca.js\": 77925,\n\t\"./en-gb\": 22243,\n\t\"./en-gb.js\": 22243,\n\t\"./en-ie\": 46436,\n\t\"./en-ie.js\": 46436,\n\t\"./en-il\": 47207,\n\t\"./en-il.js\": 47207,\n\t\"./en-in\": 44175,\n\t\"./en-in.js\": 44175,\n\t\"./en-nz\": 76319,\n\t\"./en-nz.js\": 76319,\n\t\"./en-sg\": 31662,\n\t\"./en-sg.js\": 31662,\n\t\"./eo\": 92915,\n\t\"./eo.js\": 92915,\n\t\"./es\": 55655,\n\t\"./es-do\": 55251,\n\t\"./es-do.js\": 55251,\n\t\"./es-mx\": 96112,\n\t\"./es-mx.js\": 96112,\n\t\"./es-us\": 71146,\n\t\"./es-us.js\": 71146,\n\t\"./es.js\": 55655,\n\t\"./et\": 5603,\n\t\"./et.js\": 5603,\n\t\"./eu\": 77763,\n\t\"./eu.js\": 77763,\n\t\"./fa\": 76959,\n\t\"./fa.js\": 76959,\n\t\"./fi\": 11897,\n\t\"./fi.js\": 11897,\n\t\"./fil\": 42549,\n\t\"./fil.js\": 42549,\n\t\"./fo\": 94694,\n\t\"./fo.js\": 94694,\n\t\"./fr\": 94470,\n\t\"./fr-ca\": 63049,\n\t\"./fr-ca.js\": 63049,\n\t\"./fr-ch\": 52330,\n\t\"./fr-ch.js\": 52330,\n\t\"./fr.js\": 94470,\n\t\"./fy\": 5044,\n\t\"./fy.js\": 5044,\n\t\"./ga\": 29295,\n\t\"./ga.js\": 29295,\n\t\"./gd\": 2101,\n\t\"./gd.js\": 2101,\n\t\"./gl\": 38794,\n\t\"./gl.js\": 38794,\n\t\"./gom-deva\": 27884,\n\t\"./gom-deva.js\": 27884,\n\t\"./gom-latn\": 23168,\n\t\"./gom-latn.js\": 23168,\n\t\"./gu\": 95349,\n\t\"./gu.js\": 95349,\n\t\"./he\": 24206,\n\t\"./he.js\": 24206,\n\t\"./hi\": 30094,\n\t\"./hi.js\": 30094,\n\t\"./hr\": 30316,\n\t\"./hr.js\": 30316,\n\t\"./hu\": 22138,\n\t\"./hu.js\": 22138,\n\t\"./hy-am\": 11423,\n\t\"./hy-am.js\": 11423,\n\t\"./id\": 29218,\n\t\"./id.js\": 29218,\n\t\"./is\": 90135,\n\t\"./is.js\": 90135,\n\t\"./it\": 90626,\n\t\"./it-ch\": 10150,\n\t\"./it-ch.js\": 10150,\n\t\"./it.js\": 90626,\n\t\"./ja\": 39183,\n\t\"./ja.js\": 39183,\n\t\"./jv\": 24286,\n\t\"./jv.js\": 24286,\n\t\"./ka\": 12105,\n\t\"./ka.js\": 12105,\n\t\"./kk\": 47772,\n\t\"./kk.js\": 47772,\n\t\"./km\": 18758,\n\t\"./km.js\": 18758,\n\t\"./kn\": 79282,\n\t\"./kn.js\": 79282,\n\t\"./ko\": 33730,\n\t\"./ko.js\": 33730,\n\t\"./ku\": 1408,\n\t\"./ku.js\": 1408,\n\t\"./ky\": 33291,\n\t\"./ky.js\": 33291,\n\t\"./lb\": 36841,\n\t\"./lb.js\": 36841,\n\t\"./lo\": 55466,\n\t\"./lo.js\": 55466,\n\t\"./lt\": 57010,\n\t\"./lt.js\": 57010,\n\t\"./lv\": 37595,\n\t\"./lv.js\": 37595,\n\t\"./me\": 39861,\n\t\"./me.js\": 39861,\n\t\"./mi\": 35493,\n\t\"./mi.js\": 35493,\n\t\"./mk\": 95966,\n\t\"./mk.js\": 95966,\n\t\"./ml\": 87341,\n\t\"./ml.js\": 87341,\n\t\"./mn\": 5115,\n\t\"./mn.js\": 5115,\n\t\"./mr\": 10370,\n\t\"./mr.js\": 10370,\n\t\"./ms\": 9847,\n\t\"./ms-my\": 41237,\n\t\"./ms-my.js\": 41237,\n\t\"./ms.js\": 9847,\n\t\"./mt\": 72126,\n\t\"./mt.js\": 72126,\n\t\"./my\": 56165,\n\t\"./my.js\": 56165,\n\t\"./nb\": 64924,\n\t\"./nb.js\": 64924,\n\t\"./ne\": 16744,\n\t\"./ne.js\": 16744,\n\t\"./nl\": 93901,\n\t\"./nl-be\": 59814,\n\t\"./nl-be.js\": 59814,\n\t\"./nl.js\": 93901,\n\t\"./nn\": 83877,\n\t\"./nn.js\": 83877,\n\t\"./oc-lnc\": 92135,\n\t\"./oc-lnc.js\": 92135,\n\t\"./pa-in\": 15858,\n\t\"./pa-in.js\": 15858,\n\t\"./pl\": 64495,\n\t\"./pl.js\": 64495,\n\t\"./pt\": 89520,\n\t\"./pt-br\": 57971,\n\t\"./pt-br.js\": 57971,\n\t\"./pt.js\": 89520,\n\t\"./ro\": 96459,\n\t\"./ro.js\": 96459,\n\t\"./ru\": 21793,\n\t\"./ru.js\": 21793,\n\t\"./sd\": 40950,\n\t\"./sd.js\": 40950,\n\t\"./se\": 10490,\n\t\"./se.js\": 10490,\n\t\"./si\": 90124,\n\t\"./si.js\": 90124,\n\t\"./sk\": 64249,\n\t\"./sk.js\": 64249,\n\t\"./sl\": 14985,\n\t\"./sl.js\": 14985,\n\t\"./sq\": 51104,\n\t\"./sq.js\": 51104,\n\t\"./sr\": 49131,\n\t\"./sr-cyrl\": 79915,\n\t\"./sr-cyrl.js\": 79915,\n\t\"./sr.js\": 49131,\n\t\"./ss\": 85893,\n\t\"./ss.js\": 85893,\n\t\"./sv\": 98760,\n\t\"./sv.js\": 98760,\n\t\"./sw\": 91172,\n\t\"./sw.js\": 91172,\n\t\"./ta\": 27333,\n\t\"./ta.js\": 27333,\n\t\"./te\": 23110,\n\t\"./te.js\": 23110,\n\t\"./tet\": 52095,\n\t\"./tet.js\": 52095,\n\t\"./tg\": 27321,\n\t\"./tg.js\": 27321,\n\t\"./th\": 9041,\n\t\"./th.js\": 9041,\n\t\"./tk\": 19005,\n\t\"./tk.js\": 19005,\n\t\"./tl-ph\": 75768,\n\t\"./tl-ph.js\": 75768,\n\t\"./tlh\": 89444,\n\t\"./tlh.js\": 89444,\n\t\"./tr\": 72397,\n\t\"./tr.js\": 72397,\n\t\"./tzl\": 28254,\n\t\"./tzl.js\": 28254,\n\t\"./tzm\": 51106,\n\t\"./tzm-latn\": 30699,\n\t\"./tzm-latn.js\": 30699,\n\t\"./tzm.js\": 51106,\n\t\"./ug-cn\": 9288,\n\t\"./ug-cn.js\": 9288,\n\t\"./uk\": 67691,\n\t\"./uk.js\": 67691,\n\t\"./ur\": 13795,\n\t\"./ur.js\": 13795,\n\t\"./uz\": 6791,\n\t\"./uz-latn\": 60588,\n\t\"./uz-latn.js\": 60588,\n\t\"./uz.js\": 6791,\n\t\"./vi\": 65666,\n\t\"./vi.js\": 65666,\n\t\"./x-pseudo\": 14378,\n\t\"./x-pseudo.js\": 14378,\n\t\"./yo\": 75805,\n\t\"./yo.js\": 75805,\n\t\"./zh-cn\": 83839,\n\t\"./zh-cn.js\": 83839,\n\t\"./zh-hk\": 55726,\n\t\"./zh-hk.js\": 55726,\n\t\"./zh-mo\": 99807,\n\t\"./zh-mo.js\": 99807,\n\t\"./zh-tw\": 74152,\n\t\"./zh-tw.js\": 74152\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 46700;","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoAQMAAAC2MCouAAAABlBMVEVmZmZ1dXVT6N0BAAAAUklEQVQIW8XNsQ3AIAwF0bMoKBmBURgNj8YojEBJEcXwu2yQ+p507BTeWDnozPISjPpY4O0W6CqEisUtiG/EF+IT8YG4fznihnhCPCNeEK/89D1Gd22TNOyXVAAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAABkAQMAAADOquA5AAAAA1BMVEUAAACnej3aAAAADklEQVQYGWMYBaOABgAAAlgAARbiVEcAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdD = function () {\n\tthrow new Error('define cannot be used indirect');\n};","__webpack_require__.amdO = {};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 943;","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t943: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tfor(moduleId in moreModules) {\n\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t}\n\t}\n\tif(runtime) var result = runtime(__webpack_require__);\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkIds[i]] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [874], function() { return __webpack_require__(13084); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"sourceRoot":""}