{"version":3,"file":"static/js/7324.f72e5642.js","mappings":"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","sources":["webpack://finnish-art/./src/components/Base/AccessMixin.js","webpack://finnish-art/./src/components/Base/EntityMixin.js","webpack://finnish-art/./src/components/Base/HyperlinkMixin.js","webpack://finnish-art/./src/components/Base/ImageBannerMixin.js","webpack://finnish-art/./src/components/Base/MetaMixin.js","webpack://finnish-art/./src/components/Base/EditableMixin.js","webpack://finnish-art/src/components/Base/EntityPage.vue","webpack://finnish-art/./src/components/Base/SortableMixin.js","webpack://finnish-art/./src/components/Base/LocaleMixin.js","webpack://finnish-art/./src/components/Base/EntityPage.vue?1562","webpack://finnish-art/./src/components/Base/EntityPage.vue?f397","webpack://finnish-art/./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","webpack://finnish-art/./node_modules/@babel/runtime/helpers/esm/slicedToArray.js","webpack://finnish-art/./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","webpack://finnish-art/./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","webpack://finnish-art/./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","webpack://finnish-art/./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js"],"sourcesContent":["/**\n * Detect given resource view/edit/publish privileges by Group, based on user Memberships.\n */\nimport { isProdSite, isTestEnv } from '@/helpers/deployment';\n\nexport default {\n\n data: function () {\n return {\n canRead: false,\n canEdit: false,\n canPublish: false\n };\n },\n\n methods: {\n\n revokeAccess: function () {\n this.canRead = false;\n this.canEdit = false;\n this.canPublish = false;\n },\n\n /**\n * Detect Read, Edit, Publish Access privileges.\n */\n getAccessPrivileges: function (resource) {\n // create mode\n if (resource && resource.Id === '0') {\n this.canRead = true;\n this.canEdit = true;\n this.canPublish = true; // perhaps context-aware publish access?\n\n // hide edit toggle\n this.$eventBus.$emit('page-access-change', true, null, true);\n }\n // resource with Access\n else if (resource && resource.Access) {\n this.getReadAccess(resource);\n this.getEditAccess(resource);\n this.getPublishAccess(resource);\n }\n // no Access to resource or no resource at all\n else {\n // no privileges\n this.revokeAccess();\n }\n\n // resource might be Derived, and may not be available to edit even if the original is\n if (!this.canEdit && resource && resource.Publish && resource.Publish.IsDerived &&\n this.$store.getters['user/getMembershipLevel'] >= 9000) {\n\n console.info(\"Edit access is forbidden, but page is Derived. Try editing in original language.\");\n this.$eventBus.$emit('page-access-change', false, this.$t('common.editNotAllowedOnDerived'));\n }\n else if (!this.canEdit && resource) {\n // emit signal to \"pencil\" to disable itself if editing is not possible\n this.$eventBus.$emit('page-access-change', false);\n }\n },\n\n /**\n * Return Access params for edit component.\n * Used to set FeatureArticles and Events ReadAccess.\n */\n getAccessGroups: function (resource) {\n const groups = {\n ReadAccess: this.getReadAccessGroupName(resource)\n };\n return groups;\n },\n\n /**\n * Return the resource's ReadAccess group from stored User Profile.\n * Returns name, or Id if name is not found.\n */\n getReadAccessGroupName: function (resource) {\n const readGroupId = resource && resource.Access && resource.Access.ReadGroup; // Id\n const group = this.getUserGroup(readGroupId);\n return (group && group.GroupName) || readGroupId;\n },\n\n getReadAccess: function (resource) {\n if (resource && resource.Access) {\n const group = this.getUserGroup(resource.Access.ReadGroup);\n if (group) {\n // this.logAccess(\"Read\", resource, group.GroupDisplayName);\n this.canRead = true;\n return true;\n }\n else {\n // this.logNoAccess(\"Read\", resource);\n this.canRead = true;\n return false;\n }\n }\n },\n\n getEditAccess: function (resource) {\n if (resource && resource.Access) {\n const group = this.getUserGroup(resource.Access.EditGroup);\n if (group) {\n this.logAccess(\"Edit\", resource, group.GroupDisplayName);\n this.canEdit = true;\n this.$eventBus.$emit('page-access-change', true);\n return true;\n }\n else {\n // this.logNoAccess(\"Edit\", resource);\n this.canEdit = false;\n return false;\n }\n }\n else if (resource) {\n // resource without Access\n this.$eventBus.$emit('page-access-change', false);\n }\n else {\n // no resource, hide edit mode toggle icon\n this.$eventBus.$emit('page-access-change', false, null, true);\n }\n },\n\n getPublishAccess: function (resource) {\n if (resource && resource.Access) {\n const group = this.getUserGroup(resource.Access.PublishGroup);\n if (group) {\n this.logAccess(\"Publish\", resource, group.GroupDisplayName);\n this.canPublish = true;\n return true;\n }\n else {\n // this.logNoAccess(\"Publish\", resource);\n this.canPublish = false;\n return false;\n }\n }\n },\n\n /**\n * Return group User has membership to.\n */\n getUserGroup: function (groupId) {\n const memberships = this.$store.getters['user/getMemberships'];\n return _.find(memberships, {GroupId: groupId});\n },\n\n logAccess: function (action, resource, groupDisplayName) {\n if (!isProdSite && !isTestEnv) {\n console.info(`${action} access to ${resource && resource.Name} granted through group ${groupDisplayName}`);\n }\n },\n\n logNoAccess: function (action, resource) {\n if (!isProdSite && !isTestEnv) {\n console.warn(`No ${action} access to ${resource && resource.Id} - ${resource && resource.Name}`);\n }\n }\n }\n};\n","import {\n getMakersShort,\n getActorLifetime,\n stringifyDimension\n} from '@/helpers';\n\n\n/**\n * EntityMixin - \"lightweight\" methods to deal with various \"entities\" (=resources)\n */\nexport default {\n\n data: function () {\n return {\n resource: '' // artworks, collections, actors, ...\n };\n },\n\n methods: {\n\n getName: function () {\n return this.item && (this.item.Name || this.item.ActorName || this.item.ActorSortName);\n },\n\n getOwnerName: function () {\n return this.item && this.item.Owner;\n },\n\n getTitle: function () {\n return this.getName() || ' ';\n },\n\n /**\n * Return Artwork title in the long form of\n * , \n */\n getArtworkTitle: function (item, hideUnknown) {\n if (!item) {\n return '';\n }\n let title = '';\n // MakersShort or Makers stringified\n const makers = getMakersShort(item);\n if (makers) {\n title += `${makers} – `;\n }\n // Name or Caption\n if (item.Name || item.Caption) {\n title += (item.Name || item.Caption);\n }\n else if (!hideUnknown) {\n // add unknown to title\n title += this.$t('common.unknown_lc');\n }\n // ProductionTimeSpanName\n if (item.ProductionTimeSpanName) {\n title += `, ${item.ProductionTimeSpanName}`;\n }\n return title;\n },\n\n getIngressText: function (item) {\n return (item && item.IngressText) || '';\n },\n\n getAudios: function (item) {\n return (item && item.AudioPlaylist) || [];\n },\n\n getVideos: function (item) {\n return (item && item.VideoPlaylist) || [];\n },\n\n getVideoCaption: function (item) {\n if (item && item.Caption) {\n return item.Caption;\n }\n else if (item && item.VideoPlayer && item.VideoPlayer.Caption) {\n return item.VideoPlayer.Caption;\n }\n },\n\n getContact: function () {\n const { item } = this;\n if (!item) {\n return \"\";\n }\n let contact = \"\";\n if (item.LocalityArea) {\n contact += item.LocalityArea;\n }\n return contact;\n },\n\n getCuratorName: function (item) {\n return item && item.Curator && item.Curator.Name;\n },\n\n /**\n * Return Actor Type as localized string\n */\n localizeActorType: function (actorType) {\n if (actorType === \"taiteilija\") {\n return this.$t(`actors.actorType.${actorType}`);\n }\n return actorType;\n },\n\n /**\n * Return Actor Type as localized string\n */\n getActorType: function (actor) {\n return this.localizeActorType(actor && actor.ActorType);\n },\n\n getActorLifetime,\n\n getMakersShort,\n\n /**\n * Return Maker Role as localized string\n */\n getMakerRole: function (maker) {\n return this.localizeActorType(maker && maker.Role);\n },\n\n /**\n * Result item dimensions.\n * @param {Object} - result item\n * @returns {String}\n */\n getDimensions: function (item) {\n let dimensions = '';\n\n if (item && item.DimensionsShort) {\n dimensions = item.DimensionsShort.replace('x', '×');\n }\n else if (item && item.Dimensions && item.Dimensions.length) {\n if (item.Dimensions.length === 1) {\n // only one dimension (diameter)\n const d = item.Dimensions[0];\n return stringifyDimension(d);\n }\n\n // format the first two dimensions\n const [y, x] = item.Dimensions.slice(0, 2);\n const yUnit = (x.Unit === y.Unit ? '' : y.Unit + ' ');\n dimensions = `${y.Value} ${yUnit}× ${x.Value} ${x.Unit}`;\n }\n\n // switch to commas for Finnish\n if (this.$store.getters['ux/getLocale'] === 'fi') {\n dimensions = dimensions.replace(/\\./g, ',');\n }\n\n return dimensions;\n },\n\n /**\n * Ticket price currency.\n */\n getCurrency: function (ticketPrice) {\n return (ticketPrice && ticketPrice.PriceCurrency &&\n ticketPrice.PriceCurrency.replace('eur', '€')) || '';\n }\n }\n};\n","/**\n * Methods for linking between views.\n */\nexport default {\n methods: {\n /**\n * Item name as slug for url.\n */\n getSlugUrlName: function (item) {\n let urlName = '-';\n if (item && item.Name) {\n urlName = item.Name\n // convert all whitespaces to \"-\"\n .replace(/\\s/g, '-')\n .replace('&', '_')\n .replace(/[^\\w-åäöÅÄÖ]+/g, '')\n // remove all non-wordchars and some exceptions\n .replace(/\\u00BF-\\u1FFF\\u2C00-\\uD7FF\\w/gi, ''); // this one is from stackoverflow\n }\n return urlName;\n },\n\n /**\n * Get route to an item.\n * The complex way.\n */\n getRoute: function (item, params, itemType) {\n let pathName = this.$store.getters['ux/getLocale'];\n const useProfile = this.$store.getters['ux/getUseProfile'];\n switch (itemType) {\n case 'Actor':\n pathName += '.ActorPage';\n break;\n case 'Actors':\n pathName += '.Actors';\n break;\n case 'FeatureArticle':\n pathName += '.ArticlePage';\n break;\n case 'FeatureArticles':\n pathName += '.Articles';\n break;\n case 'Artwork':\n pathName += '.ArtworkPage';\n break;\n case 'Artworks':\n pathName += '.Artworks';\n break;\n case 'Audio':\n pathName += '.AudioPage';\n // audio resource wrappers may not always carry Id, in which case route is impossible to format\n if (!item || !item.Id) {\n return {};\n }\n break;\n case 'Audios':\n pathName += '.Audios';\n break;\n case 'Collection':\n pathName += '.CollectionPage';\n break;\n case 'Collections':\n pathName += '.Collections';\n break;\n case 'Event':\n pathName += '.EventPage';\n break;\n case 'Events':\n pathName += '.Events';\n break;\n case 'Gallery':\n pathName += '.GalleryPage';\n break;\n case 'Galleries':\n pathName += '.Galleries';\n break;\n case 'Museum':\n pathName += '.MuseumPage';\n break;\n case 'Museums':\n pathName += '.Museums';\n break;\n case 'Organization':\n pathName += '.OrganizationPage';\n break;\n case 'Organizations':\n pathName += '.Organizations';\n break;\n case 'Video':\n pathName += '.VideoPage';\n // video resource wrappers may not always carry Id, in which case route is impossible to format\n if (!item || !item.Id) {\n return {};\n }\n break;\n case 'Videos':\n pathName += '.Videos';\n break;\n case 'Community':\n pathName += '.CommunityHome';\n break;\n default:\n // TODO: use the parameter as path name itself\n pathName = itemType;\n }\n\n let route;\n if (item) {\n const urlName = this.getSlugUrlName(item);\n\n // - displayed section can be a combination of different subpages\n // - given params override these defaults\n route = {\n name: pathName,\n params: _.extend({}, { // path params\n id: (item.Id || item.ActorId),\n urlName: urlName\n }, params),\n query: { // other url params (?...&...)\n UseProfile: useProfile\n }\n };\n }\n else {\n route = { name: pathName };\n }\n return route;\n },\n\n\n /**\n * Get route to an item.\n * The simple way.\n */\n getLocalizedRoute: function (view, locale, query = {}, params = {}) {\n let route = {};\n if (view && locale) {\n route = { name: `${locale}.${view}`, params, query };\n }\n return route;\n }\n }\n};\n","export default {\n\n data: function () {\n return {\n };\n },\n\n methods: {\n getIngressImageSrc: function (item, imageAttrs) {\n return this.$helpers.getIngressImageSrc(item, imageAttrs);\n },\n\n /**\n * Ingress image upload url\n */\n getIngressImageUploadUrl: function (item, resource) {\n return item && this.$helpers.getBaseUrl() +\n `/svc/${resource}/${item.Id}/images/ingressimage`;\n },\n\n getCoverImageSrc: function (item, imageAttrs) {\n return this.$helpers.getCoverImageSrc(item, imageAttrs);\n },\n\n /**\n * Cover image upload url\n */\n getCoverImageUploadUrl: function (item, resource) {\n return item && this.$helpers.getBaseUrl() +\n `/svc/${resource}/${item.Id}/images/coverimage`;\n },\n\n /**\n * Page image banner style\n */\n getImageBannerStyle: function (item, doEdit, useIngressImage, minHeight, imageAttrs) {\n return this.$helpers.getBannerImageStyle(item, doEdit, useIngressImage, minHeight, imageAttrs);\n }\n }\n};\n","import { getBaseUrl, getFullLocale } from '@/helpers/index';\nimport { getMetaImageSrc } from '@/helpers/image-resources';\nimport { isProdSite, isTestEnv } from '@/helpers/deployment';\n\n\nexport const hasTag = function (meta, obj) {\n return !!_.filter(meta, obj).length;\n};\n\nexport const getMetaInfo = function (pageInfo, route, item, noindex, siteName, locale) {\n var rv;\n const titleTemplate = typeof pageInfo.titleTemplate !== 'undefined' ?\n pageInfo.titleTemplate\n : `%s | ${siteName}`;\n\n const title = typeof pageInfo.title !== 'undefined' ?\n pageInfo.titleTemplate\n : ' ';\n\n const meta = _.clone(pageInfo.meta) || [];\n delete pageInfo.meta;\n\n if (!hasTag(meta, {name: 'robots'})) {\n meta.push({\n // do not index development sites, nor pages that set the noindex param\n name: 'robots',\n content: (isProdSite || isTestEnv) && !noindex ?\n 'index,follow,noarchive'\n : 'noindex,nofollow,noarchive,noodp,noydir,nosnippet'\n });\n }\n\n // og:type\n if (!hasTag(meta, {property: 'og:type'})) {\n meta.push({\n property: 'og:type',\n content: 'website'\n });\n }\n\n // og:site_name\n meta.push({\n property: 'og:site_name',\n content: siteName\n });\n\n // og:locale\n if (!hasTag(meta, {property: 'og:locale'})) {\n meta.push({\n property: 'og:locale',\n content: getFullLocale(locale)\n });\n }\n\n // og:title\n if (pageInfo.title && !hasTag(meta, {property: 'og:title'})) {\n meta.push({\n property: 'og:title',\n content: pageInfo.title\n });\n }\n\n if (item) {\n // og:description\n if (!hasTag(meta, {property: 'og:description'})) {\n const description = item.TagLine || item.IngressText || item.DescriptionHtml;\n if (description) {\n meta.push({\n property: 'og:description',\n content: description\n });\n }\n }\n\n if (!hasTag(meta, {property: 'og:metrics'})) {\n if (item.Metrics && item.Metrics.Primary) {\n meta.push({\n property: 'og:metrics',\n content: item.Metrics.Primary\n });\n pageInfo.afterNavigation = function() { console.log('afterNavigation ' + item.Metrics.Primary)};// eslint-disable-line no-alert\n pageInfo.changed = function(newInfo, addedTags, removedTags) {\n //console.log('Metadata was updated!', newInfo, addedTags, removedTags)\n };\n }\n }\n\n\n // og:image\n if (!hasTag(meta, {property: 'og:image'})) {\n let imageSrc = getMetaImageSrc(item);\n if (imageSrc) {\n imageSrc = imageSrc.replace(/&/g,'&').replace(/&/g,'&');\n }\n if (imageSrc) {\n meta.push({\n property: 'og:image',\n content: imageSrc\n });\n // set Twitter card type when image is set (NOTE: is \"name\", not \"property\")\n if (!hasTag(meta, {name: 'twitter:card'})) {\n meta.push({\n name: 'twitter:card',\n content: 'summary_large_image'\n });\n }\n // also possible to add property twitter:image:alt with image caption\n }\n }\n }\n\n // og:url\n if (route) {\n meta.push({\n property: 'og:url',\n content: getBaseUrl() + (route.path || '')\n });\n }\n rv = _.merge({\n htmlAttrs: {\n lang: locale,\n prefix: 'og: https://ogp.me/ns#'\n },\n meta,\n title,\n titleTemplate\n }, pageInfo);\n return _.merge({\n htmlAttrs: {\n lang: locale,\n prefix: 'og: https://ogp.me/ns#'\n },\n meta,\n title,\n titleTemplate\n }, pageInfo);\n};\n\n\n/**\n * Mixin to format metadata for vue-meta.\n */\nexport default {\n\n methods: {\n getMetaInfo: function (pageInfo, route, item, noindex) {\n // add site and locale parameters\n return getMetaInfo(pageInfo, route, item, noindex, this.$site, this.$i18n.locale);\n },\n\n getMetaImageSrc\n }\n};\n","import AccessMixin from '@/components/Base/AccessMixin';\nimport { levelProUser } from '@/store/user';\n\n/**\n * Mixin for editable resources.\n */\nexport default {\n\n mixins: [ AccessMixin ],\n\n data: function () {\n return {\n resource: '', // artworks, collections, actors, ...\n\n editMode: false,\n createMode: false,\n previewMode: false,\n doEdit: false, // editMode && canEdit\n\n accessGroups: {},\n\n originalValues: {},\n payloadFields: [\n 'Locale',\n 'Name',\n 'Editors',\n 'BodyHtml',\n 'IngressText',\n 'TopicDate',\n\n // Organizations\n 'TagLine',\n 'LocalityArea',\n 'PublicLocation',\n\n // Actors\n 'ArtistStatementHtml',\n 'BiographyHtml',\n 'CollectionsHtml',\n 'EducationHtml',\n 'FamilyHtml',\n 'MembershipsHtml',\n 'PrizesHtml',\n 'PublicWorksHtml',\n 'SourcesHtml',\n 'BirthDate',\n 'DeathDate',\n 'ActorType',\n\n // Collections\n 'DescriptionHtml',\n 'HistoryHtml',\n 'ExhibitionsHtml',\n 'ResearchHtml',\n 'NumberOfWorks',\n 'PolicyHtml',\n 'PublicationsHtml',\n\n // FeatureArticle Images\n 'Caption',\n 'CreditLine',\n\n // Events\n 'Start',\n 'End',\n 'EventClass',\n 'EntryDescription',\n 'OrganizerId'\n ]\n };\n },\n\n mounted: function () {\n this.$eventBus.$on('edit-mode-change', this.changeEditMode);\n },\n\n beforeDestroyed: function () {\n this.$eventBus.$off('edit-mode-change', this.changeEditMode);\n },\n\n watch: {\n /**\n * Check page editability on `item` change.\n */\n item: function () {\n this.initEditableView();\n },\n\n editMode: function () {\n this.initEditMode();\n },\n\n // createMode: function () {\n // this.initCreateMode();\n // },\n\n previewMode: function () {\n this.initEditMode();\n }\n },\n\n /**\n * Called before route changes to check and alert for unsaved changes.\n */\n beforeRouteLeave: function (to, from, next) {\n if (this.doEdit) {\n this.prepareToExit(next);\n }\n else {\n next();\n }\n },\n\n methods: {\n /**\n * Editable view init.\n * TODO: detect parent publish rights in createMode\n */\n initEditableView: function () {\n if (!this.item) {\n return;\n }\n\n this.getAccessPrivileges(this.item); // from AccessMixin\n\n // check for user access, do not load edit mode if not Pro User\n if (this.$store.getters['user/getMembershipLevel'] < levelProUser) {\n this.accessGroups = {};\n this.createMode = false;\n this.editMode = false;\n this.doEdit = false;\n return;\n }\n\n // disable doEdit flag without edit access\n if (!this.canEdit && !this.createMode) {\n this.doEdit = false;\n this.editMode = false;\n this.createMode = false;\n return;\n }\n\n this.editMode = this.$store.getters['ux/getEditMode'];\n this.createMode = (this.item && this.item.Id && this.item.Id == 0) || false; // eslint-disable-line eqeqeq\n this.accessGroups = this.getAccessGroups(this.item); // from AccessMixin\n\n if (this.createMode) {\n this.initCreateMode();\n }\n else if (this.editMode) {\n this.initEditMode();\n }\n },\n\n /**\n * Detect if page is editable.\n */\n initEditMode: function () {\n if (!this.canEdit || this.previewMode) {\n this.doEdit = false;\n }\n else {\n this.doEdit = (this.editMode || this.createMode);\n this.setCurrentEditValues();\n }\n },\n\n /**\n */\n initCreateMode: function () {\n this.initEditMode();\n this.doEdit = true;\n this.canPublish = true;\n },\n\n /**\n * Callback for eventbus event `edit-mode-changed`.\n */\n changeEditMode: function (mode) {\n if (this.editMode) {\n this.cancelEdit();\n }\n this.editMode = mode;\n },\n\n /**\n * Check and alert for unsaved changes before leaving the page.\n */\n prepareToExit: function (next) {\n if (this.hasUnsavedEdits()) {\n this.$eventBus.$emit('unsaved-changes-warning', next);\n return;\n }\n next();\n },\n\n /**\n * Check the vuex sessionStore for unsaved edits.\n * These are commited to the store from EditableHtmlSection.\n */\n hasUnsavedEdits: function () {\n return this.$store.getters['ux/getHasUnsavedEdits'];\n },\n\n /**\n * Save editable item values into memory for undo.\n * NOTE: Only if item is a data item, not passed via props.\n */\n setCurrentEditValues: function () {\n if (this._data.item) {\n this.originalValues = this.getPayload();\n this.setDefaultEditor();\n }\n else {\n this.originalValues = {};\n }\n if (this.hasUnsavedEdits()) {\n this.$store.commit('ux/setHasUnsavedEdits', false);\n }\n },\n\n /**\n * Get current Editor.\n */\n getCurrentEditor: function () {\n const profile = this.$store.getters['user/getProfile'];\n const name = (profile && profile.DisplayName) || '';\n return {\n DateEdited: new Date().toISOString(),\n EditorName: name,\n HideName: true\n };\n },\n\n /**\n * If item has no Editors, add one.\n */\n setDefaultEditor: function () {\n if (this.item && !this.item.Editors) {\n this.item.Editors = [];\n }\n if (this.item && !this.item.Editors.length && this.doEdit) {\n // set default editor\n this.item.Editors.push(this.getCurrentEditor());\n }\n },\n\n togglePreview: function () {\n this.previewMode = !this.previewMode;\n },\n\n /**\n * Cancel edit and undo changes.\n * NOTE: Only if item is a data item, not passed via props.\n */\n cancelEdit: function () {\n if (this._data.item) {\n _.extend(this.item, this.originalValues);\n }\n this.editMode = false;\n if (this.hasUnsavedEdits()) {\n this.$store.commit('ux/setHasUnsavedEdits', false);\n }\n },\n\n /**\n * PATCH request data\n * Collect all available parameters.\n * Ones that do not apply to this entity are removed from the payload.\n */\n getPayload: function () {\n const payload = {};\n this.payloadFields.forEach((field) => {\n if (typeof this.item[field] !== 'undefined') {\n const data = this.item[field];\n payload[field] = data;\n }\n });\n if (!payload.Locale) {\n payload.Locale = this.$i18n.locale;\n }\n return payload;\n },\n\n /**\n * Resource Access groups for payload.\n */\n getPayloadAccessGroups: function (accessGroups) {\n return _.pickBy(accessGroups, _.identity); // remove keys with no value\n },\n\n /**\n * Resource save (Artwork, Actor, Organization, etc).\n * With changes in edit mode.\n * Flushes the buffers by emitting `save` signal for html wysiwyg components.\n * Then promises are flushed to get the most recent data into the payload.\n */\n onSave: async function (event) {\n const button = (event && event.target.parentElement) || {};\n if (button && button.disabled) {\n return;\n }\n button.disabled = true; // prevent double click\n\n // emit event to show dialog\n this.$eventBus.$emit('save');\n\n // wait for promises to fulfill - flushing editor buffers\n this.$helpers.flushPromises()\n .then(() => {\n this.patchResource()\n .then(() => {\n this.setCurrentEditValues();\n this.$eventBus.$emit('save-success');\n try {\n this.$forceUpdate();\n }\n catch (error) {}\n })\n .catch((error) => {\n this.$eventBus.$emit('save-error', error);\n })\n .finally(() => {\n button.disabled = false;\n });\n });\n },\n\n /**\n * Update resource.\n * Views may use their own PATCH endpoint and override this method.\n */\n patchResource: async function () {\n return this.$SVC.putResourceArticle(this.resource, this.item.Id, this.getPayload());\n }\n }\n};\n","\n\n\n","/**\n * Search sort fields for Lucene sorting.\n * Returns sortFields with the value inserted or toggled.\n * Eg. ProductionAtmostEndYear:desc,NameSorted:asc\n */\nexport const getToggledSortFields = function (value, sortFields, clear) {\n let fields = {};\n if (sortFields && clear !== true) {\n // parse all fields\n fields = _.fromPairs(_.map(sortFields.split(','), (pair) => {\n return pair.split(':');\n }));\n }\n\n const [ key, order ] = value.split(':');\n\n // toggle selected field sort order asc/desc\n if (order === 'asc') {\n fields[key] = 'desc';\n }\n else if (order === 'desc') {\n fields[key] = 'asc';\n }\n else {\n // leave as-is\n fields[key] = order;\n }\n\n // format sortFields\n const _sortFields = _.map(fields, (key, val) => { return `${val}:${key}`; }).join(',');\n return _sortFields;\n};\n\n/**\n * Return sort operations for SQL sorting.\n\n * The implementation is spread between these sort functions here\n * and the SortOption component.\n *\n * Value can be removed by prefixing it with '--'.\n * ProductionTime switches both Asc|Desc suffix and Latest|Earliest\n *\n * @param value -- new operation state, eg. 'ArtistAsc' or 'ArtistDesc'\n * @param clear -- clear all sort options before adding value\n */\nexport const getToggledSortOperations = function (value, sortOperations, clear) {\n // copy operations\n const _sortOperations = clear ? [] : _.extend(sortOperations);\n\n if (value) {\n if (value.match(/^--/)) {\n // remove this value from `_sortOperations`\n _.pull(_sortOperations, value.replace(/^--/, ''));\n }\n else {\n // check if version of value exists in options already\n let found = false;\n const matchValue = value.replace(/asc|desc/i, '');\n\n _sortOperations.forEach((op, i) => {\n if (!found && op) {\n if (op.match(matchValue)\n || (op.match('ProductionTime') && matchValue.match('ProductionTime'))) {\n\n // replace respective item in `_sortOperations`\n _sortOperations[i] = value;\n found = true;\n }\n }\n });\n if (!found) {\n // add new value to `_sortOperations`\n _sortOperations.push(value);\n }\n }\n }\n\n return _sortOperations;\n};\n\n\nexport default {\n\n data: function () {\n return {\n sortFields: '', // Lucene sorting\n sortOperations: [], // SQL sorting\n debouncedMasonryReset: () => {} // implement in view\n };\n },\n\n methods: {\n getToggledSortFields,\n getToggledSortOperations,\n\n /**\n * Set artworks / search results by setting a sort field\n * that goes to the backend in the next request.\n * Eg. ProductionAtmostEndYear:desc,NameSorted:asc\n */\n toggleSortField: function (value, clear) {\n this.sortFields = this.getToggledSortFields(value, this.sortFields, clear);\n\n this.debouncedMasonryReset();\n },\n\n /**\n * Change sort operation state in `this.sortOperations`.\n *\n * Value can be removed by prefixing it with '--'.\n * ProductionTime switches both Asc|Desc suffix and Latest|Earliest\n *\n * @param value -- new operation state, eg. 'ArtistAsc' or 'ArtistDesc'\n * @param clear -- clear all sort options before adding value\n */\n setSortOperation: function (value, clear) {\n this.sortOperations = this.getToggledSortOperations(value, this.sortOperations, clear);\n\n this.debouncedMasonryReset();\n }\n }\n};\n","/**\n * Reload entity with `this.item.Id` when locale changes.\n * NOTE: this is triggered by \"page-update\" in App, which triggers from AppLocalisationMixin.\n */\nexport default {\n\n // mounted: function () {\n // // this.$eventBus.$on('locale-change', this.onLocaleChange);\n // },\n\n // beforeDestroy: function () {\n // // this.$eventBus.$off('locale-change', this.onLocaleChange);\n // },\n\n // methods: {\n // onLocaleChange: function (locale) {\n // // const id = this.item && this.item.Id;\n // // this.$eventBus.$emit('entity-reload', id);\n // // this.$eventBus.$emit('page-update');\n // }\n // }\n};\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EntityPage.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EntityPage.vue?vue&type=script&lang=js&\"","var render, staticRenderFns\nimport script from \"./EntityPage.vue?vue&type=script&lang=js&\"\nexport * from \"./EntityPage.vue?vue&type=script&lang=js&\"\nimport style0 from \"./EntityPage.vue?vue&type=style&index=0&id=35d8f2de&prod&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","export default function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n return arr2;\n}","import arrayWithHoles from \"./arrayWithHoles.js\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableRest from \"./nonIterableRest.js\";\nexport default function _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}","export default function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}","export default function _iterableToArrayLimit(arr, i) {\n var _i = null == arr ? null : \"undefined\" != typeof Symbol && arr[Symbol.iterator] || arr[\"@@iterator\"];\n if (null != _i) {\n var _s,\n _e,\n _x,\n _r,\n _arr = [],\n _n = !0,\n _d = !1;\n try {\n if (_x = (_i = _i.call(arr)).next, 0 === i) {\n if (Object(_i) !== _i) return;\n _n = !1;\n } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0) {\n ;\n }\n } catch (err) {\n _d = !0, _e = err;\n } finally {\n try {\n if (!_n && null != _i[\"return\"] && (_r = _i[\"return\"](), Object(_r) !== _r)) return;\n } finally {\n if (_d) throw _e;\n }\n }\n return _arr;\n }\n}","export default function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}"],"names":["data","canRead","canEdit","canPublish","methods","revokeAccess","this","getAccessPrivileges","resource","Id","$eventBus","$emit","Access","getReadAccess","getEditAccess","getPublishAccess","Publish","IsDerived","$store","getters","console","info","$t","getAccessGroups","ReadAccess","getReadAccessGroupName","readGroupId","ReadGroup","group","getUserGroup","GroupName","EditGroup","logAccess","GroupDisplayName","PublishGroup","groupId","memberships","_","find","GroupId","action","groupDisplayName","isProdSite","isTestEnv","Name","logNoAccess","warn","getName","item","ActorName","ActorSortName","getOwnerName","Owner","getTitle","getArtworkTitle","hideUnknown","title","makers","getMakersShort","Caption","ProductionTimeSpanName","getIngressText","IngressText","getAudios","AudioPlaylist","getVideos","VideoPlaylist","getVideoCaption","VideoPlayer","getContact","contact","LocalityArea","getCuratorName","Curator","localizeActorType","actorType","getActorType","actor","ActorType","getActorLifetime","getMakerRole","maker","Role","getDimensions","dimensions","DimensionsShort","replace","Dimensions","length","d","stringifyDimension","slice","y","x","yUnit","Unit","Value","getCurrency","ticketPrice","PriceCurrency","getSlugUrlName","urlName","getRoute","params","itemType","route","pathName","useProfile","name","extend","id","ActorId","query","UseProfile","getLocalizedRoute","view","locale","getIngressImageSrc","imageAttrs","$helpers","getIngressImageUploadUrl","getBaseUrl","getCoverImageSrc","getCoverImageUploadUrl","getImageBannerStyle","doEdit","useIngressImage","minHeight","getBannerImageStyle","hasTag","meta","obj","filter","getMetaInfo","pageInfo","noindex","siteName","titleTemplate","clone","push","content","property","getFullLocale","description","TagLine","DescriptionHtml","Metrics","Primary","afterNavigation","log","changed","newInfo","addedTags","removedTags","imageSrc","getMetaImageSrc","path","merge","htmlAttrs","lang","prefix","$site","$i18n","mixins","AccessMixin","editMode","createMode","previewMode","accessGroups","originalValues","payloadFields","mounted","$on","changeEditMode","beforeDestroyed","$off","watch","initEditableView","initEditMode","beforeRouteLeave","to","from","next","prepareToExit","levelProUser","initCreateMode","setCurrentEditValues","mode","cancelEdit","hasUnsavedEdits","_data","getPayload","setDefaultEditor","commit","getCurrentEditor","profile","DisplayName","DateEdited","Date","toISOString","EditorName","HideName","Editors","togglePreview","payload","forEach","field","Locale","getPayloadAccessGroups","pickBy","identity","onSave","event","button","target","parentElement","disabled","flushPromises","then","patchResource","$forceUpdate","error","catch","finally","$SVC","putResourceArticle","sortFields","sortOperations","debouncedMasonryReset","getToggledSortFields","value","clear","fields","fromPairs","map","split","pair","key","order","_sortFields","val","join","getToggledSortOperations","_sortOperations","match","pull","found","matchValue","op","i","toggleSortField","setSortOperation","props","type","default","section","hunk","metaInfo","pageMetaInfo","initialRender","isDeactivated","artworks","audios","videos","videosSlickOptions","slidesToShow","slidesToScroll","dots","swipe","variableWidth","adaptiveHeight","recommendations","debouncedPageAccessCheck","trailing","ready","beforeDestroy","activated","deactivated","loadViewData","__loadViewData","status","initNewEntity","BodyHtml","resolve","reloadEntity","onPageAccessCheck","onEditModeChange","getMetaTitle","getMetaDescription","getContextArtwork","getClassName","getMetrics","getCoverStyle","stackCallback","masonryReset","render","staticRenderFns","_arrayLikeToArray","arr","len","arr2","Array","_slicedToArray","isArray","_i","Symbol","iterator","_s","_e","_x","_r","_arr","_n","_d","call","Object","done","err","unsupportedIterableToArray","TypeError","_unsupportedIterableToArray","o","minLen","n","prototype","toString","constructor","test"],"sourceRoot":""}