mirror of
https://github.com/Combodo/iTop.git
synced 2026-02-12 23:14:18 +01:00
Revert "N°8579 - remove "spaceless" in twig files"
This reverts commit ee993ef80a.
This commit is contained in:
@@ -1,6 +1,9 @@
|
||||
{# @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'} %}
|
||||
@@ -8,7 +11,9 @@
|
||||
{% 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 %}
|
||||
@@ -19,11 +24,14 @@
|
||||
{% 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} %}
|
||||
@@ -38,12 +46,17 @@
|
||||
{% 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 %}
|
||||
@@ -1,7 +1,11 @@
|
||||
{# @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} %}
|
||||
@@ -14,26 +18,34 @@
|
||||
{% 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 }}
|
||||
@@ -45,25 +57,34 @@
|
||||
{{ '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} %}
|
||||
@@ -78,9 +99,14 @@
|
||||
{% 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 %}
|
||||
@@ -1,64 +1,68 @@
|
||||
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
|
||||
{# @license http://opensource.org/licenses/AGPL-3.0 #}
|
||||
{% 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 %}
|
||||
{% apply spaceless %}
|
||||
|
||||
{% 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 %}
|
||||
{% UIContentBlock Standard {aContainerClasses: ['ibo-update-core', 'ibo-setup--wizard']} %}
|
||||
|
||||
{% if bDoBackup %}
|
||||
{% UIAlert ForInformation {sId:'do_backup_done', sTitle:'iTopUpdate:UI:WithDBBackup'|dict_s, sContent:sBackupFile, IsHidden:true} %}{% EndUIAlert %}
|
||||
{% endif %}
|
||||
{% 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 %}
|
||||
|
||||
{% 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:'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 %}
|
||||
|
||||
{% 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) }}
|
||||
{% UIAlert ForInformation {sId:'do_backup_done', sTitle:'iTopUpdate:UI:WithDBBackup'|dict_s, sContent:sBackupFile, IsHidden:true} %}{% EndUIAlert %}
|
||||
{% 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} %}
|
||||
{% 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 %}
|
||||
{% EndUIContentBlock %}
|
||||
{% UIToolbarSpacer Standard {} %}
|
||||
{% 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} %}
|
||||
{% UIButton ForPrimaryAction {sLabel:'iTopUpdate:UI:Continue'|dict_s, sId:'setup_continue', bIsSubmit:true, IsDisabled:true} %}
|
||||
{% 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 %}
|
||||
{% EndUIToolbar %}
|
||||
|
||||
{% EndUIContentBlock %}
|
||||
{% EndUIContentBlock %}
|
||||
{% endapply %}
|
||||
@@ -1,7 +1,9 @@
|
||||
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
|
||||
{# @license http://opensource.org/licenses/AGPL-3.0 #}
|
||||
<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">
|
||||
{% 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>
|
||||
</div>
|
||||
{% endapply %}
|
||||
@@ -1,5 +1,7 @@
|
||||
{# @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 %}
|
||||
@@ -1,27 +1,29 @@
|
||||
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
|
||||
{# @license http://opensource.org/licenses/AGPL-3.0 #}
|
||||
<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 }}'">
|
||||
{{ '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 }}
|
||||
{% 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 }}'">
|
||||
{{ '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>
|
||||
<textarea id="csv_content" style="display:none;"></textarea>
|
||||
</div>
|
||||
{% endapply %}
|
||||
@@ -1,5 +1,6 @@
|
||||
{# @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 }},
|
||||
@@ -8,3 +9,4 @@ $.post(
|
||||
$('#csv_content_loading').hide();
|
||||
$('#csv_content').show();
|
||||
});
|
||||
{% endapply %}
|
||||
@@ -1,21 +1,25 @@
|
||||
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
|
||||
{# @license http://opensource.org/licenses/AGPL-3.0 #}
|
||||
{% if oUIBlock.bEmptySet or oUIBlock.bNotAuthorized %}
|
||||
<div class="ibo-block-list--empty-text">{{ 'UI:NoObjectToDisplay'|dict_s }}</div>
|
||||
{% endif %}
|
||||
{% apply spaceless %}
|
||||
|
||||
{# 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 %}
|
||||
{% if oUIBlock.bEmptySet or oUIBlock.bNotAuthorized %}
|
||||
<div class="ibo-block-list--empty-text">{{ 'UI:NoObjectToDisplay'|dict_s }}</div>
|
||||
{% endif %}
|
||||
|
||||
{% for oSubBlock in oUIBlock.GetSubBlocks() %}
|
||||
{{- render_block(oSubBlock, {aPage: aPage}) -}}
|
||||
{% endfor %}
|
||||
{# 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 %}
|
||||
@@ -1,5 +1,7 @@
|
||||
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
|
||||
{# @license http://opensource.org/licenses/AGPL-3.0 #}
|
||||
{% if oUIBlock.sEventAttachedData is not empty %}
|
||||
$('body').trigger('update_history.itop', [{{ oUIBlock.sEventAttachedData|raw }}]);
|
||||
{% endif %}
|
||||
{% apply spaceless %}
|
||||
{% if oUIBlock.sEventAttachedData is not empty %}
|
||||
$('body').trigger('update_history.itop', [{{ oUIBlock.sEventAttachedData|raw }}]);
|
||||
{% endif %}
|
||||
{% endapply %}
|
||||
@@ -1,5 +1,6 @@
|
||||
{# @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() }}',
|
||||
@@ -8,3 +9,4 @@ oWidget{{ oUIBlock.oUILinksDirectWidget.GetInputId() }} = $('#{{ oUIBlock.oUILin
|
||||
oWizardHelper: {{ oUIBlock.sWizHelper }},
|
||||
do_search: '{{ oUIBlock.sJSDoSearch }}'
|
||||
});
|
||||
{% endapply %}
|
||||
@@ -1,5 +1,6 @@
|
||||
{# @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() }}',
|
||||
@@ -14,3 +15,4 @@ oWidget{{ oUIBlock.oUILinksWidget.GetInputId() }} = new LinksWidget(
|
||||
{{ oUIBlock.aRemoved | json_encode | raw }}
|
||||
);
|
||||
oWidget{{ oUIBlock.oUILinksWidget.GetInputId() }}.Init();
|
||||
{% endapply %}
|
||||
@@ -1,3 +1,5 @@
|
||||
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
|
||||
{# @license http://opensource.org/licenses/AGPL-3.0 #}
|
||||
{% apply spaceless %}
|
||||
oWidget{{ oUIBlock.oUILinksWidget.GetInputId() }}.RegisterChange();
|
||||
{% endapply %}
|
||||
@@ -1,5 +1,7 @@
|
||||
{# @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,
|
||||
@@ -29,3 +31,5 @@ $('#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 %}
|
||||
@@ -1,6 +1,8 @@
|
||||
{# @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 %}
|
||||
@@ -1,5 +1,7 @@
|
||||
{# @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()
|
||||
{
|
||||
@@ -46,3 +48,5 @@ $('#shortcut_btn_delete').on('click', function() {
|
||||
}
|
||||
return false;
|
||||
});
|
||||
|
||||
{% endapply %}
|
||||
@@ -1,17 +1,21 @@
|
||||
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
|
||||
{# @license http://opensource.org/licenses/AGPL-3.0 #}
|
||||
<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>  
|
||||
<button class="ibo-button ibo-is-regular ibo-is-secondary cancel" onclick="window.close()">{{ 'UI:Button:Cancel'| dict_s}}</button>  
|
||||
{% apply spaceless %}
|
||||
|
||||
<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 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>  
|
||||
<button class="ibo-button ibo-is-regular ibo-is-secondary cancel" onclick="window.close()">{{ 'UI:Button:Cancel'| dict_s}}</button>  
|
||||
|
||||
</div>
|
||||
<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 %}
|
||||
@@ -1,3 +1,7 @@
|
||||
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
|
||||
{# @license http://opensource.org/licenses/AGPL-3.0 #}
|
||||
{% apply spaceless %}
|
||||
|
||||
var oHiddeableChapters = {};
|
||||
|
||||
{% endapply %}
|
||||
@@ -1,5 +1,7 @@
|
||||
{# @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)
|
||||
{
|
||||
@@ -26,3 +28,5 @@ $('fieldset').each(function() {
|
||||
$('legend').css('cursor', 'pointer').on('click', function(){
|
||||
$(this).parent('fieldset').toggleClass('not-printable strikethrough');
|
||||
});
|
||||
|
||||
{% endapply %}
|
||||
@@ -1,17 +1,18 @@
|
||||
|
||||
<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 %}
|
||||
{% 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 %}
|
||||
>
|
||||
{% for oButton in oUIBlock.GetButtons() %}
|
||||
{{- render_block(oButton) -}}
|
||||
{{ render_block(oButton) }}
|
||||
{% endfor %}
|
||||
</span>
|
||||
{% for oExtraBlock in oUIBlock.GetExtraBlocks() %}
|
||||
{{- render_block(oExtraBlock) -}}
|
||||
{% endfor %}
|
||||
{% for oExtraBlock in oUIBlock.GetExtraBlocks() %}
|
||||
{{ render_block(oExtraBlock) }}
|
||||
{% endfor %}
|
||||
{% endapply %}
|
||||
@@ -1,31 +1,33 @@
|
||||
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
|
||||
{# @license http://opensource.org/licenses/AGPL-3.0 #}
|
||||
<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>
|
||||
{% 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>
|
||||
{% endif %}
|
||||
{% 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>
|
||||
</div>
|
||||
{% endapply %}
|
||||
@@ -1,15 +1,17 @@
|
||||
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
|
||||
{# @license http://opensource.org/licenses/AGPL-3.0 #}
|
||||
<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 %}
|
||||
{% 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>
|
||||
</div>
|
||||
{% endapply %}
|
||||
@@ -1,6 +1,8 @@
|
||||
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
|
||||
{# @license http://opensource.org/licenses/AGPL-3.0 #}
|
||||
<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>
|
||||
{% 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 %}
|
||||
@@ -1,2 +1,5 @@
|
||||
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
|
||||
{# @license http://opensource.org/licenses/AGPL-3.0 #}
|
||||
{% apply spaceless %}
|
||||
|
||||
{% endapply %}
|
||||
@@ -13,9 +13,11 @@
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
>
|
||||
{% block iboContentBlockContainer %}
|
||||
{% for oSubBlock in oUIBlock.GetSubBlocks() %}
|
||||
{{- render_block(oSubBlock, {aPage: aPage}) -}}
|
||||
{% endfor %}
|
||||
{% endblock %}
|
||||
{% apply spaceless %}
|
||||
{% block iboContentBlockContainer %}
|
||||
{% for oSubBlock in oUIBlock.GetSubBlocks() %}
|
||||
{{ render_block(oSubBlock, {aPage: aPage}) }}
|
||||
{% endfor %}
|
||||
{% endblock %}
|
||||
{% endapply %}
|
||||
</form>
|
||||
@@ -1,13 +1,15 @@
|
||||
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
|
||||
{# @license http://opensource.org/licenses/AGPL-3.0 #}
|
||||
<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>
|
||||
{% 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 %}
|
||||
@@ -1,5 +1,6 @@
|
||||
{# @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() }}" />
|
||||
@@ -11,3 +12,4 @@
|
||||
<div class="ibo-medallion-icon--description">{{ oUIBlock.GetDescription() }}</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endapply %}
|
||||
@@ -1,12 +1,14 @@
|
||||
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
|
||||
{# @license http://opensource.org/licenses/AGPL-3.0 #}
|
||||
<div id="{{ oUIBlock.GetId() }}" class="ibo-spinner ibo-is-{{ oUIBlock.GetSize() }}
|
||||
{% if oUIBlock.IsHidden() %}ibo-is-hidden{% endif %}
|
||||
{{ oUIBlock.GetBlocksInheritanceCSSClassesAsString() }}
|
||||
{{ oUIBlock.GetAdditionalCSSClassesAsString() }}"
|
||||
{% apply spaceless %}
|
||||
<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>
|
||||
</div>
|
||||
{% endapply %}
|
||||
@@ -1,7 +1,9 @@
|
||||
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
|
||||
{# @license http://opensource.org/licenses/AGPL-3.0 #}
|
||||
<template id="{{ oUIBlock.GetId() }}" data-role="ibo-template">
|
||||
{% for oSubBlock in oUIBlock.GetSubBlocks() %}
|
||||
{{- render_block(oSubBlock, {aPage: aPage}) -}}
|
||||
{% endfor %}
|
||||
</template>
|
||||
{% apply spaceless %}
|
||||
<template id="{{ oUIBlock.GetId() }}" data-role="ibo-template">
|
||||
{% for oSubBlock in oUIBlock.GetSubBlocks() %}
|
||||
{{ render_block(oSubBlock, {aPage: aPage}) }}
|
||||
{% endfor %}
|
||||
</template>
|
||||
{% endapply %}
|
||||
@@ -1,3 +1,5 @@
|
||||
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
|
||||
{# @license http://opensource.org/licenses/AGPL-3.0 #}
|
||||
{{ oUIBlock.GetText() }}
|
||||
{% apply spaceless %}
|
||||
{{ oUIBlock.GetText() }}
|
||||
{% endapply %}
|
||||
@@ -1,16 +1,18 @@
|
||||
<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>
|
||||
{% 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>
|
||||
{% 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>
|
||||
</div>
|
||||
{% endapply %}
|
||||
@@ -1,10 +1,14 @@
|
||||
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
|
||||
{# @license http://opensource.org/licenses/AGPL-3.0 #}
|
||||
{# Toolbar #}
|
||||
<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>
|
||||
{% 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 %}
|
||||
@@ -1,8 +1,9 @@
|
||||
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
|
||||
{# @license http://opensource.org/licenses/AGPL-3.0 #}
|
||||
|
||||
<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>
|
||||
{% 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 %}
|
||||
@@ -1,4 +1,6 @@
|
||||
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
|
||||
{# @license http://opensource.org/licenses/AGPL-3.0 #}
|
||||
<div id="{{ oUIBlock.GetId() }}" class="{{ oUIBlock.GetBlocksInheritanceCSSClassesAsString() }} {{ oUIBlock.GetAdditionalCSSClassesAsString() }} {% if oUIBlock.IsHidden() %}ibo-is-hidden{% endif %}">
|
||||
</div>
|
||||
{% apply spaceless %}
|
||||
<div id="{{ oUIBlock.GetId() }}" class="{{ oUIBlock.GetBlocksInheritanceCSSClassesAsString() }} {{ oUIBlock.GetAdditionalCSSClassesAsString() }} {% if oUIBlock.IsHidden() %}ibo-is-hidden{% endif %}">
|
||||
</div>
|
||||
{% endapply %}
|
||||
@@ -32,6 +32,7 @@
|
||||
</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">
|
||||
@@ -47,6 +48,7 @@
|
||||
data-raw-datetime="{{ oUIBlock.GetRawDateTime() }}"
|
||||
data-formatted-datetime="{{ oUIBlock.GetFormattedDateTime() }}">{{ oUIBlock.GetFormattedDateTime() }}</span>
|
||||
{% endblock %}
|
||||
{% endapply %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
</div>
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
{% 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"
|
||||
@@ -14,17 +15,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>
|
||||
@@ -35,3 +36,4 @@
|
||||
<span class="ibo-caselog-entry-form--lock-message" data-role="ibo-caselog-entry-form--lock-message"></span>
|
||||
</div>
|
||||
</form>
|
||||
{% endapply %}
|
||||
@@ -1,18 +1,23 @@
|
||||
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
|
||||
{# @license http://opensource.org/licenses/AGPL-3.0 #}
|
||||
{# Content Block #}
|
||||
{# 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 %}
|
||||
{% 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 %}
|
||||
@@ -1,20 +1,22 @@
|
||||
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
|
||||
{# @license http://opensource.org/licenses/AGPL-3.0 #}
|
||||
{# Dashboard Column #}
|
||||
{% if oUIBlock.IsEditMode() %}
|
||||
{% if oUIBlock.IsLastRow() %}
|
||||
{% set sCellClass = "layout_cell edit_mode layout_extension" %}
|
||||
{% apply spaceless %}
|
||||
{% if oUIBlock.IsEditMode() %}
|
||||
{% if oUIBlock.IsLastRow() %}
|
||||
{% set sCellClass = "layout_cell edit_mode layout_extension" %}
|
||||
{% else %}
|
||||
{% set sCellClass = "layout_cell edit_mode" %}
|
||||
{% endif %}
|
||||
{% else %}
|
||||
{% set sCellClass = "layout_cell edit_mode" %}
|
||||
{% set sCellClass = "dashboard" %}
|
||||
{% endif %}
|
||||
{% 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>
|
||||
<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 %}
|
||||
@@ -1,14 +1,16 @@
|
||||
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
|
||||
{# @license http://opensource.org/licenses/AGPL-3.0 #}
|
||||
{# Dashboard Layout #}
|
||||
{% 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}) }}
|
||||
{% 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 %}
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="ibo-dashboard--grid" data-role="ibo-dashboard--grid">
|
||||
{% for oSubBlock in oUIBlock.GetDashboardRows() %}
|
||||
{{ render_block(oSubBlock, {aPage: aPage}) }}
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endapply %}
|
||||
@@ -1,8 +1,10 @@
|
||||
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
|
||||
{# @license http://opensource.org/licenses/AGPL-3.0 #}
|
||||
{# Dashboard Row #}
|
||||
<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>
|
||||
{% 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 %}
|
||||
@@ -1,3 +1,4 @@
|
||||
{% apply spaceless %}
|
||||
{% UIAlert ForWarning{sTitle:'', sContent: '', sId: null} %}
|
||||
<div id="branding-error-alert-content">
|
||||
<div style="display:flex;flex-align: stretch;">
|
||||
@@ -9,3 +10,4 @@
|
||||
<div style="display:flex;align-items:stretch;height:50rem;margin-top:0.5rem;">
|
||||
<iframe width="100%" sandbox srcdoc="{{ iframe_content }}"></iframe>
|
||||
</div>
|
||||
{% endapply %}
|
||||
@@ -1,202 +1,214 @@
|
||||
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
|
||||
{# @license http://opensource.org/licenses/AGPL-3.0 #}
|
||||
{% 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 %}
|
||||
<script type="text/javascript">
|
||||
let fOnJsFilesLoaded{{ sId }} = function (fResolve) {
|
||||
{% for sJsInline in aPage.aJsInlineOnInit %}
|
||||
{{ sJsInline|raw }}
|
||||
{% endfor %}
|
||||
{% 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 %}
|
||||
|
||||
{% for sJsInline in aPage.aJsInlineOnDomReady %}
|
||||
{% 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 }}
|
||||
{% endfor %}
|
||||
fResolve();
|
||||
}
|
||||
</script>
|
||||
{% endif %}
|
||||
{% set sPromiseId = aPage.sPromiseId %}
|
||||
{% if aPage.aJsFiles is not empty %}
|
||||
{% block iboPageJsFiles %}
|
||||
</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">
|
||||
{% 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"},
|
||||
* ...
|
||||
* ]
|
||||
* ```
|
||||
*/
|
||||
|
||||
// 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);
|
||||
}));
|
||||
}
|
||||
{% for sJsInline in aPage.aJsInlineOnInit %}
|
||||
{{ sJsInline|raw }}
|
||||
{% 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);
|
||||
}
|
||||
});
|
||||
{% for sJsInline in aPage.aJsInlineOnDomReady %}
|
||||
{{ sJsInline|raw }}
|
||||
{% endfor %}
|
||||
fResolve();
|
||||
}
|
||||
</script>
|
||||
{% endblock %}
|
||||
{% else %}
|
||||
{% if bHasOnInitOrOnDomReadyScripts %}
|
||||
{% block iboPageJsInlineOnDomReady %}
|
||||
{% endif %}
|
||||
|
||||
{% set sPromiseId = aPage.sPromiseId %}
|
||||
{% if aPage.aJsFiles is not empty %}
|
||||
{% block iboPageJsFiles %}
|
||||
<script type="text/javascript">
|
||||
window['{{ sPromiseId }}'] = new Promise(function (fNoJsFileResolve, fNoJsFileReject) {
|
||||
fOnJsFilesLoaded{{ sId }}(fNoJsFileResolve);
|
||||
{% 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"},
|
||||
* ...
|
||||
* ]
|
||||
* ```
|
||||
*/
|
||||
|
||||
// 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 %}
|
||||
{% 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 %}
|
||||
|
||||
{% if aDeferredBlocks is not empty %}
|
||||
{% for oBlock in aDeferredBlocks %}
|
||||
{{ render_block(oBlock, {aPage: aPage})|raw }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
{% if sDeferredContent %}
|
||||
<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 %}
|
||||
$('body').append('{{ sDeferredContent|raw }}');
|
||||
</script>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
{{- aPage.sCapturedOutput|raw -}}
|
||||
|
||||
{% 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 }}
|
||||
|
||||
{% endapply %}
|
||||
@@ -1,3 +1,5 @@
|
||||
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
|
||||
{# @license http://opensource.org/licenses/AGPL-3.0 #}
|
||||
{{ render_block(oLayout, {aPage: aPage}) }}
|
||||
{% apply spaceless %}
|
||||
{{ render_block(oLayout, {aPage: aPage}) }}
|
||||
{% endapply %}
|
||||
@@ -1,5 +1,7 @@
|
||||
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
|
||||
{# @license http://opensource.org/licenses/AGPL-3.0 #}
|
||||
<div id="ibo-page-banner" data-role="ibo-page-banner">
|
||||
{{- render_block(aLayouts.oBanner, {aPage: aPage}) -}}
|
||||
</div>
|
||||
{% apply spaceless %}
|
||||
<div id="ibo-page-banner" data-role="ibo-page-banner">
|
||||
{{ render_block(aLayouts.oBanner, {aPage: aPage}) }}
|
||||
</div>
|
||||
{% endapply %}
|
||||
@@ -1,5 +1,9 @@
|
||||
{# @copyright Copyright (C) 2010-2024 Combodo SAS #}
|
||||
{# @license http://opensource.org/licenses/AGPL-3.0 #}
|
||||
<div id="ibo-page-Footer" data-role="ibo-page-Footer">
|
||||
{{- render_block(aLayouts.oFooter, {aPage: aPage}) -}}
|
||||
</div>
|
||||
{% apply spaceless %}
|
||||
|
||||
<div id="ibo-page-Footer" data-role="ibo-page-Footer">
|
||||
{{ render_block(aLayouts.oFooter, {aPage: aPage}) }}
|
||||
</div>
|
||||
|
||||
{% endapply %}
|
||||
@@ -1,5 +1,7 @@
|
||||
{# @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 %}
|
||||
Reference in New Issue
Block a user