{% extends 'layout/master-service.html.twig' %}
{% block ogtags %}
{% if title is defined %}
<meta property="og:title" content="{{ title }}" />
{% endif %}
{% if modelThumb is defined %}
<meta property="og:image" content="{{ modelThumb }}" />
{% endif %}
{% endblock %}
{% block styles %}
{{ encore_entry_link_tags('modelViewer') }}
{% endblock %}
{% block content %}
<div id="serviceError">
<div id="serviceErrorMessage"></div>
</div>
<div id="modelViewerLogo"></div>
<div id="modelViewerContainer"></div>
{% endblock %}
{% block javascripts %}
<script>
const viewerContainer = document.getElementById('modelViewerContainer');
const errorContainer = document.getElementById('serviceError');
const errorMessage = document.getElementById('serviceErrorMessage');
const logo = document.getElementById('modelViewerLogo');
{% if error is defined %}
viewerContainer.style.display = 'none';
let errorMessageText = document.createTextNode("{{ error }}");
errorMessage.appendChild(errorMessageText);
{% else %}
let modelConfig = {{ modelConfig|raw }};
let viewerConfig = {{ viewerConfig|raw }};
let uiConfig = {{ uiConfig|raw }};
let shouldDisplay = true;
// check if subscription expired
{% if expired is defined and expired == true %}
viewerContainer.style.display = 'none';
let errorMessageText = document.createTextNode("Subscription Has Expired.");
errorMessage.appendChild(errorMessageText);
shouldDisplay = false;
{% endif %}
// check if domain is entered
let userDomains = {{ domains|raw }};
if (userDomains.length === 0){
viewerContainer.style.display = 'none';
let errorMessageText = document.createTextNode(" Service Not Active. Please Add Domain To Your Account.");
errorMessage.appendChild(errorMessageText);
shouldDisplay = false;
}
const localhostDomains = [
'localhost',
'127.0.0.1',
'llink.to',
'myshopify',
'shopifypreview'
];
const allowedDomains = localhostDomains.concat(userDomains);
// get parent origin domain
let originFullDomain;
if (typeof location.ancestorOrigins !== 'undefined'){
originFullDomain = location.ancestorOrigins[0]
} else if (typeof document.referrer !== 'undefined'){
originFullDomain = document.referrer;
} else {
originFullDomain = null;
}
if (originFullDomain !== null && typeof originFullDomain !== 'undefined' && originFullDomain !== '') {
const originDomain = getDomain(originFullDomain);
let accessAllowed = false;
allowedDomains.forEach(domain => {
if (originDomain.includes(domain)){
accessAllowed = true;
}
});
if (originDomain.startsWith('192.')) {
accessAllowed = true;
}
if (!accessAllowed){
viewerContainer.style.display = 'none';
let errorMessageText = document.createTextNode(" Domain isn’t correct. Please Validate Your Domain Name.");
errorMessage.appendChild(errorMessageText);
shouldDisplay = false;
}
}
if (shouldDisplay){
// check hide logo
{% if hideLogo is defined and hideLogo == true %}
logo.style.display = 'none';
{% endif %}
errorContainer.style.display = 'none';
}
{% endif %}
function getDomain(input){
let output = input.replace(/(^\w+:|^)\/\//, '').replaceAll('/','');
if (output.indexOf(':') !== -1){
let domainParts = output.split(':');
output = domainParts[0];
}
if (output.indexOf('?') !== -1){
let domainParts = output.split('?');
output = domainParts[0];
}
return output;
}
</script>
{% if error is not defined %}
{#
TODO
Viewer crashes webpack build if unminfied, when minified it does not iniialize.
This is temparary replacement until the issue is fixed.
Vanja 07.09.2023
#}
{# {{ encore_entry_script_tags('modelViewer') }}#}
<script src="{{ asset('presentation/model-viewer.iife.js') }}"></script>
<script>
let modelViewer = new ModelViewer(viewerConfig, uiConfig);
modelViewer.loadModelConfig(modelConfig, () => {
console.log('======== Model loaded ==========')
})
</script>
{% endif %}
{% endblock %}