templates/api/model-viewer.html.twig line 1

Open in your IDE?
  1. {% extends 'layout/master-service.html.twig' %}
  2. {% block ogtags %}
  3. {% if title is defined %}
  4. <meta property="og:title" content="{{ title }}" />
  5. {% endif %}
  6. {% if modelThumb is defined %}
  7.         <meta property="og:image" content="{{ modelThumb }}" />
  8. {% endif %}
  9. {% endblock %}
  10. {% block styles %}
  11.     {{ encore_entry_link_tags('modelViewer') }}
  12. {% endblock %}
  13. {% block content %}
  14.     <div id="serviceError">
  15.         <div id="serviceErrorMessage"></div>
  16.     </div>
  17.     <div id="modelViewerLogo"></div>
  18.     <div id="modelViewerContainer"></div>
  19. {% endblock %}
  20. {% block javascripts %}
  21.     <script>
  22.         const viewerContainer = document.getElementById('modelViewerContainer');
  23.         const errorContainer =  document.getElementById('serviceError');
  24.         const errorMessage =  document.getElementById('serviceErrorMessage');
  25.         const logo = document.getElementById('modelViewerLogo');
  26.         {% if error is defined %}
  27.             viewerContainer.style.display = 'none';
  28.             let errorMessageText = document.createTextNode("{{ error }}");
  29.             errorMessage.appendChild(errorMessageText);
  30.         {% else %}
  31.             let modelConfig = {{ modelConfig|raw }};
  32.             let viewerConfig = {{ viewerConfig|raw  }};
  33.             let uiConfig = {{ uiConfig|raw  }};
  34.             let shouldDisplay = true;
  35.             // check if subscription expired
  36.             {% if expired is defined and expired == true %}
  37.                 viewerContainer.style.display = 'none';
  38.                 let errorMessageText = document.createTextNode("Subscription Has Expired.");
  39.                 errorMessage.appendChild(errorMessageText);
  40.                 shouldDisplay = false;
  41.             {% endif %}
  42.             // check if domain is entered
  43.             let userDomains = {{ domains|raw }};
  44.             if (userDomains.length === 0){
  45.                 viewerContainer.style.display = 'none';
  46.                 let errorMessageText = document.createTextNode(" Service Not Active. Please Add Domain To Your Account.");
  47.                 errorMessage.appendChild(errorMessageText);
  48.                 shouldDisplay = false;
  49.             }
  50.             const localhostDomains = [
  51.                 'localhost',
  52.                 '127.0.0.1',
  53.                 'llink.to',
  54.                 'myshopify',
  55.                 'shopifypreview'
  56.             ];
  57.             const allowedDomains = localhostDomains.concat(userDomains);
  58.             // get parent origin domain
  59.             let originFullDomain;
  60.             if (typeof location.ancestorOrigins !== 'undefined'){
  61.                 originFullDomain = location.ancestorOrigins[0]
  62.             } else if (typeof document.referrer !== 'undefined'){
  63.                 originFullDomain = document.referrer;
  64.             } else {
  65.                 originFullDomain = null;
  66.             }
  67.             if (originFullDomain !== null && typeof originFullDomain !== 'undefined' && originFullDomain !== '') {
  68.                 const originDomain = getDomain(originFullDomain);
  69.                 let accessAllowed = false;
  70.                 allowedDomains.forEach(domain => {
  71.                     if (originDomain.includes(domain)){
  72.                         accessAllowed = true;
  73.                     }
  74.                 });
  75.                 if (originDomain.startsWith('192.')) {
  76.                     accessAllowed = true;
  77.                 }
  78.                 if (!accessAllowed){
  79.                     viewerContainer.style.display = 'none';
  80.                     let errorMessageText = document.createTextNode(" Domain isn’t correct. Please Validate Your Domain Name.");
  81.                     errorMessage.appendChild(errorMessageText);
  82.                     shouldDisplay = false;
  83.                 }
  84.             }
  85.             if (shouldDisplay){
  86.                 // check hide logo
  87.                 {% if hideLogo is defined and hideLogo == true %}
  88.                 logo.style.display = 'none';
  89.                 {% endif %}
  90.                 errorContainer.style.display = 'none';
  91.             }
  92.         {% endif %}
  93.         function getDomain(input){
  94.             let output = input.replace(/(^\w+:|^)\/\//, '').replaceAll('/','');
  95.             if (output.indexOf(':') !== -1){
  96.                 let domainParts = output.split(':');
  97.                 output = domainParts[0];
  98.             }
  99.             if (output.indexOf('?') !== -1){
  100.                 let domainParts = output.split('?');
  101.                 output = domainParts[0];
  102.             }
  103.             return output;
  104.         }
  105.     </script>
  106.     {% if error is not defined %}
  107.     {# 
  108.         TODO 
  109.         Viewer crashes webpack build if unminfied, when minified it does not iniialize.
  110.         This is temparary replacement until the issue is fixed.
  111.         Vanja 07.09.2023
  112.     #}
  113. {#     {{ encore_entry_script_tags('modelViewer') }}#}
  114.     <script src="{{ asset('presentation/model-viewer.iife.js') }}"></script>
  115.     <script>
  116.         let modelViewer = new ModelViewer(viewerConfig, uiConfig);
  117.         modelViewer.loadModelConfig(modelConfig, () => {
  118.           console.log('======== Model loaded ==========')
  119.         })
  120.     </script>
  121.     {% endif %}
  122. {% endblock %}