Skip to content
Snippets Groups Projects
_scripts.html.j2 6.74 KiB
<script src="https://cdnjs.cloudflare.com/ajax/libs/fast-json-patch/3.1.1/fast-json-patch.min.js" integrity="sha512-5uDdefwnzyq4N+SkmMBmekZLZNmc6dLixvVxCdlHBfqpyz0N3bzLdrJ55OLm7QrZmgZuhLGgHLDtJwU6RZoFCA==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/list.js/2.3.1/list.min.js" integrity="sha512-93wYgwrIFL+b+P3RvYxi/WUFRXXUDSLCT2JQk9zhVGXuS2mHl2axj6d+R6pP+gcU5isMHRj1u0oYE/mWyt/RjA==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.7.1/socket.io.min.js" integrity="sha512-+NaO7d6gQ1YPxvc/qHIqZEchjGm207SszoNeMgppoqD/67fEqmc1edS8zrbxPD+4RQI3gDgT/83ihpFW61TG/Q==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/plotly.js/2.24.2/plotly.min.js" integrity="sha512-dAXqGCq94D0kgLSPnfvd/pZpCMoJQpGj2S2XQmFQ9Ay1+96kbjss02ISEh+TBNXMggGg/1qoMcOHcxg+Op/Jmw==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/pako/2.1.0/pako_inflate.min.js" integrity="sha512-mlnC6JeOvg9V4vBpWMxGKscsCdScB6yvGVCeFF2plnQMRmwH69s9F8SHPbC0oirqfePmRBhqx2s3Bx7WIvHfWg==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>

{%- assets
  filters='rjsmin',
  output='gen/app.%(version)s.js',
  'js/App.js',
  'js/Utils.js',
  'js/XMLtoObject.js'
%}
<script src="{{ ASSET_URL }}"></script>
{%- endassets %}

{%- assets
  filters='rjsmin',
  output='gen/cqi.%(version)s.js',
  'js/cqi/index.js',
  'js/cqi/errors.js',
  'js/cqi/status.js',
  'js/cqi/api/index.js',
  'js/cqi/api/client.js',
  'js/cqi/models/index.js',
  'js/cqi/models/resource.js',
  'js/cqi/models/attributes.js',
  'js/cqi/models/subcorpora.js',
  'js/cqi/models/corpora.js',
  'js/cqi/client.js'
%}
<script src="{{ ASSET_URL }}"></script>
{%- endassets %}

{%- assets
  filters='rjsmin',
  output='gen/Forms.%(version)s.js',
  'js/forms/index.js',
  'js/forms/form.js'
  'js/forms/create-contribution-form.js',
  'js/forms/create-corpus-file-form.js',
  'js/forms/create-job-form.js'
%}
<script src="{{ ASSET_URL }}"></script>
{%- endassets %}

{%- assets
  filters='rjsmin',
  output='gen/resource-displays.%(version)s.js',
  'js/resource-displays/index.js',
  'js/resource-displays/base-display.js',
  'js/resource-displays/corpus-display.js',
  'js/resource-displays/job-display.js'
%}
<script src="{{ ASSET_URL }}"></script>
{%- endassets %}

{%- assets
  filters='rjsmin',
  output='gen/ResourceLists.%(version)s.js',
  'js/ResourceLists/ResourceList.js',
  'js/ResourceLists/CorpusFileList.js',
  'js/ResourceLists/CorpusList.js',
  'js/ResourceLists/PublicCorpusList.js',
  'js/ResourceLists/JobList.js',
  'js/ResourceLists/JobInputList.js',
  'js/ResourceLists/JobResultList.js',
  'js/ResourceLists/SpacyNLPPipelineModelList.js',
  'js/ResourceLists/TesseractOCRPipelineModelList.js',
  'js/ResourceLists/UserList.js',
  'js/ResourceLists/AdminUserList.js',
  'js/ResourceLists/CorpusFollowerList.js',
  'js/ResourceLists/CorpusTextInfoList.js',
  'js/ResourceLists/DetailledPublicCorpusList.js',
  'js/ResourceLists/CorpusTokenList.js'
%}
<script src="{{ ASSET_URL }}"></script>
{%- endassets %}

{%- assets
  filters='rjsmin',
  output='gen/requests.%(version)s.js',
  'js/requests/index.js',
  'js/requests/admin.js',
  'js/requests/contributions.js',
  'js/requests/corpora.js',
  'js/requests/jobs.js',
  'js/requests/users.js'
%}
<script src="{{ ASSET_URL }}"></script>
{%- endassets %}

{%- assets
  filters='rjsmin',
  output='gen/CorpusAnalysis.%(version)s.js',
  'js/CorpusAnalysis/QueryBuilder/ElementReferencesQueryBuilder.js',
  'js/CorpusAnalysis/QueryBuilder/GeneralFunctionsQueryBuilder.js',
  'js/CorpusAnalysis/QueryBuilder/StructuralAttributeBuilderFunctionsQueryBuilder.js',
  'js/CorpusAnalysis/QueryBuilder/TokenAttributeBuilderFunctionsQueryBuilder.js',
  'js/CorpusAnalysis/CorpusAnalysisApp.js',
  'js/CorpusAnalysis/CorpusAnalysisConcordance.js',
  'js/CorpusAnalysis/QueryBuilder.js',
  'js/CorpusAnalysis/CorpusAnalysisReader.js',
  'js/CorpusAnalysis/CorpusAnalysisStaticVisualization.js'
%}
<script src="{{ ASSET_URL }}"></script>
{%- endassets %}

<script>
  // TODO: Implement an app.run method and use this for all of the following
  const app = new App();
  {%- if current_user.is_authenticated %}
  const currentUserId = {{ current_user.hashid|tojson }};

  // Initialize components for current user
  app.subscribeUser(currentUserId)
    .catch((error) => {throw JSON.stringify(error);});
  app.getUser(currentUserId, true, true)
    .catch((error) => {throw JSON.stringify(error);});
  {%- endif %}

  // Disable all option elements with no value
  for (let optionElement of document.querySelectorAll('option[value=""]')) {
    optionElement.disabled = true;
  }
  for (let optgroupElement of document.querySelectorAll('optgroup[label=""]')) {
    for (let c of optgroupElement.children) {
      optgroupElement.parentElement.insertAdjacentElement('afterbegin', c);
    }
    optgroupElement.remove();
    
  }
  // Set the data-length attribute on textareas/inputs with the maxlength attribute
  for (let inputElement of document.querySelectorAll('textarea[maxlength], input[maxlength]')) {
    inputElement.dataset.length = inputElement.getAttribute('maxlength');
  }

  // Initialize components
  M.AutoInit();
  M.CharacterCounter.init(document.querySelectorAll('input[data-length], textarea[data-length]'));
  M.Dropdown.init(
    document.querySelectorAll('#nav-more-dropdown-trigger'),
    {alignment: 'right', constrainWidth: false, coverTrigger: false}
  );
  ResourceDisplays.autoInit();
  ResourceList.autoInit();
  Forms.autoInit();

  // Display flashed messages
  for (let [category, message] of {{ get_flashed_messages(with_categories=True)|tojson }}) {
    app.flash(message, message);
  }

  // Initialize manual modal
  let manualModalTableOfContentsElement = document.querySelector('#manual-modal-table-of-contents');
  let manualModalTableOfContents = M.Tabs.init(manualModalTableOfContentsElement);
  let manualModalElement = document.querySelector('#manual-modal');
  let manualModal = M.Modal.init(
    manualModalElement,
    {
      onOpenStart: (manualModalElement, modalTriggerElement) => {
        if ('manualModalChapter' in modalTriggerElement.dataset) {
          manualModalTableOfContents.select(modalTriggerElement.dataset.manualModalChapter);
        }
      }
    }
  );

  // Initialize terms of use modal
  const termsOfUseModal = document.getElementById('terms-of-use-modal');
  M.Modal.init(
    termsOfUseModal, 
    {
      dismissible: false, 
      onCloseEnd: () => {
        requests.users.entity.acceptTermsOfUse();
      }
    }
  );
  {% if current_user.is_authenticated and not current_user.terms_of_use_accepted %}
      termsOfUseModal.M_Modal.open();
  {% endif %}

</script>