kentico-cloud-delivery-js-sdk-symbio
Version:
Unofficial SDK for the Kentico Cloud Delivery API
90 lines (76 loc) • 3.03 kB
JavaScript
import 'regenerator-runtime/runtime'
import cheerio from 'cheerio'
export default function getValuesWithoutConfig (content, depth = 0) {
return {
items: content['items'].map(item => getValuesForContent(item, content, depth)),
pagination: content['pagination']
}
}
export function getValuesForContent (item, content, depth) {
const tempObject = {
system: item.system,
elements: {}
}
for (const keyElement in item.elements) {
var itemType = item.elements[keyElement].type
if (itemType === 'modular_content') {
tempObject.elements[keyElement] = []
for (const itemModular of item.elements[keyElement].value) {
if (content['modular_content'].hasOwnProperty(itemModular) && depth > 0) {
tempObject.elements[keyElement].push(getValuesForContent(content['modular_content'][itemModular], content, depth - 1))
} else {
tempObject.elements[keyElement].push(itemModular)
}
}
} else {
if (itemType === 'asset') {
tempObject.elements[keyElement] = item.elements[keyElement] && item.elements[keyElement].value ? item.elements[keyElement].value : []
} else if (itemType === 'multiple_choice' || itemType === 'taxonomy') {
tempObject.elements[keyElement] = getArrayValues(tempObject.elements[keyElement], item.elements[keyElement], 'codename')
} else if (itemType === 'rich_text' && item.elements[keyElement].modular_content.length > 0) {
tempObject.elements[keyElement] = getRichTextModularContent(item.elements[keyElement], content, depth)
} else {
tempObject.elements[keyElement] = item.elements[keyElement].value
}
}
}
return tempObject
}
function getArrayValues (temp, assets, property) {
temp = []
assets.value.forEach((item, index) => {
temp.push(item[property])
})
return temp
}
function getRichTextModularContent (data, content, depth) {
let text = data.value
const $ = cheerio.load(text)
data.modular_content.forEach((itemKey, index) => {
if (content['modular_content'].hasOwnProperty(itemKey) && depth > 0) {
const item = content['modular_content'][itemKey];
const value = getValuesForContent(item, content, depth - 1);
$('object[data-codename="' + itemKey + '"]').attr('value', JSON.stringify(value))
} else {
$('object[data-codename="' + itemKey + '"]').attr('value', JSON.stringify(itemKey))
}
text = $.html()
})
return text.replace('<html><head></head><body>', '').replace('</body></html>', '')
}
function resolveModularContent(data, modularContent) {
if (data.hasOwnProperty('elements')) {
for (const key in data.elements) {
if (data.elements[key].type === 'modular_content') {
const value = data.elements[key].value.map(codename => {
if (modularContent.hasOwnProperty(codename)) {
return modularContent[codename]
}
return codename;
});
data.elements[key].value = value;
}
}
}
return data;
}