Refactor initialization flow to accommodate future scalability and integration with all designated areas. Refactor the Creator Builders class. Refactor the FieldString and FieldXML classes.
358 lines
12 KiB
PHP
358 lines
12 KiB
PHP
<?php
|
|
/**
|
|
* @package Joomla.Component.Builder
|
|
*
|
|
* @created 30th April, 2015
|
|
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
|
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
|
|
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
|
|
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
|
*/
|
|
|
|
use Joomla\CMS\Factory;
|
|
use Joomla\CMS\Language\Text;
|
|
use Joomla\CMS\HTML\HTMLHelper as Html;
|
|
use Joomla\CMS\Layout\LayoutHelper;
|
|
use Joomla\CMS\Router\Route;
|
|
use VDM\Component\Componentbuilder\Administrator\Helper\ComponentbuilderHelper;
|
|
use Joomla\CMS\Uri\Uri;
|
|
|
|
/** @var Joomla\CMS\WebAsset\WebAssetManager $wa */
|
|
$wa = $this->getDocument()->getWebAssetManager();
|
|
$wa->useScript('keepalive')->useScript('form.validate');
|
|
Html::_('bootstrap.tooltip');
|
|
|
|
// No direct access to this file
|
|
defined('_JEXEC') or die;
|
|
|
|
$layout = $this->isModal ? 'modal' : 'edit';
|
|
$tmpl = $this->input->get('tmpl');
|
|
$tmpl = $tmpl ? '&tmpl=' . $tmpl : '';
|
|
?>
|
|
<script type="text/javascript">
|
|
// waiting spinner
|
|
var outerDiv = document.querySelector('body');
|
|
var loadingDiv = document.createElement('div');
|
|
loadingDiv.id = 'loading';
|
|
loadingDiv.style.cssText = "background: rgba(255, 255, 255, .8) url('components/com_componentbuilder/assets/images/ajax.gif') 50% 35% no-repeat; top: " + (outerDiv.getBoundingClientRect().top + window.pageYOffset) + "px; left: " + (outerDiv.getBoundingClientRect().left + window.pageXOffset) + "px; width: " + outerDiv.offsetWidth + "px; height: " + outerDiv.offsetHeight + "px; position: fixed; opacity: 0.80; -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80); filter: alpha(opacity=80); display: none;";
|
|
outerDiv.appendChild(loadingDiv);
|
|
loadingDiv.style.display = 'block';
|
|
// when page is ready remove and show
|
|
window.addEventListener('load', function() {
|
|
var componentLoader = document.getElementById('componentbuilder_loader');
|
|
if (componentLoader) componentLoader.style.display = 'block';
|
|
loadingDiv.style.display = 'none';
|
|
});
|
|
</script>
|
|
<div id="componentbuilder_loader" style="display: none;">
|
|
<form action="<?php echo Route::_('index.php?option=com_componentbuilder&&layout=' . $layout . $tmpl . '&id='. (int) $this->item->id . $this->referral); ?>" method="post" name="adminForm" id="adminForm" class="form-validate" enctype="multipart/form-data">
|
|
|
|
<?php echo LayoutHelper::render('field.set_properties_above', $this); ?>
|
|
<div class="main-card">
|
|
|
|
<?php echo Html::_('uitab.startTabSet', 'fieldTab', ['active' => 'set_properties', 'recall' => true]); ?>
|
|
|
|
<?php echo Html::_('uitab.addTab', 'fieldTab', 'set_properties', Text::_('COM_COMPONENTBUILDER_FIELD_SET_PROPERTIES', true)); ?>
|
|
<div class="row">
|
|
</div>
|
|
<div class="row">
|
|
<div class="col-md-12">
|
|
<?php echo LayoutHelper::render('field.set_properties_fullwidth', $this); ?>
|
|
</div>
|
|
</div>
|
|
<?php echo Html::_('uitab.endTab'); ?>
|
|
|
|
<?php echo Html::_('uitab.addTab', 'fieldTab', 'database', Text::_('COM_COMPONENTBUILDER_FIELD_DATABASE', true)); ?>
|
|
<div class="row">
|
|
<div class="col-md-6">
|
|
<?php echo LayoutHelper::render('field.database_left', $this); ?>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<?php echo LayoutHelper::render('field.database_right', $this); ?>
|
|
</div>
|
|
</div>
|
|
<div class="row">
|
|
<div class="col-md-12">
|
|
<?php echo LayoutHelper::render('field.database_fullwidth', $this); ?>
|
|
</div>
|
|
</div>
|
|
<?php echo Html::_('uitab.endTab'); ?>
|
|
|
|
<?php echo Html::_('uitab.addTab', 'fieldTab', 'scripts', Text::_('COM_COMPONENTBUILDER_FIELD_SCRIPTS', true)); ?>
|
|
<div class="row">
|
|
<div class="col-md-6">
|
|
<?php echo LayoutHelper::render('field.scripts_left', $this); ?>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<?php echo LayoutHelper::render('field.scripts_right', $this); ?>
|
|
</div>
|
|
</div>
|
|
<?php echo Html::_('uitab.endTab'); ?>
|
|
|
|
<?php echo Html::_('uitab.addTab', 'fieldTab', 'type_info', Text::_('COM_COMPONENTBUILDER_FIELD_TYPE_INFO', true)); ?>
|
|
<div class="row">
|
|
</div>
|
|
<div class="row">
|
|
<div class="col-md-12">
|
|
<?php echo LayoutHelper::render('field.type_info_fullwidth', $this); ?>
|
|
</div>
|
|
</div>
|
|
<?php echo Html::_('uitab.endTab'); ?>
|
|
|
|
<?php $this->ignore_fieldsets = array('details','metadata','vdmmetadata','accesscontrol'); ?>
|
|
<?php $this->tab_name = 'fieldTab'; ?>
|
|
<?php echo LayoutHelper::render('joomla.edit.params', $this); ?>
|
|
|
|
<?php if ($this->canDo->get('core.edit.created_by') || $this->canDo->get('core.edit.created') || $this->canDo->get('field.edit.state') || ($this->canDo->get('field.delete') && $this->canDo->get('field.edit.state'))) : ?>
|
|
<?php echo Html::_('uitab.addTab', 'fieldTab', 'publishing', Text::_('COM_COMPONENTBUILDER_FIELD_PUBLISHING', true)); ?>
|
|
<div class="row">
|
|
<div class="col-md-6">
|
|
<?php echo LayoutHelper::render('field.publishing', $this); ?>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<?php echo LayoutHelper::render('field.publlshing', $this); ?>
|
|
</div>
|
|
</div>
|
|
<?php echo Html::_('uitab.endTab'); ?>
|
|
<?php endif; ?>
|
|
|
|
<?php if ($this->canDo->get('core.admin')) : ?>
|
|
<?php echo Html::_('uitab.addTab', 'fieldTab', 'permissions', Text::_('COM_COMPONENTBUILDER_FIELD_PERMISSION', true)); ?>
|
|
<div class="row">
|
|
<div class="col-md-12">
|
|
<fieldset id="fieldset-rules" class="options-form">
|
|
<legend><?php echo Text::_('COM_COMPONENTBUILDER_FIELD_PERMISSION'); ?></legend>
|
|
<div>
|
|
<?php echo $this->form->getInput('rules'); ?>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
</div>
|
|
<?php echo Html::_('uitab.endTab'); ?>
|
|
<?php endif; ?>
|
|
|
|
<?php echo Html::_('uitab.endTabSet'); ?>
|
|
|
|
<div>
|
|
<input type="hidden" name="task" value="field.edit" />
|
|
<?php echo Html::_('form.token'); ?>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="clearfix"></div>
|
|
<?php echo LayoutHelper::render('field.set_properties_under', $this); ?>
|
|
</form>
|
|
</div>
|
|
|
|
<script type="text/javascript">
|
|
|
|
// #jform_datalenght listeners for datalenght_vvvvwbd function
|
|
jQuery('#jform_datalenght').on('keyup',function()
|
|
{
|
|
var datalenght_vvvvwbd = jQuery("#jform_datalenght").val();
|
|
vvvvwbd(datalenght_vvvvwbd);
|
|
|
|
});
|
|
jQuery('#adminForm').on('change', '#jform_datalenght',function (e)
|
|
{
|
|
e.preventDefault();
|
|
var datalenght_vvvvwbd = jQuery("#jform_datalenght").val();
|
|
vvvvwbd(datalenght_vvvvwbd);
|
|
|
|
});
|
|
|
|
// #jform_datadefault listeners for datadefault_vvvvwbe function
|
|
jQuery('#jform_datadefault').on('keyup',function()
|
|
{
|
|
var datadefault_vvvvwbe = jQuery("#jform_datadefault").val();
|
|
vvvvwbe(datadefault_vvvvwbe);
|
|
|
|
});
|
|
jQuery('#adminForm').on('change', '#jform_datadefault',function (e)
|
|
{
|
|
e.preventDefault();
|
|
var datadefault_vvvvwbe = jQuery("#jform_datadefault").val();
|
|
vvvvwbe(datadefault_vvvvwbe);
|
|
|
|
});
|
|
|
|
// #jform_datatype listeners for datatype_vvvvwbf function
|
|
jQuery('#jform_datatype').on('keyup',function()
|
|
{
|
|
var datatype_vvvvwbf = jQuery("#jform_datatype").val();
|
|
vvvvwbf(datatype_vvvvwbf);
|
|
|
|
});
|
|
jQuery('#adminForm').on('change', '#jform_datatype',function (e)
|
|
{
|
|
e.preventDefault();
|
|
var datatype_vvvvwbf = jQuery("#jform_datatype").val();
|
|
vvvvwbf(datatype_vvvvwbf);
|
|
|
|
});
|
|
|
|
// #jform_datatype listeners for datatype_vvvvwbg function
|
|
jQuery('#jform_datatype').on('keyup',function()
|
|
{
|
|
var datatype_vvvvwbg = jQuery("#jform_datatype").val();
|
|
vvvvwbg(datatype_vvvvwbg);
|
|
|
|
});
|
|
jQuery('#adminForm').on('change', '#jform_datatype',function (e)
|
|
{
|
|
e.preventDefault();
|
|
var datatype_vvvvwbg = jQuery("#jform_datatype").val();
|
|
vvvvwbg(datatype_vvvvwbg);
|
|
|
|
});
|
|
|
|
// #jform_store listeners for store_vvvvwbj function
|
|
jQuery('#jform_store').on('keyup',function()
|
|
{
|
|
var store_vvvvwbj = jQuery("#jform_store").val();
|
|
vvvvwbj(store_vvvvwbj);
|
|
|
|
});
|
|
jQuery('#adminForm').on('change', '#jform_store',function (e)
|
|
{
|
|
e.preventDefault();
|
|
var store_vvvvwbj = jQuery("#jform_store").val();
|
|
vvvvwbj(store_vvvvwbj);
|
|
|
|
});
|
|
|
|
// #jform_add_css_view listeners for add_css_view_vvvvwbk function
|
|
jQuery('#jform_add_css_view').on('keyup',function()
|
|
{
|
|
var add_css_view_vvvvwbk = jQuery("#jform_add_css_view input[type='radio']:checked").val();
|
|
vvvvwbk(add_css_view_vvvvwbk);
|
|
|
|
});
|
|
jQuery('#adminForm').on('change', '#jform_add_css_view',function (e)
|
|
{
|
|
e.preventDefault();
|
|
var add_css_view_vvvvwbk = jQuery("#jform_add_css_view input[type='radio']:checked").val();
|
|
vvvvwbk(add_css_view_vvvvwbk);
|
|
|
|
});
|
|
|
|
// #jform_add_css_views listeners for add_css_views_vvvvwbl function
|
|
jQuery('#jform_add_css_views').on('keyup',function()
|
|
{
|
|
var add_css_views_vvvvwbl = jQuery("#jform_add_css_views input[type='radio']:checked").val();
|
|
vvvvwbl(add_css_views_vvvvwbl);
|
|
|
|
});
|
|
jQuery('#adminForm').on('change', '#jform_add_css_views',function (e)
|
|
{
|
|
e.preventDefault();
|
|
var add_css_views_vvvvwbl = jQuery("#jform_add_css_views input[type='radio']:checked").val();
|
|
vvvvwbl(add_css_views_vvvvwbl);
|
|
|
|
});
|
|
|
|
// #jform_add_javascript_view_footer listeners for add_javascript_view_footer_vvvvwbm function
|
|
jQuery('#jform_add_javascript_view_footer').on('keyup',function()
|
|
{
|
|
var add_javascript_view_footer_vvvvwbm = jQuery("#jform_add_javascript_view_footer input[type='radio']:checked").val();
|
|
vvvvwbm(add_javascript_view_footer_vvvvwbm);
|
|
|
|
});
|
|
jQuery('#adminForm').on('change', '#jform_add_javascript_view_footer',function (e)
|
|
{
|
|
e.preventDefault();
|
|
var add_javascript_view_footer_vvvvwbm = jQuery("#jform_add_javascript_view_footer input[type='radio']:checked").val();
|
|
vvvvwbm(add_javascript_view_footer_vvvvwbm);
|
|
|
|
});
|
|
|
|
// #jform_add_javascript_views_footer listeners for add_javascript_views_footer_vvvvwbn function
|
|
jQuery('#jform_add_javascript_views_footer').on('keyup',function()
|
|
{
|
|
var add_javascript_views_footer_vvvvwbn = jQuery("#jform_add_javascript_views_footer input[type='radio']:checked").val();
|
|
vvvvwbn(add_javascript_views_footer_vvvvwbn);
|
|
|
|
});
|
|
jQuery('#adminForm').on('change', '#jform_add_javascript_views_footer',function (e)
|
|
{
|
|
e.preventDefault();
|
|
var add_javascript_views_footer_vvvvwbn = jQuery("#jform_add_javascript_views_footer input[type='radio']:checked").val();
|
|
vvvvwbn(add_javascript_views_footer_vvvvwbn);
|
|
|
|
});
|
|
|
|
|
|
|
|
jQuery(function() {
|
|
setTimeout(
|
|
function() {
|
|
// make sure the code bocks are active
|
|
document.querySelectorAll("code").forEach(function(codeBlock) {
|
|
codeBlock.addEventListener("click", function() {
|
|
codeBlock.selText(); // Call the custom selText function
|
|
codeBlock.classList.add("selected"); // Add the "selected" class
|
|
});
|
|
});
|
|
}, 2000);
|
|
});
|
|
|
|
jQuery('#adminForm').on('change', '#jform_fieldtype',function (e) {
|
|
e.preventDefault();
|
|
// get type value
|
|
var fieldId = jQuery("#jform_fieldtype option:selected").val();
|
|
getFieldTypeProperties(fieldId, true);
|
|
// get the field type text
|
|
var fieldText = jQuery("#jform_fieldtype option:selected").text().toLowerCase();
|
|
// now check if database input is needed
|
|
dbChecker(fieldText);
|
|
});
|
|
|
|
|
|
HTMLElement.prototype.selText = function() {
|
|
var obj = this;
|
|
|
|
// For modern browsers, handle the selection
|
|
var selection = window.getSelection();
|
|
var range = document.createRange();
|
|
|
|
// Select the content of the element
|
|
range.selectNodeContents(obj);
|
|
selection.removeAllRanges(); // Clear any previous selections
|
|
selection.addRange(range); // Add the new selection range
|
|
|
|
return this;
|
|
};
|
|
|
|
<?php
|
|
$app = Factory::getApplication();
|
|
?>
|
|
function JRouter(link) {
|
|
<?php
|
|
if ($app->isClient('site'))
|
|
{
|
|
echo 'var url = "'. Uri::root() . '";';
|
|
}
|
|
else
|
|
{
|
|
echo 'var url = "";';
|
|
}
|
|
?>
|
|
return url+link;
|
|
}
|
|
|
|
document.addEventListener("DOMContentLoaded", function() {
|
|
document.querySelectorAll(".loading-dots").forEach(function(loading_dots) {
|
|
let x = 0;
|
|
let intervalId = setInterval(function() {
|
|
if (!loading_dots.classList.contains("loading-dots")) {
|
|
clearInterval(intervalId);
|
|
return;
|
|
}
|
|
let dots = ".".repeat(x % 8);
|
|
loading_dots.textContent = dots;
|
|
x++;
|
|
}, 500);
|
|
});
|
|
});
|
|
</script>
|