ochre-sdk 1.0.54 → 1.0.56

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -520,14 +520,14 @@ function parseWebElementProperties(componentProperty, elementResource, options,
520
520
  let width = null;
521
521
  const widthProperty = componentReader.value("width");
522
522
  if (widthProperty !== null) {
523
- if (typeof widthProperty === "number") width = widthProperty;
524
- else if (typeof widthProperty === "string") width = Number(widthProperty);
523
+ if (typeof widthProperty === "string") width = widthProperty;
524
+ else if (typeof widthProperty === "number") width = widthProperty.toString();
525
525
  }
526
526
  let height = null;
527
527
  const heightProperty = componentReader.value("height");
528
528
  if (heightProperty !== null) {
529
- if (typeof heightProperty === "number") height = heightProperty;
530
- else if (typeof heightProperty === "string") height = Number(heightProperty);
529
+ if (typeof heightProperty === "string") height = heightProperty;
530
+ else if (typeof heightProperty === "number") height = heightProperty.toString();
531
531
  }
532
532
  const isFullWidth = componentReader.valueOr("is-full-width", true);
533
533
  const isFullHeight = componentReader.valueOr("is-full-height", true);
@@ -1127,14 +1127,14 @@ function parseWebBlock(blockResource, options, context) {
1127
1127
  * @param properties - Array of raw website properties in OCHRE format
1128
1128
  * @returns Parsed WebsiteProperties object
1129
1129
  */
1130
- function parseWebsiteProperties(properties, websiteTree, sidebar, options) {
1130
+ function parseWebsiteProperties(properties, websiteTree, sidebar, options, parent) {
1131
1131
  const websiteReader = websitePresentationReader(parseSimplifiedProperties({ property: properties }, options)).nested("presentation");
1132
1132
  const returnProperties = {
1133
- type: websiteReader.valueOr("webUI", "traditional"),
1134
- status: websiteReader.valueOr("status", "development"),
1135
- versionLabel: websiteReader.valueOr("version-label", "release"),
1136
- privacy: websiteReader.valueOr("privacy", "public"),
1137
- contact: null,
1133
+ type: websiteReader.valueOr("webUI", parent?.type ?? "traditional"),
1134
+ status: websiteReader.valueOr("status", parent?.status ?? "development"),
1135
+ versionLabel: websiteReader.valueOr("version-label", parent?.versionLabel ?? "release"),
1136
+ privacy: websiteReader.valueOr("privacy", parent?.privacy ?? "public"),
1137
+ contact: parent?.contact ?? null,
1138
1138
  loadingVariant: "spinner",
1139
1139
  theme: {
1140
1140
  isThemeToggleDisplayed: true,
@@ -1151,33 +1151,33 @@ function parseWebsiteProperties(properties, websiteTree, sidebar, options) {
1151
1151
  alignment: "start",
1152
1152
  isProjectDisplayed: true,
1153
1153
  searchBarBoundElementUuid: null,
1154
- items: null
1154
+ items: parent?.navbar.items ?? null
1155
1155
  },
1156
1156
  footer: {
1157
1157
  isDisplayed: true,
1158
1158
  logoUuid: null,
1159
- items: null
1159
+ items: parent?.footer.items ?? null
1160
1160
  },
1161
- sidebar,
1161
+ sidebar: sidebar ?? parent?.sidebar ?? null,
1162
1162
  itemPage: {
1163
- isMainContentDisplayed: true,
1164
- isDescriptionDisplayed: true,
1165
- isDocumentDisplayed: true,
1166
- isNotesDisplayed: true,
1167
- isEventsDisplayed: true,
1168
- isPeriodsDisplayed: true,
1169
- isPropertiesDisplayed: true,
1170
- isBibliographyDisplayed: true,
1171
- isPropertyValuesGrouped: true,
1172
- isPublicationDateTimeDisplayed: true,
1173
- isPersistentIdentifierDisplayed: true,
1174
- iiifViewer: "universal-viewer"
1163
+ isMainContentDisplayed: parent?.itemPage.isMainContentDisplayed ?? true,
1164
+ isDescriptionDisplayed: parent?.itemPage.isDescriptionDisplayed ?? true,
1165
+ isDocumentDisplayed: parent?.itemPage.isDocumentDisplayed ?? true,
1166
+ isNotesDisplayed: parent?.itemPage.isNotesDisplayed ?? true,
1167
+ isEventsDisplayed: parent?.itemPage.isEventsDisplayed ?? true,
1168
+ isPeriodsDisplayed: parent?.itemPage.isPeriodsDisplayed ?? true,
1169
+ isPropertiesDisplayed: parent?.itemPage.isPropertiesDisplayed ?? true,
1170
+ isBibliographyDisplayed: parent?.itemPage.isBibliographyDisplayed ?? true,
1171
+ isPropertyValuesGrouped: parent?.itemPage.isPropertyValuesGrouped ?? true,
1172
+ isPublicationDateTimeDisplayed: parent?.itemPage.isPublicationDateTimeDisplayed ?? true,
1173
+ isPersistentIdentifierDisplayed: parent?.itemPage.isPersistentIdentifierDisplayed ?? true,
1174
+ iiifViewer: parent?.itemPage.iiifViewer ?? "universal-viewer"
1175
1175
  },
1176
1176
  options: {
1177
- contextTree: null,
1178
- scopes: null,
1179
- labels: { title: null },
1180
- stylesheets: { properties: [] }
1177
+ contextTree: parent?.options.contextTree ?? null,
1178
+ scopes: parent?.options.scopes ?? null,
1179
+ labels: { title: parent?.options.labels.title ?? null },
1180
+ stylesheets: { properties: parent?.options.stylesheets.properties ?? [] }
1181
1181
  }
1182
1182
  };
1183
1183
  const contactProperty = websiteReader.property("contact");
@@ -1189,41 +1189,44 @@ function parseWebsiteProperties(properties, websiteTree, sidebar, options) {
1189
1189
  };
1190
1190
  else throw new Error(`Contact property must use “name;email”, got “${contactProperty.values[0]?.content}” (website uuid “${websiteTree.uuid}”)`, { cause: websiteTree });
1191
1191
  }
1192
- returnProperties.loadingVariant = websiteReader.valueOr("loading-variant", "spinner");
1193
- returnProperties.theme.isThemeToggleDisplayed = websiteReader.valueOr("supports-theme-toggle", true);
1194
- returnProperties.theme.defaultTheme = websiteReader.valueOr("default-theme", "system");
1195
- returnProperties.icon.logoUuid = websiteReader.uuid("navbar-logo");
1196
- returnProperties.icon.faviconUuid = websiteReader.uuid("favicon-ico");
1197
- returnProperties.icon.appleTouchIconUuid = websiteReader.uuid("favicon-img");
1198
- returnProperties.navbar.isDisplayed = websiteReader.valueOr("navbar-displayed", true);
1199
- returnProperties.navbar.variant = websiteReader.valueOr("navbar-variant", "default");
1200
- returnProperties.navbar.alignment = websiteReader.valueOr("navbar-alignment", "start");
1201
- returnProperties.navbar.isProjectDisplayed = websiteReader.valueOr("navbar-project-displayed", true);
1202
- returnProperties.navbar.searchBarBoundElementUuid = websiteReader.uuid("bound-element-navbar-search-bar");
1203
- returnProperties.footer.isDisplayed = websiteReader.valueOr("footer-displayed", true);
1204
- returnProperties.footer.logoUuid = websiteReader.uuid("footer-logo");
1192
+ returnProperties.loadingVariant = websiteReader.valueOr("loading-variant", parent?.loadingVariant ?? "spinner");
1193
+ returnProperties.theme.isThemeToggleDisplayed = websiteReader.valueOr("supports-theme-toggle", parent?.theme.isThemeToggleDisplayed ?? true);
1194
+ returnProperties.theme.defaultTheme = websiteReader.valueOr("default-theme", parent?.theme.defaultTheme ?? "system");
1195
+ returnProperties.icon.logoUuid = websiteReader.uuid("navbar-logo") ?? parent?.icon.logoUuid ?? null;
1196
+ returnProperties.icon.faviconUuid = websiteReader.uuid("favicon-ico") ?? parent?.icon.faviconUuid ?? null;
1197
+ returnProperties.icon.appleTouchIconUuid = websiteReader.uuid("favicon-img") ?? parent?.icon.appleTouchIconUuid ?? null;
1198
+ returnProperties.navbar.isDisplayed = websiteReader.valueOr("navbar-displayed", parent?.navbar.isDisplayed ?? true);
1199
+ returnProperties.navbar.variant = websiteReader.valueOr("navbar-variant", parent?.navbar.variant ?? "default");
1200
+ returnProperties.navbar.alignment = websiteReader.valueOr("navbar-alignment", parent?.navbar.alignment ?? "start");
1201
+ returnProperties.navbar.isProjectDisplayed = websiteReader.valueOr("navbar-project-displayed", parent?.navbar.isProjectDisplayed ?? true);
1202
+ returnProperties.navbar.searchBarBoundElementUuid = websiteReader.uuid("bound-element-navbar-search-bar") ?? parent?.navbar.searchBarBoundElementUuid ?? null;
1203
+ returnProperties.footer.isDisplayed = websiteReader.valueOr("footer-displayed", parent?.footer.isDisplayed ?? true);
1204
+ returnProperties.footer.logoUuid = websiteReader.uuid("footer-logo") ?? parent?.footer.logoUuid ?? null;
1205
1205
  const itemPageReader = websiteReader.nestedByValue("page-type", "item-page");
1206
1206
  if (itemPageReader.size > 0) {
1207
- returnProperties.itemPage.isMainContentDisplayed = itemPageReader.valueOr("item-page-main-content-displayed", true);
1208
- returnProperties.itemPage.isDescriptionDisplayed = itemPageReader.valueOr("item-page-description-displayed", true);
1209
- returnProperties.itemPage.isDocumentDisplayed = itemPageReader.valueOr("item-page-document-displayed", true);
1210
- returnProperties.itemPage.isNotesDisplayed = itemPageReader.valueOr("item-page-notes-displayed", true);
1211
- returnProperties.itemPage.isEventsDisplayed = itemPageReader.valueOr("item-page-events-displayed", true);
1212
- returnProperties.itemPage.isPeriodsDisplayed = itemPageReader.valueOr("item-page-periods-displayed", true);
1213
- returnProperties.itemPage.isPropertiesDisplayed = itemPageReader.valueOr("item-page-properties-displayed", true);
1214
- returnProperties.itemPage.isBibliographyDisplayed = itemPageReader.valueOr("item-page-bibliography-displayed", true);
1215
- returnProperties.itemPage.isPropertyValuesGrouped = itemPageReader.valueOr("item-page-property-values-grouped", true);
1216
- returnProperties.itemPage.isPublicationDateTimeDisplayed = itemPageReader.valueOr("item-page-publication-date-time-displayed", true);
1217
- returnProperties.itemPage.isPersistentIdentifierDisplayed = itemPageReader.valueOr("item-page-persistent-identifier-displayed", true);
1218
- returnProperties.itemPage.iiifViewer = itemPageReader.valueOr("item-page-iiif-viewer", "universal-viewer");
1207
+ returnProperties.itemPage.isMainContentDisplayed = itemPageReader.valueOr("item-page-main-content-displayed", returnProperties.itemPage.isMainContentDisplayed);
1208
+ returnProperties.itemPage.isDescriptionDisplayed = itemPageReader.valueOr("item-page-description-displayed", returnProperties.itemPage.isDescriptionDisplayed);
1209
+ returnProperties.itemPage.isDocumentDisplayed = itemPageReader.valueOr("item-page-document-displayed", returnProperties.itemPage.isDocumentDisplayed);
1210
+ returnProperties.itemPage.isNotesDisplayed = itemPageReader.valueOr("item-page-notes-displayed", returnProperties.itemPage.isNotesDisplayed);
1211
+ returnProperties.itemPage.isEventsDisplayed = itemPageReader.valueOr("item-page-events-displayed", returnProperties.itemPage.isEventsDisplayed);
1212
+ returnProperties.itemPage.isPeriodsDisplayed = itemPageReader.valueOr("item-page-periods-displayed", returnProperties.itemPage.isPeriodsDisplayed);
1213
+ returnProperties.itemPage.isPropertiesDisplayed = itemPageReader.valueOr("item-page-properties-displayed", returnProperties.itemPage.isPropertiesDisplayed);
1214
+ returnProperties.itemPage.isBibliographyDisplayed = itemPageReader.valueOr("item-page-bibliography-displayed", returnProperties.itemPage.isBibliographyDisplayed);
1215
+ returnProperties.itemPage.isPropertyValuesGrouped = itemPageReader.valueOr("item-page-property-values-grouped", returnProperties.itemPage.isPropertyValuesGrouped);
1216
+ returnProperties.itemPage.isPublicationDateTimeDisplayed = itemPageReader.valueOr("item-page-publication-date-time-displayed", returnProperties.itemPage.isPublicationDateTimeDisplayed);
1217
+ returnProperties.itemPage.isPersistentIdentifierDisplayed = itemPageReader.valueOr("item-page-persistent-identifier-displayed", returnProperties.itemPage.isPersistentIdentifierDisplayed);
1218
+ returnProperties.itemPage.iiifViewer = itemPageReader.valueOr("item-page-iiif-viewer", returnProperties.itemPage.iiifViewer);
1219
1219
  }
1220
1220
  if (websiteTree.options != null) {
1221
1221
  const parsedOptions = parseWebsiteOptions(websiteTree.options, options);
1222
- returnProperties.options.scopes = parsedOptions.scopes;
1223
- returnProperties.options.contextTree = parsedOptions.contextTree;
1224
- returnProperties.options.labels = parsedOptions.labels;
1222
+ returnProperties.options.scopes = (parsedOptions.scopes != null && parsedOptions.scopes.length > 0 ? parsedOptions : returnProperties.options).scopes;
1223
+ returnProperties.options.contextTree = parsedOptions.contextTree ?? returnProperties.options.contextTree;
1224
+ returnProperties.options.labels = { title: parsedOptions.labels.title ?? returnProperties.options.labels.title };
1225
+ }
1226
+ if ("styleOptions" in websiteTree && websiteTree.styleOptions != null) {
1227
+ const stylesheetProperties = parseStylesheets(websiteTree.styleOptions.style);
1228
+ if (stylesheetProperties.length > 0) returnProperties.options.stylesheets.properties = stylesheetProperties;
1225
1229
  }
1226
- if ("styleOptions" in websiteTree && websiteTree.styleOptions != null) returnProperties.options.stylesheets.properties = parseStylesheets(websiteTree.styleOptions.style);
1227
1230
  return returnProperties;
1228
1231
  }
1229
1232
  function parseContextItem(contextItemToParse, options) {
@@ -1303,7 +1306,8 @@ function parseWebsiteTree(websiteTree, context, type, options, slugPrefix) {
1303
1306
  pageSlugsByUuid
1304
1307
  };
1305
1308
  const sidebar = parseSidebar(resources, options, treeContext);
1306
- const properties = parseWebsiteProperties(websiteTree.properties.property, websiteTree, sidebar, options);
1309
+ const properties = parseWebsiteProperties(websiteTree.properties.property, websiteTree, sidebar, options, context.parentProperties ?? null);
1310
+ const license = parseLicense(websiteTree.availability) ?? context.parentLicense ?? null;
1307
1311
  return {
1308
1312
  uuid: websiteTree.uuid,
1309
1313
  type,
@@ -1312,8 +1316,12 @@ function parseWebsiteTree(websiteTree, context, type, options, slugPrefix) {
1312
1316
  publicationDateTime: websiteTree.publicationDateTime ?? null,
1313
1317
  identification: parseIdentification(websiteTree.identification, options),
1314
1318
  creators: websiteTree.creators ? parsePersonList(websiteTree.creators.creator, options) : [],
1315
- license: parseLicense(websiteTree.availability),
1316
- items: parseWebpages(resources, options, treeContext, slugPrefix),
1319
+ license,
1320
+ items: parseWebpages(resources, options, {
1321
+ ...treeContext,
1322
+ parentProperties: properties,
1323
+ parentLicense: license
1324
+ }, slugPrefix),
1317
1325
  properties
1318
1326
  };
1319
1327
  }
@@ -345,8 +345,8 @@ type WebElementComponent<T extends LanguageCodes = LanguageCodes> = {
345
345
  component: "image";
346
346
  images: Array<WebImage<T>>;
347
347
  variant: "default" | "carousel" | "grid" | "hero";
348
- width: number | null;
349
- height: number | null;
348
+ width: string | null;
349
+ height: string | null;
350
350
  isFullWidth: boolean;
351
351
  isFullHeight: boolean;
352
352
  imageQuality: "high" | "low";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ochre-sdk",
3
- "version": "1.0.54",
3
+ "version": "1.0.56",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "description": "Node.js library for working with OCHRE (Online Cultural and Historical Research Environment) data",