diff --git a/administrator/components/com_templates/src/View/Template/HtmlView.php b/administrator/components/com_templates/src/View/Template/HtmlView.php index 941cda3543095..984d9d8a4b27f 100644 --- a/administrator/components/com_templates/src/View/Template/HtmlView.php +++ b/administrator/components/com_templates/src/View/Template/HtmlView.php @@ -296,6 +296,9 @@ protected function addToolbar() // Add a Rename file Button ToolbarHelper::modal('renameModal', 'icon-sync', 'COM_TEMPLATES_BUTTON_RENAME_FILE'); + // Add a Copy file Button + ToolbarHelper::modal('copyFileModal', 'icon-copy', 'COM_TEMPLATES_BUTTON_COPY_FILE'); + // Add a Delete file Button ToolbarHelper::modal('deleteModal', 'icon-trash', 'COM_TEMPLATES_BUTTON_DELETE_FILE', 'btn-danger'); } diff --git a/administrator/components/com_templates/tmpl/template/default.php b/administrator/components/com_templates/tmpl/template/default.php index 4474b252c0f10..2bf939b945f8a 100644 --- a/administrator/components/com_templates/tmpl/template/default.php +++ b/administrator/components/com_templates/tmpl/template/default.php @@ -422,6 +422,26 @@ + type != 'home') : ?> + 'copyFileModal', + 'params' => [ + 'title' => Text::_('COM_TEMPLATES_BUTTON_COPY_FILE'), + 'footer' => $this->loadTemplate('modal_copy_file_footer'), + 'height' => '400px', + 'width' => '800px', + 'bodyHeight' => 70, + 'modalWidth' => 80, + ], + 'body' => $this->loadTemplate('modal_copy_file_body') + ]; + ?> +
+ + +
+ type != 'home') : ?> + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +defined('_JEXEC') or die; + +use Joomla\CMS\Factory; +use Joomla\CMS\Language\Text; +use Joomla\Filesystem\File; + +/** @var \Joomla\Component\Templates\Administrator\View\Template\HtmlView $this */ + +$input = Factory::getApplication()->getInput(); +?> +
+
+
+ +
+
+
+ +
+
+
+ + .fileName); ?> +
+
+
+
+
+
+
diff --git a/administrator/components/com_templates/tmpl/template/default_modal_copy_file_footer.php b/administrator/components/com_templates/tmpl/template/default_modal_copy_file_footer.php new file mode 100644 index 0000000000000..d224b8b9c9110 --- /dev/null +++ b/administrator/components/com_templates/tmpl/template/default_modal_copy_file_footer.php @@ -0,0 +1,21 @@ + + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +defined('_JEXEC') or die; + +use Joomla\CMS\Language\Text; + +?> + + diff --git a/media_source/com_templates/js/admin-templates-default.es6.js b/media_source/com_templates/js/admin-templates-default.es6.js index 1ffe170b61580..a2bd62ead9531 100644 --- a/media_source/com_templates/js/admin-templates-default.es6.js +++ b/media_source/com_templates/js/admin-templates-default.es6.js @@ -10,6 +10,7 @@ const innerLists = document.querySelectorAll('.folder ul, .component-folder ul, .plugin-folder ul, .layout-folder ul'); const openLists = document.querySelectorAll('.show > ul'); const fileModalFolders = document.querySelectorAll('#fileModal .folder-url'); + const copyFileModalFolders = document.querySelectorAll('#copyFileModal .folder-url'); const folderModalFolders = document.querySelectorAll('#folderModal .folder-url'); // Hide all the folders when the page loads innerLists.forEach((innerList) => { @@ -62,6 +63,28 @@ }); }); + // Copy file modal tree selector + copyFileModalFolders.forEach((copyFileModalFolder) => { + copyFileModalFolder.addEventListener('click', (event) => { + event.preventDefault(); + + copyFileModalFolders.forEach((copyFileModalFldr) => { + copyFileModalFldr.classList.remove('selected'); + }); + + event.currentTarget.classList.add('selected'); + const ismedia = event.currentTarget.dataset.base === 'media' ? 1 : 0; + + document.querySelectorAll('#copyFileModal input.address').forEach((element) => { + element.value = event.currentTarget.getAttribute('data-id'); + }); + + document.querySelectorAll('#copyFileModal input[name="isMedia"]').forEach((el) => { + el.value = ismedia; + }); + }); + }); + // Folder modal tree selector folderModalFolders.forEach((folderModalFolder) => { folderModalFolder.addEventListener('click', (event) => {