scrivito
Version:
Scrivito is a professional, yet easy to use SaaS Enterprise Content Management Service, built for digital agencies and medium to large businesses. It is completely maintenance-free, cost-effective, and has unprecedented performance and security.
42 lines (38 loc) • 1.37 kB
text/typescript
// @rewire
import { pruneString } from 'scrivito_sdk/common';
import { BasicObj, BasicWidget } from 'scrivito_sdk/models';
import { Schema } from 'scrivito_sdk/realm';
import { extractBlobText } from './extract_blob_text';
import { ExtractCollector } from './extract_collector';
import { extractTextFromBasicObjOrWidget } from './extract_text_from_basic_obj_or_widget';
import { extractWidgetlist } from './extract_widgetlist';
import { removeHtmlTags } from './remove_html_tags';
export function extractAttribute(
objOrWidget: BasicObj | BasicWidget,
schema: Schema,
attribute: string,
collector: ExtractCollector
): void {
if (attribute === 'blob:text') {
return collector.push(extractBlobText(objOrWidget));
}
const definition = schema.attribute(attribute);
if (!definition) return;
const [attributeType] = definition;
switch (attributeType) {
case 'html':
collector.push(removeHtmlTags(objOrWidget.get(attribute, 'html')));
break;
case 'string':
collector.push(pruneString(objOrWidget.get(attribute, 'string')));
break;
case 'widget': {
const widget = objOrWidget.get(attribute, 'widget');
if (widget) extractTextFromBasicObjOrWidget(widget, collector);
break;
}
case 'widgetlist':
extractWidgetlist(objOrWidget.get(attribute, 'widgetlist'), collector);
break;
}
}