Initial commit
This commit is contained in:
commit
05c65aad4d
155 changed files with 93617 additions and 0 deletions
192
viewer/editor/metadata-persistence.js
Normal file
192
viewer/editor/metadata-persistence.js
Normal file
|
|
@ -0,0 +1,192 @@
|
|||
import THREE from "../init.js";
|
||||
import { core } from "../core.js";
|
||||
import { toastHelper } from "../viewer-utils.js";
|
||||
|
||||
function pickMetadataValue(save, current, original) {
|
||||
return save ? current : original;
|
||||
}
|
||||
|
||||
export function buildEditorMetadata(viewer, rotateMetadata) {
|
||||
const originalMetadata = viewer.originalMetadata;
|
||||
const saveProperties = viewer.saveProperties;
|
||||
const metadata = {};
|
||||
|
||||
metadata.objPosition = pickMetadataValue(
|
||||
saveProperties.Position,
|
||||
[
|
||||
core.helperObjects[0].position.x,
|
||||
core.helperObjects[0].position.y,
|
||||
core.helperObjects[0].position.z
|
||||
],
|
||||
originalMetadata.objPosition
|
||||
);
|
||||
|
||||
metadata.objRotation = pickMetadataValue(
|
||||
saveProperties.Rotation,
|
||||
[rotateMetadata.x, rotateMetadata.y, rotateMetadata.z],
|
||||
originalMetadata.objRotation
|
||||
);
|
||||
|
||||
metadata.objScale = pickMetadataValue(
|
||||
saveProperties.Scale,
|
||||
[
|
||||
core.helperObjects[0].scale.x,
|
||||
core.helperObjects[0].scale.y,
|
||||
core.helperObjects[0].scale.z
|
||||
],
|
||||
originalMetadata.objScale
|
||||
);
|
||||
|
||||
metadata.cameraPosition = pickMetadataValue(
|
||||
saveProperties.Camera,
|
||||
[
|
||||
core.camera.position.x,
|
||||
core.camera.position.y,
|
||||
core.camera.position.z
|
||||
],
|
||||
originalMetadata.cameraPosition
|
||||
);
|
||||
|
||||
metadata.controlsTarget = pickMetadataValue(
|
||||
saveProperties.Camera,
|
||||
[
|
||||
core.controls.target.x,
|
||||
core.controls.target.y,
|
||||
core.controls.target.z
|
||||
],
|
||||
originalMetadata.controlsTarget
|
||||
);
|
||||
|
||||
metadata.controlsZoom = pickMetadataValue(
|
||||
saveProperties.Camera,
|
||||
[
|
||||
core.camera.position.distanceTo(core.controls.target)
|
||||
],
|
||||
originalMetadata.controlsZoom
|
||||
);
|
||||
|
||||
metadata.lightPosition = pickMetadataValue(
|
||||
saveProperties.DirectionalLight,
|
||||
[
|
||||
core.dirLight.position.x,
|
||||
core.dirLight.position.y,
|
||||
core.dirLight.position.z
|
||||
],
|
||||
originalMetadata.lightPosition
|
||||
);
|
||||
|
||||
metadata.lightTarget = pickMetadataValue(
|
||||
saveProperties.DirectionalLight,
|
||||
[
|
||||
core.dirLight.rotation._x,
|
||||
core.dirLight.rotation._y,
|
||||
core.dirLight.rotation._z
|
||||
],
|
||||
originalMetadata.lightTarget
|
||||
);
|
||||
|
||||
metadata.lightColor = pickMetadataValue(
|
||||
saveProperties.DirectionalLight,
|
||||
["#" + core.dirLight.color.getHexString().toUpperCase()],
|
||||
originalMetadata.lightColor
|
||||
);
|
||||
|
||||
metadata.lightIntensity = pickMetadataValue(
|
||||
saveProperties.DirectionalLight,
|
||||
[core.dirLight.intensity],
|
||||
originalMetadata.lightIntensity
|
||||
);
|
||||
|
||||
metadata.lightAmbientColor = pickMetadataValue(
|
||||
saveProperties.AmbientLight,
|
||||
["#" + core.ambientLight.color.getHexString().toUpperCase()],
|
||||
originalMetadata.lightAmbientColor
|
||||
);
|
||||
|
||||
metadata.lightAmbientIntensity = pickMetadataValue(
|
||||
saveProperties.AmbientLight,
|
||||
[core.ambientLight.intensity],
|
||||
originalMetadata.lightAmbientIntensity
|
||||
);
|
||||
|
||||
metadata.lightCameraColor = pickMetadataValue(
|
||||
saveProperties.CameraLight,
|
||||
["#" + core.cameraLight.color.getHexString().toUpperCase()],
|
||||
originalMetadata.lightCameraColor
|
||||
);
|
||||
|
||||
metadata.lightCameraIntensity = pickMetadataValue(
|
||||
saveProperties.CameraLight,
|
||||
[core.cameraLight.intensity],
|
||||
originalMetadata.lightCameraIntensity
|
||||
);
|
||||
|
||||
metadata.background = saveProperties.BackgroundColor
|
||||
? [window.getComputedStyle(viewer.mainCanvas).background]
|
||||
: originalMetadata.background;
|
||||
|
||||
metadata.annotationEntries = viewer.getAnnotationEntriesForPersistence();
|
||||
metadata.iiifAnnotationsXml = viewer.exportAnnotationsToIIIFXml();
|
||||
|
||||
return metadata;
|
||||
}
|
||||
|
||||
export async function saveEditorMetadata(viewer) {
|
||||
if (!core.EDITOR || core.isLightweight || !core.helperObjects?.[0]) return;
|
||||
|
||||
const rotateMetadata = new THREE.Vector3(
|
||||
THREE.MathUtils.radToDeg(core.helperObjects[0].rotation.x),
|
||||
THREE.MathUtils.radToDeg(core.helperObjects[0].rotation.y),
|
||||
THREE.MathUtils.radToDeg(core.helperObjects[0].rotation.z)
|
||||
);
|
||||
|
||||
if (core.CONFIG.entity.proxyPath !== undefined) {
|
||||
core.CONFIG.metadataUrl = core.getProxyPath(core.CONFIG.metadataUrl);
|
||||
}
|
||||
|
||||
let fetchedMetadata = {};
|
||||
|
||||
try {
|
||||
if (core.CONFIG?.metadataUrl) {
|
||||
const response = await fetch(core.CONFIG.metadataUrl, { cache: "no-cache" });
|
||||
if (response.ok) {
|
||||
fetchedMetadata = await response.json();
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
console.warn("Metadata fetch failed, continuing with save", err);
|
||||
}
|
||||
|
||||
viewer.originalMetadata = {
|
||||
...viewer.originalMetadata,
|
||||
...fetchedMetadata
|
||||
};
|
||||
|
||||
const newMetadata = buildEditorMetadata(viewer, rotateMetadata);
|
||||
|
||||
try {
|
||||
const token = await fetch("/session/token").then((response) => response.text());
|
||||
|
||||
await fetch(core.CONFIG.mainUrl + "/api/editor/save-metadata", {
|
||||
method: "POST",
|
||||
credentials: "same-origin",
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
"X-CSRF-Token": token
|
||||
},
|
||||
body: JSON.stringify({
|
||||
filename: core.fileObject.filename,
|
||||
path:
|
||||
viewer.archiveType !== ""
|
||||
? core.fileObject.relativePath + core.fileObject.basename + core.loadedFile
|
||||
: core.fileObject.relativePath,
|
||||
content: JSON.stringify(newMetadata, null, "\t")
|
||||
})
|
||||
});
|
||||
|
||||
toastHelper("settingsSaved", "success");
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
toastHelper("settingsSaveError", "error");
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue