Hoppa till innehåll

Hämta relaterad information

Exempel på hur man kan hämta ut relaterad metadata från en nod och hantera de olika typerna av värden som kan förekomma.

server/getRelatedMetadata.js
import ScriptUtil from '@sitevision/api/server/ScriptUtil';
import Properties from '@sitevision/api/server/Properties';
import MetadataUtil from '@sitevision/api/server/MetadataUtil';
import InstanceTypeUtil from '@sitevision/api/server/InstanceTypeUtil';
import NodeTypeUtil from '@sitevision/api/server/NodeTypeUtil';
function isLink(value) {
return InstanceTypeUtil.isNode(value) && NodeTypeUtil.isLink(value);
}
function isUser(value) {
return InstanceTypeUtil.isNode(value)
&& NodeTypeUtil.isTypeOf(value, [NodeTypeUtil.USER_TYPE, NodeTypeUtil.SIMPLE_USER_TYPE]);
}
function isFile(value) {
return InstanceTypeUtil.isNode(value)
&& NodeTypeUtil.isLink(value)
&& ['FILE', 'IMAGE'].includes(Properties.get(value, 'linkType'));
}
function createLinkData(node) {
const uri = Properties.get(node, 'rawURI');
const isExternal = Properties.get(node, 'linkType') === 'EXTERNAL';
const isNewWindow = Properties.get(node, 'openInNewWindow');
return {
id: node.getIdentifier(),
name: Properties.get(node, 'displayName'),
uri,
isExternal,
isNewWindow,
assistiveText: [
Properties.get(node, 'description'),
isExternal && 'länk till annan webbplats',
isNewWindow && 'öppnas i nytt fönster',
].filter(Boolean).join(', '),
type: 'link',
};
}
function createFileData(node) {
const uri = Properties.get(node, 'rawURI');
const fileName = Properties.get(uri, 'fileName') || Properties.get(uri, 'displayName');
const isNewWindow = Properties.get(node, 'openInNewWindow');
const extension = fileName?.split('.')?.pop();
const size = ScriptUtil.getHumanPresentableSize(Properties.get(uri, 'length'))?.replace(' ', '');
return {
id: node.getIdentifier(),
name: Properties.get(node, 'displayName'),
uri: Properties.get(node, 'rawURI'),
size,
isNewWindow,
assistiveText: [
Properties.get(node, 'description'),
extension,
size,
isNewWindow && 'öppnas i nytt fönster',
].filter(Boolean).join(', '),
type: 'file',
};
}
function createUserData(node) {
return {
id: node.getIdentifier(),
name: Properties.get(node, 'displayName'),
uri: `mailto:${Properties.get(node, 'mail')}`,
icon: 'bi-person',
type: 'user',
};
}
function createData(value) {
if (isUser(value)) {
return createUserData(value);
}
if (isFile(value)) {
return createFileData(value);
}
if (isLink(value)) {
return createLinkData(value);
}
return { name: value };
}
export default function getRelatedMetadata(node, metadata) {
return MetadataUtil
.getRelatedMetadataPropertyValues(node, metadata)
.toArray()
.map(createData);
}

Exempel på användning:

index.js
import router from '@sitevision/api/common/router';
import appData from '@sitevision/api/server/appData';
import PortletContextUtil from '@sitevision/api/server/PortletContextUtil';
import getRelatedMetadata from './server/getRelatedMetadata';
router.get('/', (req, res) => {
const currentPage = PortletContextUtil.getCurrentPage();
const metadata = appData.get('relatedMetadata', 'name');
const relatedMetadata = getRelatedMetadata(currentPage, metadata);
// Do something with relatedMetadata
});