N°8579 - remove "spaceless" in twig files

This commit is contained in:
Anne-Cath
2025-08-29 17:15:47 +02:00
parent 0a4180f7fc
commit ee993ef80a
45 changed files with 487 additions and 642 deletions

View File

@@ -1,9 +1,6 @@
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
{# @license http://opensource.org/licenses/AGPL-3.0 #}
{% apply spaceless %}
{% UIContentBlock Standard {'aContainerClasses': ['ibo-update-core', 'ibo-setup--wizard']} %}
{% if bSuccess %}
{% UIContentBlock Standard {'aContainerClasses': ['ibo-setup--wizard--content']} %}
{% UIFieldSet Standard {'sLegend':'iTopUpdate:UI:Status'|dict_s, 'sId':'update_progress'} %}
@@ -11,9 +8,7 @@
{% set sVersion = 'UI:iTopVersion:Long'|dict_format(constant('ITOP_APPLICATION'), constant('ITOP_VERSION'), constant('ITOP_REVISION'), constant('ITOP_BUILD_DATE')) %}
{% UIField Large {'sLabel':'iTopUpdate:UI:CurrentVersion'|dict_s, 'sValueHtml':sVersion} %}{% EndUIField %}
{% EndUIFieldSet %}
{% UIFieldSet Standard {'sLegend':'iTopUpdate:UI:Backup'|dict_s} %}
{% if bDoBackup or bDoFilesArchive %}
{% if bDoBackup %}
{% UIField Large {'sLabel':'iTopUpdate:UI:WithDBBackup'|dict_s, 'sValueHtml':sBackupFile} %}{% EndUIField %}
@@ -24,14 +19,11 @@
{% else %}
{% UIAlert ForWarning {'sContent':'iTopUpdate:UI:WithoutBackup'|dict_s, 'IsCollapsible':false, 'IsClosable':false} %}{% EndUIAlert %}
{% endif %}
{% EndUIFieldSet %}
{% UIFieldSet Standard {'sLegend':'iTopUpdate:UI:Action'|dict_s} %}
{% UIAlert ForWarning {'sContent':'iTopUpdate:UI:WarningReadOnlyDuringUpdate'|dict_s, 'IsCollapsible':false, 'IsClosable':false} %}{% EndUIAlert %}
{% EndUIFieldSet %}
{% EndUIContentBlock %}
{% UIToolbar ForButton {'AddCSSClass':'ibo-setup--wizard--buttons-container'} %}
{% UIForm Standard {'CSSClasses':['form-inline']} %}
{% UIButton ForCancel {'sId':'cancel-update', 'sLabel':'iTopUpdate:UI:Cancel'|dict_s, 'bIsSubmit':true} %}
@@ -46,17 +38,12 @@
{% UIInput ForHidden {'sName':'doFilesArchive', 'sValue':bDoFilesArchive} %}
{% EndUIForm %}
{% EndUIToolbar %}
{% else %}
{% UIFieldSet Standard {'sLegend':''} %}
{% UIAlert ForFailure {'sContent':sError, 'IsCollapsible':false, 'IsClosable':false} %}{% EndUIAlert %}
{% UIForm Standard {} %}
{% UIButton ForPrimaryAction {'sLabel':'iTopUpdate:UI:Back'|dict_s, 'bIsSubmit':true} %}
{% EndUIForm %}
{% EndUIFieldSet %}
{% endif %}
{% EndUIContentBlock %}
{% endapply %}

View File

@@ -1,11 +1,7 @@
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
{# @license http://opensource.org/licenses/AGPL-3.0 #}
{% apply spaceless %}
{% UIContentBlock Standard {'aContainerClasses':['ibo-update-core']} %}
{% UIPanel Neutral {sTitle:'iTopUpdate:UI:PageTitle'|dict_s} %}
{% UIContentBlock Standard {'aContainerClasses': ['display_block', 'display-files']} %}
{% UIFieldSet Standard {'sLegend':'iTopUpdate:UI:Status'|dict_s} %}
{% UIAlert ForInformation {'sId':'header-requirements', 'IsCollapsible':false, 'IsClosable':false} %}
@@ -18,34 +14,26 @@
{% EndUIContentBlock %}
{% EndUICollapsibleSection %}
{% EndUIAlert %}
{% UIField Standard {'sLabel':'iTopUpdate:UI:CurrentVersion'|dict_s} %}
{{ 'UI:iTopVersion:Long'|dict_format(constant('ITOP_APPLICATION'), constant('ITOP_VERSION'), constant('ITOP_REVISION'), constant('ITOP_BUILD_DATE')) }}
{% EndUIField %}
{% UIField Standard {'sLabel':'iTopUpdate:UI:DiskFreeSpace'|dict_s} %}
{{ sDiskFreeSpace }}
{% EndUIField %}
{% UIField Standard {'sLabel':'iTopUpdate:UI:ItopDiskSpace'|dict_s, 'ValueId':'itop-disk-space'} %}
{% UISpinner Standard {} %}
{% EndUIField %}
{% UIField Standard {'sLabel':'iTopUpdate:UI:DBDiskSpace'|dict_s, 'ValueId':'db-disk-space'} %}
{% UISpinner Standard {} %}
{% EndUIField %}
{% UIField Standard {'sLabel':'iTopUpdate:UI:FileUploadMaxSize'|dict_s} %}
{{ sFileUploadMaxSize }}
{% EndUIField %}
{% EndUIFieldSet %}
{% UIFieldSet Standard {'sLegend':'iTopUpdate:UI:SelectUpdateFile'|dict_s, 'sId':'form-update-outer'} %}
{% UIForm Standard {} %}
{% UIInput ForHidden {'sName':'route', 'sValue':'core_update.confirm_update'} %}
{% UIInput ForHidden {'sName':'transaction_id', 'sValue':sTransactionId} %}
{% UIAlert ForFailure {'sId':'header-file-size', 'IsHidden':true} %}
{% UIContentBlock Standard {'aContainerClasses':['ibo-file-size-error']} %}
{{ 'iTopUpdate:Error:FileUploadMaxSizeTooSmall'|dict_s }}
@@ -57,34 +45,25 @@
{{ 'iTopUpdate:UI:UploadMaxFileSize'|dict_format(sUploadMaxSize) }}
{% EndUIContentBlock %}
{% EndUIAlert %}
{% UIAlert ForInformation {'sId':'check-in-progress', 'IsHidden':false} %}
{{ 'iTopUpdate:UI:CheckInProgress'|dict_s }}
{% EndUIAlert %}
{% UIFileSelect Standard {sName: 'file', sId: 'file','AddCSSClass':'ibo-is-hidden'} %}
{% UIAlert ForWarning {'sId':'dobackup-warning', 'IsHidden':true} %}
{{ 'iTopUpdate:UI:DoBackup:Warning'|dict_s }}
{% EndUIAlert %}
{% UIContentBlock Standard {'aContainerClasses':['ibo-font-ral-nor-150']} %}
{% UIInput Standard {'sType':'checkbox', 'sId':'doBackup', 'sName':'doBackup', 'sValue':'1', 'IsChecked':true, 'CSSClasses':['ibo-input-checkbox', 'ibo-input--label-left'], 'Label':'iTopUpdate:UI:DoBackup:Label'|dict_s} %}
{% EndUIContentBlock %}
{% UIContentBlock Standard {'aContainerClasses':['ibo-font-ral-nor-150']} %}
{% UIInput Standard {'sType':'checkbox', 'sId':'doFilesArchive', 'sName':'doFilesArchive', 'sValue':'1', 'IsChecked':true, 'CSSClasses':['ibo-input-checkbox', 'ibo-input--label-left'], 'Label':'iTopUpdate:UI:DoFilesArchive'|dict_s} %}
{% EndUIContentBlock %}
{% UIContentBlock Standard {'aContainerClasses':['ibo_check_update_submit']} %}
{% UIButton ForPrimaryAction {'sLabel':'iTopUpdate:UI:CheckUpdate'|dict_s, 'sId':'check-update', 'bIsSubmit':true, 'IsDisabled':true} %}
{% UISpinner Standard {'sId':'submit-wait', 'IsHidden':true} %}
{% EndUIContentBlock %}
{% EndUIForm %}
{% EndUIFieldSet %}
{% if bIsSetupLaunchButtonEnabled %}
{% UIFieldSet Standard {'sLegend':'iTopUpdate:UI:Setup'|dict_s} %}
{% UIForm Standard {'sId':'launch-setup-form', Action:sLaunchSetupUrl} %}
@@ -99,14 +78,9 @@
{% UISpinner Standard {sId:'fast-setup-wait', IsHidden:true} %}
{% EndUIFieldSet %}
{% endif %}
{% UIFieldSet Standard {'sLegend':'iTopUpdate:UI:History'|dict_s} %}
{% UIDataTable ForRendering {'sListId':'iboupdatehistory', 'oSet':oSet} %}{% EndUIDataTable %}
{% EndUIFieldSet %}
{% EndUIContentBlock %}
{% EndUIPanel %}
{% EndUIContentBlock %}
{% endapply %}

View File

@@ -1,68 +1,64 @@
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
{# @license http://opensource.org/licenses/AGPL-3.0 #}
{% UIContentBlock Standard {aContainerClasses: ['ibo-update-core', 'ibo-setup--wizard']} %}
{% apply spaceless %}
{% UIContentBlock Standard {'aContainerClasses': ['ibo-setup--wizard--content']} %}
{% UIFieldSet Standard {sLegend:'iTopUpdate:UI:Progress'|dict_s, sId:'installation_progress'} %}
{# Todo 3.0 Add Progress bar UIBlock #}
<div id="progress_content">
<span id="setup_msg">{{ 'iTopUpdate:UI:SetupMessage:Ready'|dict_s }}</span>
<div id="progress">0%</div>
</div>
{% EndUIFieldSet %}
{% UIContentBlock Standard {aContainerClasses: ['ibo-update-core', 'ibo-setup--wizard']} %}
{% UIContentBlock Standard {'aContainerClasses': ['ibo-setup--wizard--content']} %}
{% UIFieldSet Standard {sLegend:'iTopUpdate:UI:Progress'|dict_s, sId:'installation_progress'} %}
{# Todo 3.0 Add Progress bar UIBlock #}
<div id="progress_content">
<span id="setup_msg">{{ 'iTopUpdate:UI:SetupMessage:Ready'|dict_s }}</span>
<div id="progress">0%</div>
</div>
{% EndUIFieldSet %}
{% UIFieldSet Standard {sLegend:'iTopUpdate:UI:Status'|dict_s} %}
{% UIAlert ForSuccess {sId:'new_version', sTitle:'iTopUpdate:UI:NewVersion'|dict_s, IsHidden:true, IsCollapsible:false, IsClosable:false} %}
{% UIContentBlock Standard {aContainerClasses:['ibo-update-core--current-version']} %}
{{ sCurrentVersion }}
{% EndUIContentBlock %}
{% EndUIAlert %}
{% UIAlert ForInformation {sId:'current_version', IsCollapsible:false, IsClosable:false} %}
{% UIContentBlock Standard {aContainerClasses:['ibo-update-core--current-version']} %}
{{ sCurrentVersion }}
{% EndUIContentBlock %}
{% EndUIAlert %}
{% if bDoBackup %}
{% UIAlert ForInformation {sId:'do_backup_done', sTitle:'iTopUpdate:UI:WithDBBackup'|dict_s, sContent:sBackupFile, IsHidden:true} %}{% EndUIAlert %}
{% endif %}
{% if bDoFilesArchive %}
{% UIAlert ForInformation {sId:'do_files_archive_done', sTitle:'iTopUpdate:UI:WithFilesBackup'|dict_s, sContent:sItopArchive, IsHidden:true} %}{% EndUIAlert %}
{% endif %}
{% EndUIFieldSet %}
{% UIFieldSet Standard {sLegend:''} %}
{% UIAlert ForFailure {sId:'setup_error_outer', sContent:'', IsCollapsible:false, IsClosable:false, IsHidden:true} %}
{% UIContentBlock Standard {sId:'setup_error',aContainerClasses:['ibo-update-core--error']} %}{% EndUIContentBlock %}
{% if bDoFilesArchive %}
{{ 'iTopUpdate:UI:RestoreArchive'|dict_format(sItopArchive) }}
{% endif %}
{% if bDoBackup %}
{{ 'iTopUpdate:UI:RestoreBackup'|dict_format(sBackupFile) }}
{% endif %}
{{ 'iTopUpdate:UI:MaintenanceModeActive'|dict_s }}
{% EndUIAlert %}
{% EndUIFieldSet %}
{% EndUIContentBlock %}
{% UIToolbar ForButton {'AddCSSClass':'ibo-setup--wizard--buttons-container'} %}
{% UIContentBlock Standard {sId:'run_setup',aContainerClasses:['ibo-update-core--run-setup'], IsHidden:true} %}
{% UIForm Standard {CSSClasses:['form-inline']} %}
{% UIInput ForHidden {sName:'route', sValue:'core_update.run_setup'} %}
{% UIInput ForHidden {sName:'authent', sValue:sSetupToken} %}
{% UIInput ForHidden {sName:'', sValue:''} %}
{% UIButton ForPrimaryAction {sLabel:'iTopUpdate:UI:RunSetup'|dict_s, sId:'run_setup', bIsSubmit:true, IsDisabled:false} %}
{% EndUIForm %}
{% UIFieldSet Standard {sLegend:'iTopUpdate:UI:Status'|dict_s} %}
{% UIAlert ForSuccess {sId:'new_version', sTitle:'iTopUpdate:UI:NewVersion'|dict_s, IsHidden:true, IsCollapsible:false, IsClosable:false} %}
{% UIContentBlock Standard {aContainerClasses:['ibo-update-core--current-version']} %}
{{ sCurrentVersion }}
{% EndUIContentBlock %}
{% UIToolbarSpacer Standard {} %}
{% UIForm Standard {CSSClasses:['form-inline']} %}
{% UIButton ForPrimaryAction {sLabel:'iTopUpdate:UI:Continue'|dict_s, sId:'setup_continue', bIsSubmit:true, IsDisabled:true} %}
{% EndUIForm %}
{% EndUIToolbar %}
{% EndUIAlert %}
{% UIAlert ForInformation {sId:'current_version', IsCollapsible:false, IsClosable:false} %}
{% UIContentBlock Standard {aContainerClasses:['ibo-update-core--current-version']} %}
{{ sCurrentVersion }}
{% EndUIContentBlock %}
{% EndUIAlert %}
{% if bDoBackup %}
{% UIAlert ForInformation {sId:'do_backup_done', sTitle:'iTopUpdate:UI:WithDBBackup'|dict_s, sContent:sBackupFile, IsHidden:true} %}{% EndUIAlert %}
{% endif %}
{% if bDoFilesArchive %}
{% UIAlert ForInformation {sId:'do_files_archive_done', sTitle:'iTopUpdate:UI:WithFilesBackup'|dict_s, sContent:sItopArchive, IsHidden:true} %}{% EndUIAlert %}
{% endif %}
{% EndUIFieldSet %}
{% UIFieldSet Standard {sLegend:''} %}
{% UIAlert ForFailure {sId:'setup_error_outer', sContent:'', IsCollapsible:false, IsClosable:false, IsHidden:true} %}
{% UIContentBlock Standard {sId:'setup_error',aContainerClasses:['ibo-update-core--error']} %}{% EndUIContentBlock %}
{% if bDoFilesArchive %}
{{ 'iTopUpdate:UI:RestoreArchive'|dict_format(sItopArchive) }}
{% endif %}
{% if bDoBackup %}
{{ 'iTopUpdate:UI:RestoreBackup'|dict_format(sBackupFile) }}
{% endif %}
{{ 'iTopUpdate:UI:MaintenanceModeActive'|dict_s }}
{% EndUIAlert %}
{% EndUIFieldSet %}
{% EndUIContentBlock %}
{% endapply %}
{% UIToolbar ForButton {'AddCSSClass':'ibo-setup--wizard--buttons-container'} %}
{% UIContentBlock Standard {sId:'run_setup',aContainerClasses:['ibo-update-core--run-setup'], IsHidden:true} %}
{% UIForm Standard {CSSClasses:['form-inline']} %}
{% UIInput ForHidden {sName:'route', sValue:'core_update.run_setup'} %}
{% UIInput ForHidden {sName:'authent', sValue:sSetupToken} %}
{% UIInput ForHidden {sName:'', sValue:''} %}
{% UIButton ForPrimaryAction {sLabel:'iTopUpdate:UI:RunSetup'|dict_s, sId:'run_setup', bIsSubmit:true, IsDisabled:false} %}
{% EndUIForm %}
{% EndUIContentBlock %}
{% UIToolbarSpacer Standard {} %}
{% UIForm Standard {CSSClasses:['form-inline']} %}
{% UIButton ForPrimaryAction {sLabel:'iTopUpdate:UI:Continue'|dict_s, sId:'setup_continue', bIsSubmit:true, IsDisabled:true} %}
{% EndUIForm %}
{% EndUIToolbar %}
{% EndUIContentBlock %}

View File

@@ -1,9 +1,7 @@
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
{# @license http://opensource.org/licenses/AGPL-3.0 #}
{% apply spaceless %}
<div style="height:250px;width:100%" class="dashboard_chart" id="my_chart_{{ oUIBlock.sChartId }}{{ oUIBlock.iChartCounter }}">
<div style="height:200px;line-height:200px;vertical-align:center;text-align:center;width:100%">
<img src="{{ get_absolute_url_app_root() }}images/indicator.gif">
</div>
<div style="height:250px;width:100%" class="dashboard_chart" id="my_chart_{{ oUIBlock.sChartId }}{{ oUIBlock.iChartCounter }}">
<div style="height:200px;line-height:200px;vertical-align:center;text-align:center;width:100%">
<img src="{{ get_absolute_url_app_root() }}images/indicator.gif">
</div>
{% endapply %}
</div>

View File

@@ -1,7 +1,5 @@
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
{# @license http://opensource.org/licenses/AGPL-3.0 #}
{% apply spaceless %}
$.post('{{ oUIBlock.sUrl|escape('js') }}', {}, function (data) {
$('body').append(data);
});
{% endapply %}

View File

@@ -1,29 +1,27 @@
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
{# @license http://opensource.org/licenses/AGPL-3.0 #}
{% apply spaceless %}
<div id="{{ oUIBlock.GetId() }}" class="{{ oUIBlock.GetBlockCode() }}">
<div>
<table style="width:100%" class="transparent">
<tr>
<td><a href="{{ oUIBlock.sDownloadLink }}" class="ibo-block-csv--download-link ibo-button ibo-is-alternative ibo-is-primary">{{ 'UI:Download-CSV'|dict_format(oUIBlock.sCsvFile) }}</a>{{ oUIBlock.sCharsetNotice }}</td>
<td style="text-align:right">
<input type="checkbox" {{ oUIBlock.sChecked }} onClick="window.location.href='{{ oUIBlock.sLinkToToggle }}'">
&nbsp;{{ 'UI:CSVExport:AdvancedMode'|dict_s }}
</td>
</tr>
</table>
{% if oUIBlock.bAdvancedMode %}
<p>
{{ 'UI:CSVExport:AdvancedMode+'|dict_s }}
</p>
{% endif %}
</div>
<div id="csv_content_loading">
<div style="width: 250px; height: 20px; background: url(../setup/orange-progress.gif); border: 1px #999 solid; margin-left:auto; margin-right: auto; text-align: center;">
{{ 'UI:Loading'|dict_s }}
</div>
</div>
<textarea id="csv_content" style="display:none;"></textarea>
<div id="{{ oUIBlock.GetId() }}" class="{{ oUIBlock.GetBlockCode() }}">
<div>
<table style="width:100%" class="transparent">
<tr>
<td><a href="{{ oUIBlock.sDownloadLink }}" class="ibo-block-csv--download-link ibo-button ibo-is-alternative ibo-is-primary">{{ 'UI:Download-CSV'|dict_format(oUIBlock.sCsvFile) }}</a>{{ oUIBlock.sCharsetNotice }}</td>
<td style="text-align:right">
<input type="checkbox" {{ oUIBlock.sChecked }} onClick="window.location.href='{{ oUIBlock.sLinkToToggle }}'">
&nbsp;{{ 'UI:CSVExport:AdvancedMode'|dict_s }}
</td>
</tr>
</table>
{% if oUIBlock.bAdvancedMode %}
<p>
{{ 'UI:CSVExport:AdvancedMode+'|dict_s }}
</p>
{% endif %}
</div>
{% endapply %}
<div id="csv_content_loading">
<div style="width: 250px; height: 20px; background: url(../setup/orange-progress.gif); border: 1px #999 solid; margin-left:auto; margin-right: auto; text-align: center;">
{{ 'UI:Loading'|dict_s }}
</div>
</div>
<textarea id="csv_content" style="display:none;"></textarea>
</div>

View File

@@ -1,6 +1,5 @@
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
{# @license http://opensource.org/licenses/AGPL-3.0 #}
{% apply spaceless %}
$.post(
'{{ oUIBlock.sAjaxLink|escape('js') }}',
{{ oUIBlock.sJsonParams|raw }},
@@ -9,4 +8,3 @@ $.post(
$('#csv_content_loading').hide();
$('#csv_content').show();
});
{% endapply %}

View File

@@ -1,25 +1,21 @@
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
{# @license http://opensource.org/licenses/AGPL-3.0 #}
{% apply spaceless %}
{% if oUIBlock.bEmptySet or oUIBlock.bNotAuthorized %}
<div class="ibo-block-list--empty-text">{{ 'UI:NoObjectToDisplay'|dict_s }}</div>
{% endif %}
{% if oUIBlock.bEmptySet or oUIBlock.bNotAuthorized %}
<div class="ibo-block-list--empty-text">{{ 'UI:NoObjectToDisplay'|dict_s }}</div>
{% endif %}
{# TODO 3.1: This section should be removed if BlockList is no longer used as is, but always with a table #}
{% if oUIBlock.bCreateNew %}
<div class="ibo-block-list--create-action">
<a{{ oUIBlock.sLinkTarget }} href="{{ oUIBlock.sAbsoluteUrlAppRoot }}pages/UI.php?operation=new&class={{ oUIBlock.sClass }}&{{ oUIBlock.sParams }}{{ oUIBlock.sDefault }}">
<span class="ibo-block-list--create-icon">
<span class="fas fa-plus"></span>
</span>
<span class="ibo-block-list--create-label">{{ 'UI:ClickToCreateNew'|dict_format(oUIBlock.sClassLabel) }}</span>
</a>
</div>
{% endif %}
{# TODO 3.1: This section should be removed if BlockList is no longer used as is, but always with a table #}
{% if oUIBlock.bCreateNew %}
<div class="ibo-block-list--create-action">
<a{{ oUIBlock.sLinkTarget }} href="{{ oUIBlock.sAbsoluteUrlAppRoot }}pages/UI.php?operation=new&class={{ oUIBlock.sClass }}&{{ oUIBlock.sParams }}{{ oUIBlock.sDefault }}">
<span class="ibo-block-list--create-icon">
<span class="fas fa-plus"></span>
</span>
<span class="ibo-block-list--create-label">{{ 'UI:ClickToCreateNew'|dict_format(oUIBlock.sClassLabel) }}</span>
</a>
</div>
{% endif %}
{% for oSubBlock in oUIBlock.GetSubBlocks() %}
{{ render_block(oSubBlock, {aPage: aPage}) }}
{% endfor %}
{% endapply %}
{% for oSubBlock in oUIBlock.GetSubBlocks() %}
{{- render_block(oSubBlock, {aPage: aPage}) -}}
{% endfor %}

View File

@@ -1,7 +1,5 @@
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
{# @license http://opensource.org/licenses/AGPL-3.0 #}
{% apply spaceless %}
{% if oUIBlock.sEventAttachedData is not empty %}
$('body').trigger('update_history.itop', [{{ oUIBlock.sEventAttachedData|raw }}]);
{% endif %}
{% endapply %}
{% if oUIBlock.sEventAttachedData is not empty %}
$('body').trigger('update_history.itop', [{{ oUIBlock.sEventAttachedData|raw }}]);
{% endif %}

View File

@@ -1,6 +1,5 @@
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
{# @license http://opensource.org/licenses/AGPL-3.0 #}
{% apply spaceless %}
oWidget{{ oUIBlock.oUILinksDirectWidget.GetInputId() }} = $('#{{ oUIBlock.oUILinksDirectWidget.GetInputId() }}').directlinks({
class_name: '{{ oUIBlock.oUILinksDirectWidget.GetClass() }}',
att_code: '{{ oUIBlock.oUILinksDirectWidget.GetAttCode() }}',
@@ -9,4 +8,3 @@ oWidget{{ oUIBlock.oUILinksDirectWidget.GetInputId() }} = $('#{{ oUIBlock.oUILin
oWizardHelper: {{ oUIBlock.sWizHelper }},
do_search: '{{ oUIBlock.sJSDoSearch }}'
});
{% endapply %}

View File

@@ -1,6 +1,5 @@
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
{# @license http://opensource.org/licenses/AGPL-3.0 #}
{% apply spaceless %}
oWidget{{ oUIBlock.oUILinksWidget.GetInputId() }} = new LinksWidget(
'{{ oUIBlock.oUILinksWidget.GetLinkedSetId() }}',
'{{ oUIBlock.oUILinksWidget.GetClass() }}',
@@ -15,4 +14,3 @@ oWidget{{ oUIBlock.oUILinksWidget.GetInputId() }} = new LinksWidget(
{{ oUIBlock.aRemoved | json_encode | raw }}
);
oWidget{{ oUIBlock.oUILinksWidget.GetInputId() }}.Init();
{% endapply %}

View File

@@ -1,5 +1,3 @@
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
{# @license http://opensource.org/licenses/AGPL-3.0 #}
{% apply spaceless %}
oWidget{{ oUIBlock.oUILinksWidget.GetInputId() }}.RegisterChange();
{% endapply %}

View File

@@ -1,7 +1,5 @@
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
{# @license http://opensource.org/licenses/AGPL-3.0 #}
{% apply spaceless %}
$('#dlg_{{ oUIBlock.oUILinksWidget.GetLinkedSetId() }}').dialog({
width: $(window).width()*0.8,
height: $(window).height()*0.8,
@@ -31,5 +29,3 @@ $('#dlg_{{ oUIBlock.oUILinksWidget.GetLinkedSetId() }}').dialog({
$('#SearchFormToAdd_{{ oUIBlock.oUILinksWidget.GetLinkedSetId() }} form').on('submit.uilinksWizard', oWidget{{ oUIBlock.oUILinksWidget.GetInputId() }}.SearchObjectsToAdd);
$('#SearchFormToAdd_{{ oUIBlock.oUILinksWidget.GetLinkedSetId() }}').on('resize', oWidget{{ oUIBlock.oUILinksWidget.GetInputId() }}.UpdateSizes);
{% endapply %}

View File

@@ -1,8 +1,6 @@
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
{# @license http://opensource.org/licenses/AGPL-3.0 #}
{% apply spaceless %}
{{ oUIBlock.GetWidgetName() }} = $('#{{ oUIBlock.GetId() }}').links_view_table({
link_class: '{{ oUIBlock.GetLinkedClass() }}',
external_key_to_me: '{{ oUIBlock.GetExternalKeyToMe() }}'
});
{% endapply %}

View File

@@ -1,7 +1,5 @@
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
{# @license http://opensource.org/licenses/AGPL-3.0 #}
{% apply spaceless %}
var selectionCount{{ oUIBlock.sIdShortcuts }} = $('#{{ oUIBlock.sIdShortcuts }} [name="selectionCount"]');
selectionCount{{ oUIBlock.sIdShortcuts }}.on('change',function()
{
@@ -48,5 +46,3 @@ $('#shortcut_btn_delete').on('click', function() {
}
return false;
});
{% endapply %}

View File

@@ -1,21 +1,17 @@
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
{# @license http://opensource.org/licenses/AGPL-3.0 #}
{% apply spaceless %}
<div class="explain-printable not-printable">
<p>{{'UI:ExplainPrintable'| dict_format('<i class="fas fa-eye"></i>')| raw}}</p>
<div id="hiddeable_chapters"></div>
<button class="ibo-button ibo-is-regular ibo-is-primary action" onclick="window.print()">{{'UI:Button:GoPrint'| dict_s}}</button>&#160;&#160;
<button class="ibo-button ibo-is-regular ibo-is-secondary cancel" onclick="window.close()">{{ 'UI:Button:Cancel'| dict_s}}</button>&#160;&#160;
<div class="explain-printable not-printable">
<p>{{'UI:ExplainPrintable'| dict_format('<i class="fas fa-eye"></i>')| raw}}</p>
<div id="hiddeable_chapters"></div>
<button class="ibo-button ibo-is-regular ibo-is-primary action" onclick="window.print()">{{'UI:Button:GoPrint'| dict_s}}</button>&#160;&#160;
<button class="ibo-button ibo-is-regular ibo-is-secondary cancel" onclick="window.close()">{{ 'UI:Button:Cancel'| dict_s}}</button>&#160;&#160;
<select name="text" onchange='$(".printable-content").width(this.value);'>
<option value='100%'>{{ 'UI:PrintResolution:FullSize'|dict_s }}</option>
<option value='19cm'>{{ 'UI:PrintResolution:A4Portrait'|dict_s }}</option>
<option value='27.7cm' selected>{{ 'UI:PrintResolution:A4Landscape'|dict_s }}</option>
<option value='19.6cm'>{{ 'UI:PrintResolution:LetterPortrait'|dict_s }}</option>
<option value='25.9cm'>{{ 'UI:PrintResolution:LetterLandscape'|dict_s }}</option>
</select>
<select name="text" onchange='$(".printable-content").width(this.value);'>
<option value='100%'>{{ 'UI:PrintResolution:FullSize'|dict_s }}</option>
<option value='19cm'>{{ 'UI:PrintResolution:A4Portrait'|dict_s }}</option>
<option value='27.7cm' selected>{{ 'UI:PrintResolution:A4Landscape'|dict_s }}</option>
<option value='19.6cm'>{{ 'UI:PrintResolution:LetterPortrait'|dict_s }}</option>
<option value='25.9cm'>{{ 'UI:PrintResolution:LetterLandscape'|dict_s }}</option>
</select>
</div>
{% endapply %}
</div>

View File

@@ -1,7 +1,3 @@
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
{# @license http://opensource.org/licenses/AGPL-3.0 #}
{% apply spaceless %}
var oHiddeableChapters = {};
{% endapply %}

View File

@@ -1,7 +1,5 @@
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
{# @license http://opensource.org/licenses/AGPL-3.0 #}
{% apply spaceless %}
var sHiddeableChapters = '<ul role="tablist" class="ibo-block-print--tablist">';
for (sId in oHiddeableChapters)
{
@@ -28,5 +26,3 @@ $('fieldset').each(function() {
$('legend').css('cursor', 'pointer').on('click', function(){
$(this).parent('fieldset').toggleClass('not-printable strikethrough');
});
{% endapply %}

View File

@@ -1,18 +1,17 @@
{% apply spaceless %}
<span id="{{ oUIBlock.GetId() }}"
class="{{ oUIBlock.GetBlocksInheritanceCSSClassesAsString() }} {{ oUIBlock.GetAdditionalCSSClassesAsString() }}{% if oUIBlock.IsHidden() %} ibo-is-hidden{% endif %}"
data-role="ibo-button-group"
{% if oUIBlock.GetDataAttributes() %}
{% for sName, sValue in oUIBlock.GetDataAttributes() %}
data-{{ sName }}="{{ sValue }}"
{% endfor %}
{% endif %}
<span id="{{ oUIBlock.GetId() }}"
class="{{ oUIBlock.GetBlocksInheritanceCSSClassesAsString() }} {{ oUIBlock.GetAdditionalCSSClassesAsString() }}{% if oUIBlock.IsHidden() %} ibo-is-hidden{% endif %}"
data-role="ibo-button-group"
{% if oUIBlock.GetDataAttributes() %}
{% for sName, sValue in oUIBlock.GetDataAttributes() %}
data-{{ sName }}="{{ sValue }}"
{% endfor %}
{% endif %}
>
{% for oButton in oUIBlock.GetButtons() %}
{{ render_block(oButton) }}
{{- render_block(oButton) -}}
{% endfor %}
</span>
{% for oExtraBlock in oUIBlock.GetExtraBlocks() %}
{{ render_block(oExtraBlock) }}
{% endfor %}
{% endapply %}
{% for oExtraBlock in oUIBlock.GetExtraBlocks() %}
{{- render_block(oExtraBlock) -}}
{% endfor %}

View File

@@ -1,33 +1,31 @@
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
{# @license http://opensource.org/licenses/AGPL-3.0 #}
{% apply spaceless %}
<div class="ibo-dashlet-badge--body{% if oUIBlock.IsHidden() %} ibo-is-hidden{% endif %}" id="{{ oUIBlock.GetId() }}"
data-role="ibo-dashlet-badge--body"
{% if oUIBlock.HasClassDescription() %}
{# Display both class name and description as the name could be truncated if too long #}
data-tooltip-content="{{ '<div class="ibo-dashlet-badge--body--tooltip-title">'|escape }}{{ oUIBlock.GetClassLabel() }}{{ '</div><div class="ibo-dashlet-badge--body--tooltip-description">'|escape }}{{ oUIBlock.GetClassDescription() }}{{ '</div>'|escape }}"
data-tooltip-html-enabled="true"
{% else %}
{# Display only class name as it could be truncated if too long #}
data-tooltip-content="{{ oUIBlock.GetClassLabel() }}"
{% endif %}
{# Delay display to avoid having all tooltips appearing when mouse is just passing through the tabs #}
data-tooltip-show-delay="300">
<div class="ibo-dashlet-badge--icon-container">
{# Mind the empty "alt" attribute https://www.w3.org/WAI/tutorials/images/decorative/ #}
<img class="ibo-dashlet-badge--icon" src="{{ oUIBlock.GetClassIconUrl() }}" alt="">
</div>
<div class="ibo-dashlet-badge--actions">
<a class="ibo-dashlet-badge--action-list" href="{{ oUIBlock.GetHyperlink() }}" data-role="ibo-dashlet-badge--action-list">
<span class="ibo-dashlet-badge--action-list-count">{{ oUIBlock.GetCount() }}</span>
<span class="ibo-dashlet-badge--action-list-label">{{ oUIBlock.GetClassLabel() }}</span>
</a>
{% if oUIBlock.GetCreateActionUrl() is not empty %}
<a class="ibo-dashlet-badge--action-create" href="{{ oUIBlock.GetCreateActionUrl() }}">
<span class="ibo-dashlet-badge--action-create-icon fas fa-plus"></span>
<span class="ibo-dashlet-badge--action-create-label">{{ oUIBlock.GetCreateActionLabel() }}</span>
</a>
{% endif %}
</div>
<div class="ibo-dashlet-badge--body{% if oUIBlock.IsHidden() %} ibo-is-hidden{% endif %}" id="{{ oUIBlock.GetId() }}"
data-role="ibo-dashlet-badge--body"
{% if oUIBlock.HasClassDescription() %}
{# Display both class name and description as the name could be truncated if too long #}
data-tooltip-content="{{ '<div class="ibo-dashlet-badge--body--tooltip-title">'|escape }}{{ oUIBlock.GetClassLabel() }}{{ '</div><div class="ibo-dashlet-badge--body--tooltip-description">'|escape }}{{ oUIBlock.GetClassDescription() }}{{ '</div>'|escape }}"
data-tooltip-html-enabled="true"
{% else %}
{# Display only class name as it could be truncated if too long #}
data-tooltip-content="{{ oUIBlock.GetClassLabel() }}"
{% endif %}
{# Delay display to avoid having all tooltips appearing when mouse is just passing through the tabs #}
data-tooltip-show-delay="300">
<div class="ibo-dashlet-badge--icon-container">
{# Mind the empty "alt" attribute https://www.w3.org/WAI/tutorials/images/decorative/ #}
<img class="ibo-dashlet-badge--icon" src="{{ oUIBlock.GetClassIconUrl() }}" alt="">
</div>
{% endapply %}
<div class="ibo-dashlet-badge--actions">
<a class="ibo-dashlet-badge--action-list" href="{{ oUIBlock.GetHyperlink() }}" data-role="ibo-dashlet-badge--action-list">
<span class="ibo-dashlet-badge--action-list-count">{{ oUIBlock.GetCount() }}</span>
<span class="ibo-dashlet-badge--action-list-label">{{ oUIBlock.GetClassLabel() }}</span>
</a>
{% if oUIBlock.GetCreateActionUrl() is not empty %}
<a class="ibo-dashlet-badge--action-create" href="{{ oUIBlock.GetCreateActionUrl() }}">
<span class="ibo-dashlet-badge--action-create-icon fas fa-plus"></span>
<span class="ibo-dashlet-badge--action-create-label">{{ oUIBlock.GetCreateActionLabel() }}</span>
</a>
{% endif %}
</div>
</div>

View File

@@ -1,17 +1,15 @@
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
{# @license http://opensource.org/licenses/AGPL-3.0 #}
{% apply spaceless %}
<div id="{{ oUIBlock.GetId() }}" class="ibo-dashlet-header-static {% if oUIBlock.IsHidden() %}ibo-is-hidden{% endif %}" data-role="ibo-dashlet-header-static">
<div class="ibo-dashlet-header-static--body">
{% if oUIBlock.GetIconUrl() is not empty %}
<div class="ibo-dashlet-header-static--icon-container">
{# Mind the empty "alt" attribute https://www.w3.org/WAI/tutorials/images/decorative/ #}
<img class="ibo-dashlet-header-static--icon" src="{{ oUIBlock.GetIconUrl()|raw }}" alt="">
</div>
{% endif %}
{% if oUIBlock.GetTitle() is not empty %}
<div class="ibo-dashlet-header-static--title">{{ oUIBlock.GetTitle() }}</div>
{% endif %}
</div>
<div id="{{ oUIBlock.GetId() }}" class="ibo-dashlet-header-static {% if oUIBlock.IsHidden() %}ibo-is-hidden{% endif %}" data-role="ibo-dashlet-header-static">
<div class="ibo-dashlet-header-static--body">
{% if oUIBlock.GetIconUrl() is not empty %}
<div class="ibo-dashlet-header-static--icon-container">
{# Mind the empty "alt" attribute https://www.w3.org/WAI/tutorials/images/decorative/ #}
<img class="ibo-dashlet-header-static--icon" src="{{ oUIBlock.GetIconUrl()|raw }}" alt="">
</div>
{% endif %}
{% if oUIBlock.GetTitle() is not empty %}
<div class="ibo-dashlet-header-static--title">{{ oUIBlock.GetTitle() }}</div>
{% endif %}
</div>
{% endapply %}
</div>

View File

@@ -1,8 +1,6 @@
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
{# @license http://opensource.org/licenses/AGPL-3.0 #}
{% apply spaceless %}
<div id="{{ oUIBlock.GetId() }}" class="ibo-dashlet-text {% if oUIBlock.IsHidden() %}ibo-is-hidden{% endif %}" data-role="ibo-dashlet-text">
{# |raw filter is ok here as the escaping is already done by the \DashletPlainText class itself #}
{{ oUIBlock.GetText()|raw }}
</div>
{% endapply %}
<div id="{{ oUIBlock.GetId() }}" class="ibo-dashlet-text {% if oUIBlock.IsHidden() %}ibo-is-hidden{% endif %}" data-role="ibo-dashlet-text">
{# |raw filter is ok here as the escaping is already done by the \DashletPlainText class itself #}
{{- oUIBlock.GetText()|raw -}}
</div>

View File

@@ -1,5 +1,2 @@
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
{# @license http://opensource.org/licenses/AGPL-3.0 #}
{% apply spaceless %}
{% endapply %}

View File

@@ -13,11 +13,9 @@
{% endfor %}
{% endif %}
>
{% apply spaceless %}
{% block iboContentBlockContainer %}
{% for oSubBlock in oUIBlock.GetSubBlocks() %}
{{ render_block(oSubBlock, {aPage: aPage}) }}
{% endfor %}
{% endblock %}
{% endapply %}
{% block iboContentBlockContainer %}
{% for oSubBlock in oUIBlock.GetSubBlocks() %}
{{- render_block(oSubBlock, {aPage: aPage}) -}}
{% endfor %}
{% endblock %}
</form>

View File

@@ -1,15 +1,13 @@
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
{# @license http://opensource.org/licenses/AGPL-3.0 #}
{% apply spaceless %}
<div id="{{ oUIBlock.GetId() }}-container"
class="ibo-input-file-select--container {% if oUIBlock.GetAdditionalCSSClassesAsString() %}{{ oUIBlock.GetAdditionalCSSClassesAsString() }}{% endif %}
{% if oUIBlock.IsHidden() %} ibo-is-hidden{% endif %}">
<label class="ibo-input-file-select">
<input id="{{ oUIBlock.GetId() }}" class="ibo-input-file-select--file-input" type="file" name="{{ oUIBlock.GetName() }}">
<span class="ibo-button ibo-is-regular ibo-is-primary">{{ oUIBlock.GetButtonText() }}</span>
{% if oUIBlock.GetShowFilename() %}
<span id="{{ oUIBlock.GetId() }}-file-name" class="ibo-input-file-select--file-name">{{ oUIBlock.GetFileName() }}</span>
{% endif %}
</label>
</div>
{% endapply %}
<div id="{{ oUIBlock.GetId() }}-container"
class="ibo-input-file-select--container {% if oUIBlock.GetAdditionalCSSClassesAsString() %}{{ oUIBlock.GetAdditionalCSSClassesAsString() }}{% endif %}
{% if oUIBlock.IsHidden() %} ibo-is-hidden{% endif %}">
<label class="ibo-input-file-select">
<input id="{{ oUIBlock.GetId() }}" class="ibo-input-file-select--file-input" type="file" name="{{ oUIBlock.GetName() }}">
<span class="ibo-button ibo-is-regular ibo-is-primary">{{ oUIBlock.GetButtonText() }}</span>
{% if oUIBlock.GetShowFilename() %}
<span id="{{ oUIBlock.GetId() }}-file-name" class="ibo-input-file-select--file-name">{{ oUIBlock.GetFileName() }}</span>
{% endif %}
</label>
</div>

View File

@@ -1,6 +1,5 @@
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
{# @license http://opensource.org/licenses/AGPL-3.0 #}
{% apply spaceless %}
<div id="{{ oUIBlock.GetId() }}" class="{{ oUIBlock.GetBlocksInheritanceCSSClassesAsString() }} {{ oUIBlock.GetAdditionalCSSClassesAsString() }}" data-role="ibo-medallion-icon">
{% if oUIBlock.GetImageUrl() != '' %}
<img class="ibo-medallion-icon--image" src="{{ oUIBlock.GetImageUrl() }}" />
@@ -12,4 +11,3 @@
<div class="ibo-medallion-icon--description">{{ oUIBlock.GetDescription() }}</div>
{% endif %}
</div>
{% endapply %}

View File

@@ -1,14 +1,12 @@
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
{# @license http://opensource.org/licenses/AGPL-3.0 #}
{% apply spaceless %}
<div id="{{ oUIBlock.GetId() }}" class="ibo-spinner ibo-is-{{ oUIBlock.GetSize() }}
{% if oUIBlock.IsHidden() %}ibo-is-hidden{% endif %}
{{ oUIBlock.GetBlocksInheritanceCSSClassesAsString() }}
{{ oUIBlock.GetAdditionalCSSClassesAsString() }}"
<div id="{{ oUIBlock.GetId() }}" class="ibo-spinner ibo-is-{{ oUIBlock.GetSize() }}
{% if oUIBlock.IsHidden() %}ibo-is-hidden{% endif %}
{{ oUIBlock.GetBlocksInheritanceCSSClassesAsString() }}
{{ oUIBlock.GetAdditionalCSSClassesAsString() }}"
data-role="ibo-spinner">
<i class="ibo-spinner--icon fas fa-sync-alt fa-spin" aria-hidden="true"></i>
{% if oUIBlock.HasDescription() %}
<div class="ibo-spinner--description"> {{ oUIBlock.GetDescription() }} </div>
{% endif %}
</div>
{% endapply %}
</div>

View File

@@ -1,9 +1,7 @@
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
{# @license http://opensource.org/licenses/AGPL-3.0 #}
{% apply spaceless %}
<template id="{{ oUIBlock.GetId() }}" data-role="ibo-template">
{% for oSubBlock in oUIBlock.GetSubBlocks() %}
{{ render_block(oSubBlock, {aPage: aPage}) }}
{% endfor %}
</template>
{% endapply %}
<template id="{{ oUIBlock.GetId() }}" data-role="ibo-template">
{% for oSubBlock in oUIBlock.GetSubBlocks() %}
{{- render_block(oSubBlock, {aPage: aPage}) -}}
{% endfor %}
</template>

View File

@@ -1,5 +1,3 @@
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
{# @license http://opensource.org/licenses/AGPL-3.0 #}
{% apply spaceless %}
{{ oUIBlock.GetText() }}
{% endapply %}
{{ oUIBlock.GetText() }}

View File

@@ -1,18 +1,16 @@
{% apply spaceless %}
<div id="{{ oUIBlock.GetId() }}" class="{{ oUIBlock.GetBlocksInheritanceCSSClassesAsString() }} {{ oUIBlock.GetAdditionalCSSClassesAsString() }} {% if oUIBlock.HasIcon() %}ibo-has-icon{% endif %}{% if oUIBlock.IsHidden() %} ibo-is-hidden{% endif %}" data-role="ibo-title">
{% if oUIBlock.HasIcon() %}
<div class="ibo-title--icon">
<div class="ibo-title--icon-background ibo-title--icon-background--must-{{ oUIBlock.GetIconCoverMethod() }} ibo-title--icon-level-{{ oUIBlock.GetLevel() }}" style="background-image: url('{{ oUIBlock.GetIconUrl()|raw }}');"></div>
</div>
{% endif %}
<div class="ibo-title--content">
{% block iboPageTitleText %}
<h{{ oUIBlock.GetLevel() }} class="ibo-title--text is-size-{{ oUIBlock.GetLevel() + 2 }}">
{% for oSubBlock in oUIBlock.GetSubBlocks() %}
{{ render_block(oSubBlock, {aPage: aPage}) }}
{% endfor %}
</h{{ oUIBlock.GetLevel() }}>
{% endblock %}
<div id="{{ oUIBlock.GetId() }}" class="{{ oUIBlock.GetBlocksInheritanceCSSClassesAsString() }} {{ oUIBlock.GetAdditionalCSSClassesAsString() }} {% if oUIBlock.HasIcon() %}ibo-has-icon{% endif %}{% if oUIBlock.IsHidden() %} ibo-is-hidden{% endif %}" data-role="ibo-title">
{% if oUIBlock.HasIcon() %}
<div class="ibo-title--icon">
<div class="ibo-title--icon-background ibo-title--icon-background--must-{{ oUIBlock.GetIconCoverMethod() }} ibo-title--icon-level-{{ oUIBlock.GetLevel() }}" style="background-image: url('{{ oUIBlock.GetIconUrl()|raw }}');"></div>
</div>
{% endif %}
<div class="ibo-title--content">
{% block iboPageTitleText %}
<h{{ oUIBlock.GetLevel() }} class="ibo-title--text is-size-{{ oUIBlock.GetLevel() + 2 }}">
{% for oSubBlock in oUIBlock.GetSubBlocks() %}
{{- render_block(oSubBlock, {aPage: aPage}) -}}
{% endfor %}
</h{{ oUIBlock.GetLevel() }}>
{% endblock %}
</div>
{% endapply %}
</div>

View File

@@ -1,14 +1,10 @@
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
{# @license http://opensource.org/licenses/AGPL-3.0 #}
{# Toolbar #}
{% apply spaceless %}
<div id="{{ oUIBlock.GetId() }}"
class="{{ oUIBlock.GetBlocksInheritanceCSSClassesAsString() }} {{ oUIBlock.GetAdditionalCSSClassesAsString() }} {% if oUIBlock.IsHidden() %}ibo-is-hidden{% endif %}"
data-role="ibo-toolbar"
>
{% for oSubBlock in oUIBlock.GetSubBlocks() %}
{{ render_block(oSubBlock, {aPage: aPage}) }}
{% endfor %}
</div>
{% endapply %}
<div id="{{ oUIBlock.GetId() }}"
class="{{ oUIBlock.GetBlocksInheritanceCSSClassesAsString() }} {{ oUIBlock.GetAdditionalCSSClassesAsString() }} {% if oUIBlock.IsHidden() %}ibo-is-hidden{% endif %}"
data-role="ibo-toolbar">
{% for oSubBlock in oUIBlock.GetSubBlocks() %}
{{- render_block(oSubBlock, {aPage: aPage}) -}}
{% endfor %}
</div>

View File

@@ -1,9 +1,8 @@
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
{# @license http://opensource.org/licenses/AGPL-3.0 #}
{% apply spaceless %}
<span id="{{ oUIBlock.GetId() }}" class="{{ oUIBlock.GetBlocksInheritanceCSSClassesAsString() }}
{% if oUIBlock.GetAdditionalCSSClassesAsString() %}{{ oUIBlock.GetAdditionalCSSClassesAsString() }}{% endif %}
{% if oUIBlock.IsHidden() %}ibo-is-hidden{% endif %}"
data-role="ibo-toolbar-vertical-separator">
</span>
{% endapply %}
<span id="{{ oUIBlock.GetId() }}" class="{{ oUIBlock.GetBlocksInheritanceCSSClassesAsString() }}
{% if oUIBlock.GetAdditionalCSSClassesAsString() %}{{ oUIBlock.GetAdditionalCSSClassesAsString() }}{% endif %}
{% if oUIBlock.IsHidden() %}ibo-is-hidden{% endif %}"
data-role="ibo-toolbar-vertical-separator">
</span>

View File

@@ -1,6 +1,4 @@
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
{# @license http://opensource.org/licenses/AGPL-3.0 #}
{% apply spaceless %}
<div id="{{ oUIBlock.GetId() }}" class="{{ oUIBlock.GetBlocksInheritanceCSSClassesAsString() }} {{ oUIBlock.GetAdditionalCSSClassesAsString() }} {% if oUIBlock.IsHidden() %}ibo-is-hidden{% endif %}">
</div>
{% endapply %}
<div id="{{ oUIBlock.GetId() }}" class="{{ oUIBlock.GetBlocksInheritanceCSSClassesAsString() }} {{ oUIBlock.GetAdditionalCSSClassesAsString() }} {% if oUIBlock.IsHidden() %}ibo-is-hidden{% endif %}">
</div>

View File

@@ -32,7 +32,6 @@
</div>
</div>
<div class="ibo-activity-entry--sub-information" data-role="ibo-activity-entry--sub-information">
{% apply spaceless %}
{% block iboActivityEntrySubInformation %}
{% if oUIBlock.GetOrigin() is not null and oUIBlock.GetOrigin != constant('Combodo\\iTop\\Core\\CMDBChange\\CMDBChangeOrigin::INTERACTIVE') %}
<span class="ibo-activity-entry--origin" data-role="ibo-activity-entry--origin" data-tooltip-content="{{ ('Class:CMDBChange/Attribute:origin/Value:' ~ oUIBlock.GetOrigin())|dict_s }}" data-tooltip-placement="bottom">
@@ -48,7 +47,6 @@
data-raw-datetime="{{ oUIBlock.GetRawDateTime() }}"
data-formatted-datetime="{{ oUIBlock.GetFormattedDateTime() }}">{{ oUIBlock.GetFormattedDateTime() }}</span>
{% endblock %}
{% endapply %}
</div>
{% endblock %}
</div>

View File

@@ -1,4 +1,3 @@
{% apply spaceless %}
<form id="{{ oUIBlock.GetId() }}"
class="{{ oUIBlock.GetBlocksInheritanceCSSClassesAsString() }} {{ oUIBlock.GetAdditionalCSSClassesAsString() }} {% if oUIBlock.IsSubmitAutonomous() and (bInitOpened == false) %}ibo-is-closed{% endif %}"
data-role="ibo-caselog-entry-form"
@@ -15,17 +14,17 @@
<div class="ibo-caselog-entry-form--action-buttons--extra-actions"
data-role="ibo-caselog-entry-form--action-buttons--extra-actions">
{% for TextInputActionButton in oUIBlock.GetExtraActionButtons() %}
{{ render_block(TextInputActionButton, {aPage: aPage}) }}
{{- render_block(TextInputActionButton, {aPage: aPage}) -}}
{% endfor %}
</div>
<div class="ibo-caselog-entry-form--action-buttons--main-actions" data-role="ibo-caselog-entry-form--action-buttons--main-actions">
{% for FormActionButton in oUIBlock.GetMainActionButtons() %}
{{ render_block(FormActionButton, {aPage: aPage}) }}
{{- render_block(FormActionButton, {aPage: aPage}) -}}
{% endfor %}
</div>
</div>
<div class="ibo-caselog-entry-form--text-input" data-role="ibo-caselog-entry-form--text-input">
{{ render_block(oUIBlock.GetTextInput(), {aPage: aPage}) }}
{{- render_block(oUIBlock.GetTextInput(), {aPage: aPage}) -}}
</div>
<div class="ibo-caselog-entry-form--extra-inputs" data-role="ibo-caselog-entry-form--extra-inputs">
</div>
@@ -36,4 +35,3 @@
<span class="ibo-caselog-entry-form--lock-message" data-role="ibo-caselog-entry-form--lock-message"></span>
</div>
</form>
{% endapply %}

View File

@@ -1,23 +1,18 @@
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
{# @license http://opensource.org/licenses/AGPL-3.0 #}
{# Content Block #}
{% apply spaceless %}
{# Important: We don't want the UIContentBlock have a div node based on the inherited CSS classes, otherwise the node would always be present, which is not what we want #}
{% set bHasDiv = (oUIBlock.GetAdditionalCSSClassesAsString() or oUIBlock.GetDataAttributes() or oUIBlock.IsHidden() or oUIBlock.HasForcedDiv()) %}
{% block iboContentBlockContainer %}
{% if bHasDiv %}
<div id="{{ oUIBlock.GetId() }}"
class="{{ oUIBlock.GetBlocksInheritanceCSSClassesAsString() }} {{ oUIBlock.GetAdditionalCSSClassesAsString() }} {% if oUIBlock.IsHidden() %}ibo-is-hidden{% endif %}"
{% if oUIBlock.GetDataAttributes() %}
{% for sName, sValue in oUIBlock.GetDataAttributes() %}
data-{{ sName }}="{{ sValue }}"
{% endfor %}
{% endif %}
> {% endif %}
{% for oSubBlock in oUIBlock.GetSubBlocks() %} {{ render_block(oSubBlock, {aPage: aPage}) }} {% endfor %}
{% if bHasDiv %} </div> {% endif %}
{% endblock %}
{% endapply %}
{# Important: We don't want the UIContentBlock have a div node based on the inherited CSS classes, otherwise the node would always be present, which is not what we want #}
{% set bHasDiv = (oUIBlock.GetAdditionalCSSClassesAsString() or oUIBlock.GetDataAttributes() or oUIBlock.IsHidden() or oUIBlock.HasForcedDiv()) %}
{% block iboContentBlockContainer %}
{% if bHasDiv %}
<div id="{{ oUIBlock.GetId() }}"
class="{{ oUIBlock.GetBlocksInheritanceCSSClassesAsString() }} {{ oUIBlock.GetAdditionalCSSClassesAsString() }} {% if oUIBlock.IsHidden() %}ibo-is-hidden{% endif %}"
{% if oUIBlock.GetDataAttributes() %}
{% for sName, sValue in oUIBlock.GetDataAttributes() %}
data-{{ sName }}="{{ sValue }}"
{% endfor %}
{% endif %}
> {% endif %}
{% for oSubBlock in oUIBlock.GetSubBlocks() %} {{ render_block(oSubBlock, {aPage: aPage}) }} {% endfor %}
{% if bHasDiv %} </div> {% endif %}
{% endblock %}

View File

@@ -1,22 +1,20 @@
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
{# @license http://opensource.org/licenses/AGPL-3.0 #}
{# Dashboard Column #}
{% apply spaceless %}
{% if oUIBlock.IsEditMode() %}
{% if oUIBlock.IsLastRow() %}
{% set sCellClass = "layout_cell edit_mode layout_extension" %}
{% else %}
{% set sCellClass = "layout_cell edit_mode" %}
{% endif %}
{% if oUIBlock.IsEditMode() %}
{% if oUIBlock.IsLastRow() %}
{% set sCellClass = "layout_cell edit_mode layout_extension" %}
{% else %}
{% set sCellClass = "dashboard" %}
{% set sCellClass = "layout_cell edit_mode" %}
{% endif %}
<div class="ibo-dashboard--grid-column ibo-dashboard--grid-cell {{ sCellClass }}"
data-role="ibo-dashboard--grid-cell"
data-dashboard-grid-column-index="{{ oUIBlock.GetColumnIndex() }}"
data-dashboard-grid-cell-index="{{ oUIBlock.GetCellIndex() }}">
{% for oSubBlock in oUIBlock.GetSubBlocks() %}
{{ render_block(oSubBlock, {aPage: aPage}) }}
{% endfor %}
</div>
{% endapply %}
{% else %}
{% set sCellClass = "dashboard" %}
{% endif %}
<div class="ibo-dashboard--grid-column ibo-dashboard--grid-cell {{ sCellClass }}"
data-role="ibo-dashboard--grid-cell"
data-dashboard-grid-column-index="{{ oUIBlock.GetColumnIndex() }}"
data-dashboard-grid-cell-index="{{ oUIBlock.GetCellIndex() }}">
{% for oSubBlock in oUIBlock.GetSubBlocks() %}
{{- render_block(oSubBlock, {aPage: aPage}) -}}
{% endfor %}
</div>

View File

@@ -1,16 +1,14 @@
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
{# @license http://opensource.org/licenses/AGPL-3.0 #}
{# Dashboard Layout #}
{% apply spaceless %}
{% if oUIBlock.HasTitle() or oUIBlock.HasToolbar() %}
<div class="ibo-dashboard--top-bar" data-role="ibo-dashboard--top-bar">
<div class="ibo-dashboard--top-bar-title" data-role="ibo-dashboard--top-bar-title">{{ oUIBlock.GetTitle() }}</div>
{{ render_block(oUIBlock.GetToolbar(), {aPage: aPage}) }}
</div>
{% endif %}
<div class="ibo-dashboard--grid" data-role="ibo-dashboard--grid">
{% for oSubBlock in oUIBlock.GetDashboardRows() %}
{{ render_block(oSubBlock, {aPage: aPage}) }}
{% endfor %}
{% if oUIBlock.HasTitle() or oUIBlock.HasToolbar() %}
<div class="ibo-dashboard--top-bar" data-role="ibo-dashboard--top-bar">
<div class="ibo-dashboard--top-bar-title" data-role="ibo-dashboard--top-bar-title">{{ oUIBlock.GetTitle() }}</div>
{{ render_block(oUIBlock.GetToolbar(), {aPage: aPage}) }}
</div>
{% endapply %}
{% endif %}
<div class="ibo-dashboard--grid" data-role="ibo-dashboard--grid">
{% for oSubBlock in oUIBlock.GetDashboardRows() %}
{{ render_block(oSubBlock, {aPage: aPage}) }}
{% endfor %}
</div>

View File

@@ -1,10 +1,8 @@
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
{# @license http://opensource.org/licenses/AGPL-3.0 #}
{# Dashboard Row #}
{% apply spaceless %}
<div class="ibo-dashboard--grid-row" data-role="ibo-dashboard--grid-row" data-dashboard-grid-row-index="{{ oUIBlock.GetRowIndex() }}">
{% for oSubBlock in oUIBlock.GetSubBlocks() %}
{{ render_block(oSubBlock, {aPage: aPage}) }}
{% endfor %}
</div>
{% endapply %}
<div class="ibo-dashboard--grid-row" data-role="ibo-dashboard--grid-row" data-dashboard-grid-row-index="{{ oUIBlock.GetRowIndex() }}">
{% for oSubBlock in oUIBlock.GetSubBlocks() %}
{{- render_block(oSubBlock, {aPage: aPage}) -}}
{% endfor %}
</div>

View File

@@ -1,4 +1,3 @@
{% apply spaceless %}
{% UIAlert ForWarning{sTitle:'', sContent: '', sId: null} %}
<div id="branding-error-alert-content">
<div style="display:flex;flex-align: stretch;">
@@ -10,4 +9,3 @@
<div style="display:flex;align-items:stretch;height:50rem;margin-top:0.5rem;">
<iframe width="100%" sandbox srcdoc="{{ iframe_content }}"></iframe>
</div>
{% endapply %}

View File

@@ -1,196 +1,73 @@
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
{# @license http://opensource.org/licenses/AGPL-3.0 #}
{% apply spaceless %}
{% set sId = oLayout.GetId() | sanitize(constant('utils::ENUM_SANITIZATION_FILTER_VARIABLE_NAME')) %}
{% set bHasOnInitOrOnDomReadyScripts = aPage.aJsInlineOnInit is not empty or aPage.aJsInlineOnDomReady is not empty %}
{% if bEscapeContent %}
{{ render_block(oLayout, {aPage: aPage})|escape }}
{% else %}
{{ render_block(oLayout, {aPage: aPage}) }}
{% endif %}
{% block iboPageJsInlineEarly %}
{% for sJsInline in aPage.aJsInlineEarly %}
{# We put each scripts in a dedicated script tag to prevent massive failure if 1 script is broken (eg. missing semi-colon or non closed multi-line comment) #}
<script type="text/javascript">
{{ sJsInline|raw }}
</script>
{% endfor %}
{% endblock %}
{% block iboPageJsInlineLive %}
{% for sJsInline in aPage.aJsInlineLive %}
{# We put each scripts in a dedicated script tag to prevent massive failure if 1 script is broken (eg. missing semi-colon or non closed multi-line comment) #}
<script type="text/javascript">
{{ sJsInline|raw }}
</script>
{% endfor %}
{% endblock %}
{% if bHasOnInitOrOnDomReadyScripts %}
{% set sId = oLayout.GetId() | sanitize(constant('utils::ENUM_SANITIZATION_FILTER_VARIABLE_NAME')) %}
{% set bHasOnInitOrOnDomReadyScripts = aPage.aJsInlineOnInit is not empty or aPage.aJsInlineOnDomReady is not empty %}
{% if bEscapeContent %}
{{- render_block(oLayout, {aPage: aPage})|escape -}}
{% else %}
{{- render_block(oLayout, {aPage: aPage}) -}}
{% endif %}
{% block iboPageJsInlineEarly %}
{% for sJsInline in aPage.aJsInlineEarly %}
{# We put each scripts in a dedicated script tag to prevent massive failure if 1 script is broken (eg. missing semi-colon or non closed multi-line comment) #}
<script type="text/javascript">
let fOnJsFilesLoaded{{ sId }} = function (fResolve) {
{% for sJsInline in aPage.aJsInlineOnInit %}
{{ sJsInline|raw }}
{% endfor %}
{{ sJsInline|raw }}
</script>
{% endfor %}
{% endblock %}
{% block iboPageJsInlineLive %}
{% for sJsInline in aPage.aJsInlineLive %}
{# We put each scripts in a dedicated script tag to prevent massive failure if 1 script is broken (eg. missing semi-colon or non closed multi-line comment) #}
<script type="text/javascript">
{{ sJsInline|raw }}
</script>
{% endfor %}
{% endblock %}
{% if bHasOnInitOrOnDomReadyScripts %}
<script type="text/javascript">
let fOnJsFilesLoaded{{ sId }} = function (fResolve) {
{% for sJsInline in aPage.aJsInlineOnInit %}
{{ sJsInline|raw }}
{% endfor %}
{% for sJsInline in aPage.aJsInlineOnDomReady %}
{{ sJsInline|raw }}
{% endfor %}
{% for sJsInline in aPage.aJsInlineOnDomReady %}
{{ sJsInline|raw }}
{% endfor %}
fResolve();
}
</script>
{% endif %}
{% set sPromiseId = aPage.sPromiseId %}
{% if aPage.aJsFiles is not empty %}
{% block iboPageJsFiles %}
<script type="text/javascript">
{% if bHasOnInitOrOnDomReadyScripts == false %}
// Define a dummy empty callback if there's no script to execute
let fOnJsFilesLoaded{{ sId }} = function (fResolve) {
fResolve();
}
</script>
{% endif %}
{% endif %}
{% set sPromiseId = aPage.sPromiseId %}
{% if aPage.aJsFiles is not empty %}
{% block iboPageJsFiles %}
<script type="text/javascript">
{% if bHasOnInitOrOnDomReadyScripts == false %}
// Define a dummy empty callback if there's no script to execute
let fOnJsFilesLoaded{{ sId }} = function (fResolve) {
fResolve();
}
{% endif %}
window['{{ sPromiseId }}'] = new Promise(function (fAllJsFilesResolve, fAllJsFilesReject) {
/**
* @type {Array} aJsFilesToLoad Files required by the current AjaxPage
*
* For each file:
* - "id": Used as an identifier to check if file is already being handled
* - "url" is the URL that will be used for loading. It should include any relevant query args, including the cache buster
*
* ```
* [
* {"id": "https://itop/js/foo.js", "url": "https://itop/js/foo.js?cache_buster=123},
* {"id": "https://itop/js/bar.js", "url": "https://itop/js/bar.js?a=b&cache_buster=123"},
* ...
* ]
* ```
*/
window['{{ sPromiseId }}'] = new Promise(function (fAllJsFilesResolve, fAllJsFilesReject) {
/**
* @type {Array} aJsFilesToLoad Files required by the current AjaxPage
*
* For each file:
* - "id": Used as an identifier to check if file is already being handled
* - "url" is the URL that will be used for loading. It should include any relevant query args, including the cache buster
*
* ```
* [
* {"id": "https://itop/js/foo.js", "url": "https://itop/js/foo.js?cache_buster=123},
* {"id": "https://itop/js/bar.js", "url": "https://itop/js/bar.js?a=b&cache_buster=123"},
* ...
* ]
* ```
*/
// If these constants aren't defined by the main page, define them (global) ourselves
if (typeof aLoadedJsFilesRegister === "undefined") {
Object.defineProperty(window, "aLoadedJsFilesRegister", {
value: new Map(),
writable: false,
configurable: false,
enumerable: true
});
}
if (typeof aLoadedJsFilesResolveCallbacks === "undefined") {
Object.defineProperty(window, "aLoadedJsFilesResolveCallbacks", {
value: new Map(),
writable: false,
configurable: false,
enumerable: true
});
}
let aJsFilesToLoad = [];
/**
* @type {Array} aJsFilesToLoadByOtherRequests Files required by the current AjaxPage but that are already being handled by another request (done or ongoing)
*/
let aJsFilesToLoadByOtherRequests = [];
{% for sJsFile in aPage.aJsFiles %}
aJsFilesToLoad.push({
"id": "{{ sJsFile|raw }}",
"url": "{{ sJsFile|add_itop_version|raw }}"
});
// If file is already present in the register (see it declaration in WebPage TWIG template), let its original requester load it
if (aLoadedJsFilesRegister.has("{{ sJsFile|raw }}") === true) {
aJsFilesToLoadByOtherRequests.push("{{ sJsFile|raw }}");
}
// Otherwise add it to register and initialize corresponding promise
else {
aLoadedJsFilesRegister.set("{{ sJsFile|raw }}", new Promise(function(fJsFileResolve) {
aLoadedJsFilesResolveCallbacks.set("{{ sJsFile|raw }}", fJsFileResolve);
}));
}
{% endfor %}
let iCurrentIdx = 0;
let iFilesToLoadCount = aJsFilesToLoad.length;
if (iFilesToLoadCount > 0)
{
let fLoadScript{{ sId }} = function () {
let sCurrentFileId = aJsFilesToLoad[iCurrentIdx]["id"];
let sCurrentFileUrl = aJsFilesToLoad[iCurrentIdx]["url"];
/** @type {Promise} oPromise Promise to use once file is loaded */
let oPromise = null;
// If file is handled by another request, retrieve the existing promise
if ($.inArray(sCurrentFileId, aJsFilesToLoadByOtherRequests) !== -1) {
oPromise = aLoadedJsFilesRegister.get(sCurrentFileId)
}
// Otherwise create its own promise to load it
else {
oPromise = $.when(
$.ajax({
url: sCurrentFileUrl,
dataType: 'script',
cache: true
}),
aLoadedJsFilesResolveCallbacks.get(sCurrentFileId)()
);
}
// Only once file is loaded (by the request or another), proceed to next step
oPromise.then(function () {
iCurrentIdx++;
if (iCurrentIdx !== iFilesToLoadCount)
{
fLoadScript{{ sId }}();
}
else
{
fOnJsFilesLoaded{{ sId }}(fAllJsFilesResolve);
}
});
};
fLoadScript{{ sId }}();
}
else
{
fOnJsFilesLoaded{{ sId }}(fAllJsFilesResolve);
}
});
</script>
{% endblock %}
{% else %}
{% if bHasOnInitOrOnDomReadyScripts %}
{% block iboPageJsInlineOnDomReady %}
<script type="text/javascript">
window['{{ sPromiseId }}'] = new Promise(function (fNoJsFileResolve, fNoJsFileReject) {
fOnJsFilesLoaded{{ sId }}(fNoJsFileResolve);
});
</script>
{% endblock %}
{% endif %}
{% endif %}
{% if aDeferredBlocks is not empty %}
{% for oBlock in aDeferredBlocks %}
{{ render_block(oBlock, {aPage: aPage})|raw }}
{% endfor %}
{% endif %}
{% if sDeferredContent %}
<script type="text/javascript">
$('body').append('{{ sDeferredContent|raw }}');
</script>
{% endif %}
{% block iboPageCssFiles %}
{% if aPage.aCssFiles is not empty %}
<script type="text/javascript">
// If this constant isn't defined by the main page, define it (global) ourselves
if (typeof aLoadedCssFilesRegister === "undefined") {
Object.defineProperty(window, "aLoadedCssFilesRegister", {
// If these constants aren't defined by the main page, define them (global) ourselves
if (typeof aLoadedJsFilesRegister === "undefined") {
Object.defineProperty(window, "aLoadedJsFilesRegister", {
value: new Map(),
writable: false,
configurable: false,
@@ -198,17 +75,128 @@
});
}
{% for aCssFileData in aPage.aCssFiles %}
// Only if file is NOT already present in the register (see it declaration in WebPage TWIG template), add it to the page and register
if (aLoadedCssFilesRegister.has("{{ aCssFileData['link']|raw }}") === false) {
$('<link href="{{ aCssFileData['link'] }}" rel="stylesheet">').appendTo('head');
aLoadedCssFilesRegister.set("{{ aCssFileData['link']|raw }}", true);
if (typeof aLoadedJsFilesResolveCallbacks === "undefined") {
Object.defineProperty(window, "aLoadedJsFilesResolveCallbacks", {
value: new Map(),
writable: false,
configurable: false,
enumerable: true
});
}
let aJsFilesToLoad = [];
/**
* @type {Array} aJsFilesToLoadByOtherRequests Files required by the current AjaxPage but that are already being handled by another request (done or ongoing)
*/
let aJsFilesToLoadByOtherRequests = [];
{% for sJsFile in aPage.aJsFiles %}
aJsFilesToLoad.push({
"id": "{{ sJsFile|raw }}",
"url": "{{ sJsFile|add_itop_version|raw }}"
});
// If file is already present in the register (see it declaration in WebPage TWIG template), let its original requester load it
if (aLoadedJsFilesRegister.has("{{ sJsFile|raw }}") === true) {
aJsFilesToLoadByOtherRequests.push("{{ sJsFile|raw }}");
}
// Otherwise add it to register and initialize corresponding promise
else {
aLoadedJsFilesRegister.set("{{ sJsFile|raw }}", new Promise(function(fJsFileResolve) {
aLoadedJsFilesResolveCallbacks.set("{{ sJsFile|raw }}", fJsFileResolve);
}));
}
{% endfor %}
</script>
{% endif %}
let iCurrentIdx = 0;
let iFilesToLoadCount = aJsFilesToLoad.length;
if (iFilesToLoadCount > 0)
{
let fLoadScript{{ sId }} = function () {
let sCurrentFileId = aJsFilesToLoad[iCurrentIdx]["id"];
let sCurrentFileUrl = aJsFilesToLoad[iCurrentIdx]["url"];
/** @type {Promise} oPromise Promise to use once file is loaded */
let oPromise = null;
// If file is handled by another request, retrieve the existing promise
if ($.inArray(sCurrentFileId, aJsFilesToLoadByOtherRequests) !== -1) {
oPromise = aLoadedJsFilesRegister.get(sCurrentFileId)
}
// Otherwise create its own promise to load it
else {
oPromise = $.when(
$.ajax({
url: sCurrentFileUrl,
dataType: 'script',
cache: true
}),
aLoadedJsFilesResolveCallbacks.get(sCurrentFileId)()
);
}
// Only once file is loaded (by the request or another), proceed to next step
oPromise.then(function () {
iCurrentIdx++;
if (iCurrentIdx !== iFilesToLoadCount)
{
fLoadScript{{ sId }}();
}
else
{
fOnJsFilesLoaded{{ sId }}(fAllJsFilesResolve);
}
});
};
fLoadScript{{ sId }}();
}
else
{
fOnJsFilesLoaded{{ sId }}(fAllJsFilesResolve);
}
});
</script>
{% endblock %}
{{ aPage.sCapturedOutput|raw }}
{% endapply %}
{% else %}
{% if bHasOnInitOrOnDomReadyScripts %}
{% block iboPageJsInlineOnDomReady %}
<script type="text/javascript">
window['{{ sPromiseId }}'] = new Promise(function (fNoJsFileResolve, fNoJsFileReject) {
fOnJsFilesLoaded{{ sId }}(fNoJsFileResolve);
});
</script>
{% endblock %}
{% endif %}
{% endif %}
{% if aDeferredBlocks is not empty %}
{% for oBlock in aDeferredBlocks %}
{{- render_block(oBlock, {aPage: aPage})|raw -}}
{% endfor %}
{% endif %}
{% if sDeferredContent %}
<script type="text/javascript">
$('body').append('{{ sDeferredContent|raw }}');
</script>
{% endif %}
{% block iboPageCssFiles %}
{% if aPage.aCssFiles is not empty %}
<script type="text/javascript">
// If this constant isn't defined by the main page, define it (global) ourselves
if (typeof aLoadedCssFilesRegister === "undefined") {
Object.defineProperty(window, "aLoadedCssFilesRegister", {
value: new Map(),
writable: false,
configurable: false,
enumerable: true
});
}
{% for aCssFileData in aPage.aCssFiles %}
// Only if file is NOT already present in the register (see it declaration in WebPage TWIG template), add it to the page and register
if (aLoadedCssFilesRegister.has("{{ aCssFileData['link']|raw }}") === false) {
$('<link href="{{ aCssFileData['link'] }}" rel="stylesheet">').appendTo('head');
aLoadedCssFilesRegister.set("{{ aCssFileData['link']|raw }}", true);
}
{% endfor %}
</script>
{% endif %}
{% endblock %}
{{- aPage.sCapturedOutput|raw -}}

View File

@@ -1,5 +1,3 @@
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
{# @license http://opensource.org/licenses/AGPL-3.0 #}
{% apply spaceless %}
{{ render_block(oLayout, {aPage: aPage}) }}
{% endapply %}
{{ render_block(oLayout, {aPage: aPage}) }}

View File

@@ -1,7 +1,5 @@
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
{# @license http://opensource.org/licenses/AGPL-3.0 #}
{% apply spaceless %}
<div id="ibo-page-banner" data-role="ibo-page-banner">
{{ render_block(aLayouts.oBanner, {aPage: aPage}) }}
</div>
{% endapply %}
<div id="ibo-page-banner" data-role="ibo-page-banner">
{{- render_block(aLayouts.oBanner, {aPage: aPage}) -}}
</div>

View File

@@ -1,9 +1,5 @@
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
{# @license http://opensource.org/licenses/AGPL-3.0 #}
{% apply spaceless %}
<div id="ibo-page-Footer" data-role="ibo-page-Footer">
{{ render_block(aLayouts.oFooter, {aPage: aPage}) }}
</div>
{% endapply %}
<div id="ibo-page-Footer" data-role="ibo-page-Footer">
{{- render_block(aLayouts.oFooter, {aPage: aPage}) -}}
</div>

View File

@@ -1,7 +1,5 @@
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
{# @license http://opensource.org/licenses/AGPL-3.0 #}
{% apply spaceless %}
<div id="ibo-page-header" data-role="ibo-page-header">
{{ render_block(aLayouts.oHeader, {aPage: aPage}) }}
{{- render_block(aLayouts.oHeader, {aPage: aPage}) -}}
</div>
{% endapply %}