mirror of
https://github.com/Combodo/iTop.git
synced 2026-04-24 02:58:43 +02:00
Portal: Update code to use the CombodoPortalToolbox.OpenModal() helper
This commit is contained in:
@@ -14,132 +14,8 @@
|
|||||||
* GNU Affero General Public License for more details.
|
* GNU Affero General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU Affero General Public License
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
*
|
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a Bootstrap modal dialog from a base modal element (template or reusable one) and loads the content while displaying a nice loader.
|
|
||||||
*
|
|
||||||
* Technical: We made this to work around the base modal interactions as it was not possible to define a loader, nor to clone the base modal natively.
|
|
||||||
*
|
|
||||||
* @param oOptions
|
|
||||||
* @constructor
|
|
||||||
* @since 2.7.0
|
|
||||||
*/
|
|
||||||
var CreatePortalModal = function (oOptions)
|
|
||||||
{
|
|
||||||
// Set default options
|
|
||||||
oOptions = $.extend(
|
|
||||||
true,
|
|
||||||
{
|
|
||||||
id: null, // ID of the created modal
|
|
||||||
attributes: {}, // HTML attributes
|
|
||||||
base_modal: {
|
|
||||||
usage: 'clone', // Either 'clone' or 'replace'
|
|
||||||
selector: '#modal-for-all' // Either a selector of the modal element used to base this one on or the modal element itself
|
|
||||||
},
|
|
||||||
content: undefined, // Either a string, an object containing the endpoint / data or undefined to keep base modal content as-is
|
|
||||||
size: 'lg', // Either 'xs' / 'sm' / 'md' / 'lg'
|
|
||||||
},
|
|
||||||
oOptions
|
|
||||||
);
|
|
||||||
|
|
||||||
// Compute modal selector
|
|
||||||
var oSelectorElem = null;
|
|
||||||
switch(typeof oOptions.base_modal.selector)
|
|
||||||
{
|
|
||||||
case 'string':
|
|
||||||
oSelectorElem = $(oOptions.base_modal.selector);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'object':
|
|
||||||
oSelectorElem = oOptions.base_modal.selector;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
if (window.console && window.console.warn)
|
|
||||||
{
|
|
||||||
console.warn('Could not open modal dialog as the select option was malformed: ', oOptions.content);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get modal element by either
|
|
||||||
var oModalElem = null;
|
|
||||||
// - Create a new modal from template
|
|
||||||
// Note : This could be better if we check for an existing modal first instead of always creating a new one
|
|
||||||
if (oOptions.base_modal.usage === 'clone')
|
|
||||||
{
|
|
||||||
oModalElem = oSelectorElem.clone();
|
|
||||||
oModalElem.attr('id', oOptions.id)
|
|
||||||
.appendTo('body');
|
|
||||||
}
|
|
||||||
// - Get an existing modal in the DOM
|
|
||||||
else
|
|
||||||
{
|
|
||||||
oModalElem = oSelectorElem;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set attributes
|
|
||||||
for(var sProp in oOptions.attributes)
|
|
||||||
{
|
|
||||||
oModalElem.attr(sProp, oOptions.attributes[sProp]);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Resize to small modal
|
|
||||||
oModalElem.find('.modal-dialog')
|
|
||||||
.removeClass('modal-lg')
|
|
||||||
.addClass('modal-' + oOptions.size);
|
|
||||||
|
|
||||||
// Load content
|
|
||||||
switch (typeof oOptions.content)
|
|
||||||
{
|
|
||||||
case 'string':
|
|
||||||
oModalElem.find('.modal-content').html(oOptions.content);
|
|
||||||
|
|
||||||
//Manually triggers bootstrap event in order to keep listeners working
|
|
||||||
oModalElem.trigger('loaded.bs.modal');
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'object':
|
|
||||||
// Put loader while fetching content
|
|
||||||
oModalElem.find('.modal-content').html($('#page_overlay .overlay_content').html());
|
|
||||||
// Fetch content in background
|
|
||||||
oModalElem.find('.modal-content').load(
|
|
||||||
oOptions.content.endpoint,
|
|
||||||
oOptions.content.data || {},
|
|
||||||
function (sResponseText, sStatus)
|
|
||||||
{
|
|
||||||
// Hiding modal in case of error as the general AJAX error handler will display a message
|
|
||||||
if (sStatus === 'error')
|
|
||||||
{
|
|
||||||
oModalElem.modal('hide');
|
|
||||||
}
|
|
||||||
|
|
||||||
//Manually triggers bootstrap event in order to keep listeners working
|
|
||||||
oModalElem.trigger('loaded.bs.modal');
|
|
||||||
}
|
|
||||||
);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'undefined':
|
|
||||||
// Do nothing, we keep the content as-is
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
if (window.console && window.console.warn)
|
|
||||||
{
|
|
||||||
console.warn('Could not open modal dialog as the content option was malformed: ', oOptions.content);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Show modal
|
|
||||||
oModalElem.modal('show');
|
|
||||||
|
|
||||||
return oModalElem;
|
|
||||||
};
|
|
||||||
|
|
||||||
$(document).ready(function()
|
$(document).ready(function()
|
||||||
{
|
{
|
||||||
var oBodyElem = $('body');
|
var oBodyElem = $('body');
|
||||||
@@ -196,6 +72,6 @@ $(document).ready(function()
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
CreatePortalModal(oOptions);
|
CombodoPortalToolbox.OpenModal(oOptions);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -195,7 +195,7 @@ $(function()
|
|||||||
if(bRedirectionAjax)
|
if(bRedirectionAjax)
|
||||||
{
|
{
|
||||||
// Creating a new modal
|
// Creating a new modal
|
||||||
CreatePortalModal({
|
CombodoPortalToolbox.OpenModal({
|
||||||
content: {
|
content: {
|
||||||
endpoint: sUrl,
|
endpoint: sUrl,
|
||||||
data: {
|
data: {
|
||||||
|
|||||||
@@ -25,7 +25,7 @@
|
|||||||
sUrl = AddParameterToUrl(sUrl, 'ar_token', '{{ ar_token }}');
|
sUrl = AddParameterToUrl(sUrl, 'ar_token', '{{ ar_token }}');
|
||||||
|
|
||||||
// Creating a new modal
|
// Creating a new modal
|
||||||
CreatePortalModal({
|
CombodoPortalToolbox.OpenModal({
|
||||||
base_modal: {
|
base_modal: {
|
||||||
usage: 'replace',
|
usage: 'replace',
|
||||||
selector: $(this).closest('.modal'),
|
selector: $(this).closest('.modal'),
|
||||||
|
|||||||
@@ -143,7 +143,7 @@
|
|||||||
oEvent.stopPropagation();
|
oEvent.stopPropagation();
|
||||||
|
|
||||||
// Creating a new modal
|
// Creating a new modal
|
||||||
CreatePortalModal({
|
CombodoPortalToolbox.OpenModal({
|
||||||
content: {
|
content: {
|
||||||
endpoint: $(this).attr('href'),
|
endpoint: $(this).attr('href'),
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,21 +1,22 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
// Copyright (C) 2010-2018 Combodo SARL
|
/**
|
||||||
//
|
* Copyright (C) 2013-2019 Combodo SARL
|
||||||
// This file is part of iTop.
|
*
|
||||||
//
|
* This file is part of iTop.
|
||||||
// iTop is free software; you can redistribute it and/or modify
|
*
|
||||||
// it under the terms of the GNU Affero General Public License as published by
|
* iTop is free software; you can redistribute it and/or modify
|
||||||
// the Free Software Foundation, either version 3 of the License, or
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
// (at your option) any later version.
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
//
|
* (at your option) any later version.
|
||||||
// iTop is distributed in the hope that it will be useful,
|
*
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* iTop is distributed in the hope that it will be useful,
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
// GNU Affero General Public License for more details.
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
//
|
* GNU Affero General Public License for more details.
|
||||||
// You should have received a copy of the GNU Affero General Public License
|
*
|
||||||
// along with iTop. If not, see <http://www.gnu.org/licenses/>
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
*/
|
||||||
|
|
||||||
namespace Combodo\iTop\Renderer\Bootstrap\FieldRenderer;
|
namespace Combodo\iTop\Renderer\Bootstrap\FieldRenderer;
|
||||||
|
|
||||||
@@ -253,7 +254,7 @@ EOF
|
|||||||
oEvent.stopPropagation();
|
oEvent.stopPropagation();
|
||||||
|
|
||||||
// Note : This could be better if we check for an existing modal first instead of always creating a new one
|
// Note : This could be better if we check for an existing modal first instead of always creating a new one
|
||||||
CreatePortalModal({
|
CombodoPortalToolbox.OpenModal({
|
||||||
content: {
|
content: {
|
||||||
endpoint: $(this).attr('href'),
|
endpoint: $(this).attr('href'),
|
||||||
},
|
},
|
||||||
@@ -531,7 +532,7 @@ EOF
|
|||||||
'selector': '.modal[data-source-element="{$sButtonAddId}"]:first'
|
'selector': '.modal[data-source-element="{$sButtonAddId}"]:first'
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
CreatePortalModal(oOptions);
|
CombodoPortalToolbox.OpenModal(oOptions);
|
||||||
});
|
});
|
||||||
JS
|
JS
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -16,8 +16,6 @@
|
|||||||
* GNU Affero General Public License for more details.
|
* GNU Affero General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU Affero General Public License
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
*
|
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Combodo\iTop\Renderer\Bootstrap\FieldRenderer;
|
namespace Combodo\iTop\Renderer\Bootstrap\FieldRenderer;
|
||||||
@@ -388,7 +386,7 @@ EOF
|
|||||||
<<<JS
|
<<<JS
|
||||||
$('#{$sHierarchicalButtonId}').off('click').on('click', function(){
|
$('#{$sHierarchicalButtonId}').off('click').on('click', function(){
|
||||||
// Creating a new modal
|
// Creating a new modal
|
||||||
CreatePortalModal({
|
CombodoPortalToolbox.OpenModal({
|
||||||
attributes: {
|
attributes: {
|
||||||
'data-source-element': '{$sHierarchicalButtonId}',
|
'data-source-element': '{$sHierarchicalButtonId}',
|
||||||
},
|
},
|
||||||
@@ -448,7 +446,7 @@ JS
|
|||||||
'selector': '.modal[data-source-element="{$sSearchButtonId}"]:first'
|
'selector': '.modal[data-source-element="{$sSearchButtonId}"]:first'
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
CreatePortalModal(oOptions);
|
CombodoPortalToolbox.OpenModal(oOptions);
|
||||||
});
|
});
|
||||||
JS
|
JS
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user