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.
75 lines (60 loc) • 1.88 kB
text/typescript
import { onReset } from 'scrivito_sdk/common';
import { setCurrentWorkspaceId } from 'scrivito_sdk/models';
let inPlaceEditingActive = false;
let comparisonActive = false;
/** tries to initialize the editing context from the window name
*
* returns true if an editing context was found and initialized
*/
export function initializeEditingContextFromBrowsingContext(
browsingContextName: string
): boolean {
const editingContext = editingContextFromBrowsingContext(browsingContextName);
if (!editingContext.workspaceId) {
setCurrentWorkspaceId('published');
return false;
}
setCurrentWorkspaceId(editingContext.workspaceId);
inPlaceEditingActive = !!editingContext.inPlaceEditingActive;
comparisonActive = !inPlaceEditingActive && !!editingContext.comparisonActive;
return true;
}
function editingContextFromBrowsingContext(
browsingContextName: string
): EditingContext {
const markerIndex = browsingContextName.indexOf(' _scrivito {');
if (markerIndex === -1) return {};
const { editing, comparison, workspaceId } = JSON.parse(
browsingContextName.substring(markerIndex + 11)
);
return {
workspaceId,
inPlaceEditingActive: !!editing,
comparisonActive: !!comparison,
};
}
interface EditingContext {
workspaceId?: string;
inPlaceEditingActive?: boolean;
comparisonActive?: boolean;
}
/** @public */
export function isInPlaceEditingActive(): boolean {
return inPlaceEditingActive;
}
/** @public */
export function isComparisonActive(): boolean {
return comparisonActive;
}
// For test purposes only
export function setIsInPlaceEditingActive(isActive: boolean) {
inPlaceEditingActive = isActive;
}
// For test purposes only
export function setIsComparisonActive(isActive: boolean) {
comparisonActive = isActive;
}
onReset(() => {
inPlaceEditingActive = false;
comparisonActive = false;
});