{"version":3,"file":"additionalScripts.js","sources":["webpack:///webpack/bootstrap","webpack:///./apps/files_sharing/src/additionalScripts.js","webpack:///./apps/files_sharing/src/collaborationresourceshandler.js","webpack:///./apps/files_sharing/src/share.js","webpack:///./apps/files_sharing/src/sharebreadcrumbview.js","webpack:///./apps/files_sharing/src/style/sharebreadcrumb.scss?fbff","webpack:///./apps/files_sharing/src/style/sharebreadcrumb.scss","webpack:///./node_modules/css-loader/dist/runtime/api.js","webpack:///./node_modules/escape-html/index.js","webpack:///./node_modules/vue-style-loader/lib/addStylesClient.js","webpack:///./node_modules/vue-style-loader/lib/listToStyles.js"],"sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/js/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./apps/files_sharing/src/additionalScripts.js\");\n","import './share';\nimport './sharebreadcrumbview';\nimport './style/sharebreadcrumb.scss';\nimport './collaborationresourceshandler.js'; // eslint-disable-next-line camelcase\n\n__webpack_public_path__ = OC.linkTo('files_sharing', 'js/dist/'); // eslint-disable-next-line camelcase\n\n__webpack_nonce__ = btoa(OC.requestToken);\nwindow.OCA.Sharing = OCA.Sharing;","// eslint-disable-next-line camelcase\n__webpack_public_path__ = OC.linkTo('files_sharing', 'js/dist/'); // eslint-disable-next-line camelcase\n\n__webpack_nonce__ = btoa(OC.requestToken);\nwindow.OCP.Collaboration.registerType('file', {\n action: function action() {\n return new Promise(function (resolve, reject) {\n OC.dialogs.filepicker(t('files_sharing', 'Link to a file'), function (f) {\n var client = OC.Files.getClient();\n client.getFileInfo(f).then(function (status, fileInfo) {\n resolve(fileInfo.id);\n }).fail(function () {\n reject(new Error('Cannot get fileinfo'));\n });\n }, false, null, false, OC.dialogs.FILEPICKER_TYPE_CHOOSE, '', {\n allowDirectoryChooser: true\n });\n });\n },\n typeString: t('files_sharing', 'Link to a file'),\n typeIconClass: 'icon-files-dark'\n});","/* eslint-disable */\n\n/*\n * Copyright (c) 2014\n *\n * This file is licensed under the Affero General Public License version 3\n * or later.\n *\n * See the COPYING-README file.\n *\n */\nimport escapeHTML from 'escape-html';\n\n(function () {\n _.extend(OC.Files.Client, {\n PROPERTY_SHARE_TYPES: '{' + OC.Files.Client.NS_OWNCLOUD + '}share-types',\n PROPERTY_OWNER_ID: '{' + OC.Files.Client.NS_OWNCLOUD + '}owner-id',\n PROPERTY_OWNER_DISPLAY_NAME: '{' + OC.Files.Client.NS_OWNCLOUD + '}owner-display-name'\n });\n\n if (!OCA.Sharing) {\n OCA.Sharing = {};\n }\n /**\n * @namespace\n */\n\n\n OCA.Sharing.Util = {\n /**\n * Regular expression for splitting parts of remote share owners:\n * \"user@example.com/\"\n * \"user@example.com/path/to/owncloud\"\n * \"user@anotherexample.com@example.com/path/to/owncloud\n */\n _REMOTE_OWNER_REGEXP: new RegExp('^(([^@]*)@(([^@^/^\\\\s]*)@)?)([^[\\\\s/]*)([/](.*))?$'),\n\n /**\n * Initialize the sharing plugin.\n *\n * Registers the \"Share\" file action and adds additional\n * DOM attributes for the sharing file info.\n *\n * @param {OCA.Files.FileList} fileList file list to be extended\n */\n attach: function attach(fileList) {\n // core sharing is disabled/not loaded\n if (!OC.Share) {\n return;\n }\n\n if (fileList.id === 'trashbin' || fileList.id === 'files.public') {\n return;\n }\n\n var fileActions = fileList.fileActions;\n var oldCreateRow = fileList._createRow;\n\n fileList._createRow = function (fileData) {\n var tr = oldCreateRow.apply(this, arguments);\n var sharePermissions = OCA.Sharing.Util.getSharePermissions(fileData);\n\n if (fileData.permissions === 0) {\n // no permission, disabling sidebar\n delete fileActions.actions.all.Comment;\n delete fileActions.actions.all.Details;\n delete fileActions.actions.all.Goto;\n }\n\n tr.attr('data-share-permissions', sharePermissions);\n\n if (fileData.shareOwner) {\n tr.attr('data-share-owner', fileData.shareOwner);\n tr.attr('data-share-owner-id', fileData.shareOwnerId); // user should always be able to rename a mount point\n\n if (fileData.mountType === 'shared-root') {\n tr.attr('data-permissions', fileData.permissions | OC.PERMISSION_UPDATE);\n }\n }\n\n if (fileData.recipientData && !_.isEmpty(fileData.recipientData)) {\n tr.attr('data-share-recipient-data', JSON.stringify(fileData.recipientData));\n }\n\n if (fileData.shareTypes) {\n tr.attr('data-share-types', fileData.shareTypes.join(','));\n }\n\n return tr;\n };\n\n var oldElementToFile = fileList.elementToFile;\n\n fileList.elementToFile = function ($el) {\n var fileInfo = oldElementToFile.apply(this, arguments);\n fileInfo.sharePermissions = $el.attr('data-share-permissions') || undefined;\n fileInfo.shareOwner = $el.attr('data-share-owner') || undefined;\n fileInfo.shareOwnerId = $el.attr('data-share-owner-id') || undefined;\n\n if ($el.attr('data-share-types')) {\n fileInfo.shareTypes = $el.attr('data-share-types').split(',');\n }\n\n if ($el.attr('data-expiration')) {\n var expirationTimestamp = parseInt($el.attr('data-expiration'));\n fileInfo.shares = [];\n fileInfo.shares.push({\n expiration: expirationTimestamp\n });\n }\n\n return fileInfo;\n };\n\n var oldGetWebdavProperties = fileList._getWebdavProperties;\n\n fileList._getWebdavProperties = function () {\n var props = oldGetWebdavProperties.apply(this, arguments);\n props.push(OC.Files.Client.PROPERTY_OWNER_ID);\n props.push(OC.Files.Client.PROPERTY_OWNER_DISPLAY_NAME);\n props.push(OC.Files.Client.PROPERTY_SHARE_TYPES);\n return props;\n };\n\n fileList.filesClient.addFileInfoParser(function (response) {\n var data = {};\n var props = response.propStat[0].properties;\n var permissionsProp = props[OC.Files.Client.PROPERTY_PERMISSIONS];\n\n if (permissionsProp && permissionsProp.indexOf('S') >= 0) {\n data.shareOwner = props[OC.Files.Client.PROPERTY_OWNER_DISPLAY_NAME];\n data.shareOwnerId = props[OC.Files.Client.PROPERTY_OWNER_ID];\n }\n\n var shareTypesProp = props[OC.Files.Client.PROPERTY_SHARE_TYPES];\n\n if (shareTypesProp) {\n data.shareTypes = _.chain(shareTypesProp).filter(function (xmlvalue) {\n return xmlvalue.namespaceURI === OC.Files.Client.NS_OWNCLOUD && xmlvalue.nodeName.split(':')[1] === 'share-type';\n }).map(function (xmlvalue) {\n return parseInt(xmlvalue.textContent || xmlvalue.text, 10);\n }).value();\n }\n\n return data;\n }); // use delegate to catch the case with multiple file lists\n\n fileList.$el.on('fileActionsReady', function (ev) {\n var $files = ev.$files;\n\n _.each($files, function (file) {\n var $tr = $(file);\n var shareTypes = $tr.attr('data-share-types') || '';\n var shareOwner = $tr.attr('data-share-owner');\n\n if (shareTypes || shareOwner) {\n var hasLink = false;\n var hasShares = false;\n\n _.each(shareTypes.split(',') || [], function (shareType) {\n shareType = parseInt(shareType, 10);\n\n if (shareType === OC.Share.SHARE_TYPE_LINK) {\n hasLink = true;\n } else if (shareType === OC.Share.SHARE_TYPE_EMAIL) {\n hasLink = true;\n } else if (shareType === OC.Share.SHARE_TYPE_USER) {\n hasShares = true;\n } else if (shareType === OC.Share.SHARE_TYPE_GROUP) {\n hasShares = true;\n } else if (shareType === OC.Share.SHARE_TYPE_REMOTE) {\n hasShares = true;\n } else if (shareType === OC.Share.SHARE_TYPE_CIRCLE) {\n hasShares = true;\n } else if (shareType === OC.Share.SHARE_TYPE_ROOM) {\n hasShares = true;\n }\n });\n\n OCA.Sharing.Util._updateFileActionIcon($tr, hasShares, hasLink);\n }\n });\n });\n fileList.$el.on('changeDirectory', function () {\n OCA.Sharing.sharesLoaded = false;\n });\n fileActions.registerAction({\n name: 'Share',\n displayName: function displayName(context) {\n if (context && context.$file) {\n var shareType = parseInt(context.$file.data('share-types'), 10);\n var shareOwner = context.$file.data('share-owner-id');\n\n if (shareType >= 0 || shareOwner) {\n return t('core', 'Shared');\n }\n }\n\n return t('core', 'Share');\n },\n altText: t('core', 'Share'),\n mime: 'all',\n order: -150,\n permissions: OC.PERMISSION_ALL,\n iconClass: function iconClass(fileName, context) {\n var shareType = parseInt(context.$file.data('share-types'), 10);\n\n if (shareType === OC.Share.SHARE_TYPE_EMAIL || shareType === OC.Share.SHARE_TYPE_LINK) {\n return 'icon-public';\n }\n\n return 'icon-shared';\n },\n icon: function icon(fileName, context) {\n var shareOwner = context.$file.data('share-owner-id');\n\n if (shareOwner) {\n return OC.generateUrl(\"/avatar/\".concat(shareOwner, \"/32\"));\n }\n },\n type: OCA.Files.FileActions.TYPE_INLINE,\n actionHandler: function actionHandler(fileName, context) {\n // do not open sidebar if permission is set and equal to 0\n var permissions = parseInt(context.$file.data('share-permissions'), 10);\n\n if (isNaN(permissions) || permissions > 0) {\n fileList.showDetailsView(fileName, 'sharing');\n }\n },\n render: function render(actionSpec, isDefault, context) {\n var permissions = parseInt(context.$file.data('permissions'), 10); // if no share permissions but share owner exists, still show the link\n\n if ((permissions & OC.PERMISSION_SHARE) !== 0 || context.$file.attr('data-share-owner')) {\n return fileActions._defaultRenderAction.call(fileActions, actionSpec, isDefault, context);\n } // don't render anything\n\n\n return null;\n }\n }); // register share breadcrumbs component\n\n var breadCrumbSharingDetailView = new OCA.Sharing.ShareBreadCrumbView();\n fileList.registerBreadCrumbDetailView(breadCrumbSharingDetailView);\n },\n\n /**\n * Update file list data attributes\n */\n _updateFileListDataAttributes: function _updateFileListDataAttributes(fileList, $tr, shareModel) {\n // files app current cannot show recipients on load, so we don't update the\n // icon when changed for consistency\n if (fileList.id === 'files') {\n return;\n }\n\n var recipients = _.pluck(shareModel.get('shares'), 'share_with_displayname'); // note: we only update the data attribute because updateIcon()\n\n\n if (recipients.length) {\n var recipientData = _.mapObject(shareModel.get('shares'), function (share) {\n return {\n shareWith: share.share_with,\n shareWithDisplayName: share.share_with_displayname\n };\n });\n\n $tr.attr('data-share-recipient-data', JSON.stringify(recipientData));\n } else {\n $tr.removeAttr('data-share-recipient-data');\n }\n },\n\n /**\n * Update the file action share icon for the given file\n *\n * @param $tr file element of the file to update\n * @param {boolean} hasUserShares true if a user share exists\n * @param {boolean} hasLinkShares true if a link share exists\n *\n * @returns {boolean} true if the icon was set, false otherwise\n */\n _updateFileActionIcon: function _updateFileActionIcon($tr, hasUserShares, hasLinkShares) {\n // if the statuses are loaded already, use them for the icon\n // (needed when scrolling to the next page)\n if (hasUserShares || hasLinkShares || $tr.attr('data-share-recipient-data') || $tr.attr('data-share-owner')) {\n OCA.Sharing.Util._markFileAsShared($tr, true, hasLinkShares);\n\n return true;\n }\n\n return false;\n },\n\n /**\n * Marks/unmarks a given file as shared by changing its action icon\n * and folder icon.\n *\n * @param $tr file element to mark as shared\n * @param hasShares whether shares are available\n * @param hasLink whether link share is available\n */\n _markFileAsShared: function _markFileAsShared($tr, hasShares, hasLink) {\n var action = $tr.find('.fileactions .action[data-action=\"Share\"]');\n var type = $tr.data('type');\n var icon = action.find('.icon');\n var message, recipients, avatars;\n var ownerId = $tr.attr('data-share-owner-id');\n var owner = $tr.attr('data-share-owner');\n var mountType = $tr.attr('data-mounttype');\n var shareFolderIcon;\n var iconClass = 'icon-shared';\n action.removeClass('shared-style'); // update folder icon\n\n if (type === 'dir' && (hasShares || hasLink || ownerId)) {\n if (typeof mountType !== 'undefined' && mountType !== 'shared-root' && mountType !== 'shared') {\n shareFolderIcon = OC.MimeType.getIconUrl('dir-' + mountType);\n } else if (hasLink) {\n shareFolderIcon = OC.MimeType.getIconUrl('dir-public');\n } else {\n shareFolderIcon = OC.MimeType.getIconUrl('dir-shared');\n }\n\n $tr.find('.filename .thumbnail').css('background-image', 'url(' + shareFolderIcon + ')');\n $tr.attr('data-icon', shareFolderIcon);\n } else if (type === 'dir') {\n var isEncrypted = $tr.attr('data-e2eencrypted'); // FIXME: duplicate of FileList._createRow logic for external folder,\n // need to refactor the icon logic into a single code path eventually\n\n if (isEncrypted === 'true') {\n shareFolderIcon = OC.MimeType.getIconUrl('dir-encrypted');\n $tr.attr('data-icon', shareFolderIcon);\n } else if (mountType && mountType.indexOf('external') === 0) {\n shareFolderIcon = OC.MimeType.getIconUrl('dir-external');\n $tr.attr('data-icon', shareFolderIcon);\n } else {\n shareFolderIcon = OC.MimeType.getIconUrl('dir'); // back to default\n\n $tr.removeAttr('data-icon');\n }\n\n $tr.find('.filename .thumbnail').css('background-image', 'url(' + shareFolderIcon + ')');\n } // update share action text / icon\n\n\n if (hasShares || ownerId) {\n recipients = $tr.data('share-recipient-data');\n action.addClass('shared-style');\n avatars = '' + t('core', 'Shared') + ''; // even if reshared, only show \"Shared by\"\n\n if (ownerId) {\n message = t('core', 'Shared by');\n avatars = OCA.Sharing.Util._formatRemoteShare(ownerId, owner, message);\n } else if (recipients) {\n avatars = OCA.Sharing.Util._formatShareList(recipients);\n }\n\n action.html(avatars).prepend(icon);\n\n if (ownerId || recipients) {\n var avatarElement = action.find('.avatar');\n avatarElement.each(function () {\n $(this).avatar($(this).data('username'), 32);\n });\n action.find('span[title]').tooltip({\n placement: 'top'\n });\n }\n } else {\n action.html('' + t('core', 'Shared') + '').prepend(icon);\n }\n\n if (hasLink) {\n iconClass = 'icon-public';\n }\n\n icon.removeClass('icon-shared icon-public').addClass(iconClass);\n },\n\n /**\t\n * Format a remote address\t\n *\t\n * @param {String} shareWith userid, full remote share, or whatever\t\n * @param {String} shareWithDisplayName\t\n * @param {String} message\t\n * @returns {String} HTML code to display\t\n */\n _formatRemoteShare: function _formatRemoteShare(shareWith, shareWithDisplayName, message) {\n var parts = OCA.Sharing.Util._REMOTE_OWNER_REGEXP.exec(shareWith);\n\n if (!parts || !parts[6]) {\n // display avatar of the user\t\n var avatar = '';\n var hidden = '' + message + ' ' + escapeHTML(shareWithDisplayName) + ' ';\n return avatar + hidden;\n }\n\n var userName = parts[2];\n var userDomain = parts[4];\n var server = parts[5];\n var tooltip = message + ' ' + userName;\n\n if (userDomain) {\n tooltip += '@' + userDomain;\n }\n\n if (server) {\n tooltip += '@' + server;\n }\n\n var html = '';\n html += '' + escapeHTML(userName) + '';\n\n if (userDomain) {\n html += '@' + escapeHTML(userDomain) + '';\n }\n\n html += ' ';\n return html;\n },\n\n /**\t\n * Loop over all recipients in the list and format them using\t\n * all kind of fancy magic.\t\n *\t\n * @param {Object} recipients array of all the recipients\t\n * @returns {String[]} modified list of recipients\t\n */\n _formatShareList: function _formatShareList(recipients) {\n var _parent = this;\n\n recipients = _.toArray(recipients);\n recipients.sort(function (a, b) {\n return a.shareWithDisplayName.localeCompare(b.shareWithDisplayName);\n });\n return $.map(recipients, function (recipient) {\n return _parent._formatRemoteShare(recipient.shareWith, recipient.shareWithDisplayName, t('core', 'Shared with'));\n });\n },\n\n /**\t\n * Marks/unmarks a given file as shared by changing its action icon\t\n * and folder icon.\t\n *\t\n * @param $tr file element to mark as shared\t\n * @param hasShares whether shares are available\t\n * @param hasLink whether link share is available\t\n */\n markFileAsShared: function markFileAsShared($tr, hasShares, hasLink) {\n var action = $tr.find('.fileactions .action[data-action=\"Share\"]');\n var type = $tr.data('type');\n var icon = action.find('.icon');\n var message, recipients, avatars;\n var ownerId = $tr.attr('data-share-owner-id');\n var owner = $tr.attr('data-share-owner');\n var mountType = $tr.attr('data-mounttype');\n var shareFolderIcon;\n var iconClass = 'icon-shared';\n action.removeClass('shared-style'); // update folder icon\t\n\n if (type === 'dir' && (hasShares || hasLink || ownerId)) {\n if (typeof mountType !== 'undefined' && mountType !== 'shared-root' && mountType !== 'shared') {\n shareFolderIcon = OC.MimeType.getIconUrl('dir-' + mountType);\n } else if (hasLink) {\n shareFolderIcon = OC.MimeType.getIconUrl('dir-public');\n } else {\n shareFolderIcon = OC.MimeType.getIconUrl('dir-shared');\n }\n\n $tr.find('.filename .thumbnail').css('background-image', 'url(' + shareFolderIcon + ')');\n $tr.attr('data-icon', shareFolderIcon);\n } else if (type === 'dir') {\n var isEncrypted = $tr.attr('data-e2eencrypted'); // FIXME: duplicate of FileList._createRow logic for external folder,\t\n // need to refactor the icon logic into a single code path eventually\t\n\n if (isEncrypted === 'true') {\n shareFolderIcon = OC.MimeType.getIconUrl('dir-encrypted');\n $tr.attr('data-icon', shareFolderIcon);\n } else if (mountType && mountType.indexOf('external') === 0) {\n shareFolderIcon = OC.MimeType.getIconUrl('dir-external');\n $tr.attr('data-icon', shareFolderIcon);\n } else {\n shareFolderIcon = OC.MimeType.getIconUrl('dir'); // back to default\t\n\n $tr.removeAttr('data-icon');\n }\n\n $tr.find('.filename .thumbnail').css('background-image', 'url(' + shareFolderIcon + ')');\n } // update share action text / icon\t\n\n\n if (hasShares || ownerId) {\n recipients = $tr.data('share-recipient-data');\n action.addClass('shared-style');\n avatars = '' + t('core', 'Shared') + ''; // even if reshared, only show \"Shared by\"\t\n\n if (ownerId) {\n message = t('core', 'Shared by');\n avatars = this._formatRemoteShare(ownerId, owner, message);\n } else if (recipients) {\n avatars = this._formatShareList(recipients);\n }\n\n action.html(avatars).prepend(icon);\n\n if (ownerId || recipients) {\n var avatarElement = action.find('.avatar');\n avatarElement.each(function () {\n $(this).avatar($(this).data('username'), 32);\n });\n action.find('span[title]').tooltip({\n placement: 'top'\n });\n }\n } else {\n action.html('' + t('core', 'Shared') + '').prepend(icon);\n }\n\n if (hasLink) {\n iconClass = 'icon-public';\n }\n\n icon.removeClass('icon-shared icon-public').addClass(iconClass);\n },\n\n /**\n * @param {Array} fileData\n * @returns {String}\n */\n getSharePermissions: function getSharePermissions(fileData) {\n return fileData.sharePermissions;\n }\n };\n})();\n\nOC.Plugins.register('OCA.Files.FileList', OCA.Sharing.Util);","/**\n * @copyright 2016 Christoph Wurst \n *\n * @author 2016 Christoph Wurst \n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n */\n(function () {\n 'use strict';\n\n var BreadCrumbView = OC.Backbone.View.extend({\n tagName: 'span',\n events: {\n click: '_onClick'\n },\n _dirInfo: undefined,\n render: function render(data) {\n this._dirInfo = data.dirInfo || null;\n\n if (this._dirInfo !== null && (this._dirInfo.path !== '/' || this._dirInfo.name !== '')) {\n var isShared = data.dirInfo && data.dirInfo.shareTypes && data.dirInfo.shareTypes.length > 0;\n this.$el.removeClass('shared icon-public icon-shared');\n\n if (isShared) {\n this.$el.addClass('shared');\n\n if (data.dirInfo.shareTypes.indexOf(OC.Share.SHARE_TYPE_LINK) !== -1) {\n this.$el.addClass('icon-public');\n } else {\n this.$el.addClass('icon-shared');\n }\n } else {\n this.$el.addClass('icon-shared');\n }\n\n this.$el.show();\n this.delegateEvents();\n } else {\n this.$el.removeClass('shared icon-public icon-shared');\n this.$el.hide();\n }\n\n return this;\n },\n _onClick: function _onClick(e) {\n e.preventDefault();\n var fileInfoModel = new OCA.Files.FileInfoModel(this._dirInfo);\n var self = this;\n fileInfoModel.on('change', function () {\n self.render({\n dirInfo: self._dirInfo\n });\n });\n var path = fileInfoModel.attributes.path + '/' + fileInfoModel.attributes.name;\n OCA.Files.Sidebar.open(path);\n OCA.Files.Sidebar.setActiveTab('sharing');\n }\n });\n OCA.Sharing.ShareBreadCrumbView = BreadCrumbView;\n})();","// style-loader: Adds some css to the DOM by adding a