diff --git a/lib/RoadizRozierBundle/src/Controller/Ajax/Tree/AjaxFolderTreeController.php b/lib/RoadizRozierBundle/src/Controller/Ajax/Tree/AjaxFolderTreeController.php index c108393cf..6efbb2f84 100644 --- a/lib/RoadizRozierBundle/src/Controller/Ajax/Tree/AjaxFolderTreeController.php +++ b/lib/RoadizRozierBundle/src/Controller/Ajax/Tree/AjaxFolderTreeController.php @@ -71,7 +71,7 @@ public function getTreeAction(Request $request): JsonResponse 'statusCode' => '200', 'status' => 'success', 'tree_type' => $assignation['tree_type'], - 'folderTree' => $this->twig->render('@RoadizRozier/widgets/tree/rz_tree_wrapper_auto.html.twig', $assignation), + 'folderTree' => $this->twig->render('@RoadizRozier/widgets/rz_tree_wrapper_auto.html.twig', $assignation), ]); } } diff --git a/lib/RoadizRozierBundle/src/Controller/Ajax/Tree/AjaxNodeTreeController.php b/lib/RoadizRozierBundle/src/Controller/Ajax/Tree/AjaxNodeTreeController.php index 8582a7b16..ff543f4db 100644 --- a/lib/RoadizRozierBundle/src/Controller/Ajax/Tree/AjaxNodeTreeController.php +++ b/lib/RoadizRozierBundle/src/Controller/Ajax/Tree/AjaxNodeTreeController.php @@ -124,7 +124,7 @@ public function getTreeAction(Request $request): JsonResponse 'status' => 'success', 'tree_type' => $assignation['tree_type'], 'linkedTypes' => $linkedTypes, - 'nodeTree' => trim($this->twig->render('@RoadizRozier/widgets/tree/rz_tree_wrapper_auto.html.twig', $assignation)), + 'nodeTree' => trim($this->twig->render('@RoadizRozier/widgets/rz_tree_wrapper_auto.html.twig', $assignation)), ]); } } diff --git a/lib/RoadizRozierBundle/src/Controller/Ajax/Tree/AjaxTagTreeController.php b/lib/RoadizRozierBundle/src/Controller/Ajax/Tree/AjaxTagTreeController.php index 18cd24b12..6043bbe57 100644 --- a/lib/RoadizRozierBundle/src/Controller/Ajax/Tree/AjaxTagTreeController.php +++ b/lib/RoadizRozierBundle/src/Controller/Ajax/Tree/AjaxTagTreeController.php @@ -78,7 +78,7 @@ public function getTreeAction(Request $request): JsonResponse 'statusCode' => '200', 'status' => 'success', 'tree_type' => $assignation['tree_type'], - 'tagTree' => $this->twig->render('@RoadizRozier/widgets/tree/rz_tree_wrapper_auto.html.twig', $assignation), + 'tagTree' => $this->twig->render('@RoadizRozier/widgets/rz_tree_wrapper_auto.html.twig', $assignation), ]); } } diff --git a/lib/RoadizRozierBundle/templates/macros/rz_page_header.html.twig b/lib/RoadizRozierBundle/templates/macros/rz_page_header.html.twig index 9bcacd5cb..d9620aecf 100644 --- a/lib/RoadizRozierBundle/templates/macros/rz_page_header.html.twig +++ b/lib/RoadizRozierBundle/templates/macros/rz_page_header.html.twig @@ -97,14 +97,18 @@ 'translationId': translation.id, 'locale': translation.locale })) %} + + {% set attr = { href: href } %} + {% if current == translation.getId %} + {% set attr = attr|merge({ 'aria-current': 'page' }) %} + {% endif %} + {{ rz_link.root({ class: class, label: translation.preferredLocale, - attributes: { - href: href, - (current == translation.getId) ? aria-current: 'page' : null, - } + attributes: attr, }) }} + {%- endfor -%} {% if pathAddTranslations is defined and pathAddTranslations %} {% set class = 'rz-button rz-button-group__button' %} diff --git a/lib/RoadizRozierBundle/templates/nodes/tree.html.twig b/lib/RoadizRozierBundle/templates/nodes/tree.html.twig index 8a545eccd..087088056 100644 --- a/lib/RoadizRozierBundle/templates/nodes/tree.html.twig +++ b/lib/RoadizRozierBundle/templates/nodes/tree.html.twig @@ -66,12 +66,15 @@ class="rz-tree" group="nodeTree" data-entity-type="node" + data-stack-tree="true" data-is-sortable="{{ specificNodeTree.canReorder ? 'true' : 'false' }}" id="children-stack-{{ specificNodeTree.id ?? node.id ?? 'root' }}" > {% include '@RoadizRozier/widgets/nodeTree/nodeTree.html.twig' with { nodeTree: specificNodeTree, node: specificNodeTree.getRootNode, + isMainTree: false, + layout: 'condensed', } only %} {% else %} diff --git a/lib/RoadizRozierBundle/templates/widgets/folderTree/folderTree.html.twig b/lib/RoadizRozierBundle/templates/widgets/folderTree/folderTree.html.twig index 8cebda70f..43723f5ba 100644 --- a/lib/RoadizRozierBundle/templates/widgets/folderTree/folderTree.html.twig +++ b/lib/RoadizRozierBundle/templates/widgets/folderTree/folderTree.html.twig @@ -1,6 +1,7 @@ {%- if folderTree -%} diff --git a/lib/RoadizRozierBundle/templates/widgets/nodeTree/rz_node_tree_wrapper.html.twig b/lib/RoadizRozierBundle/templates/widgets/nodeTree/rz_node_tree_wrapper.html.twig deleted file mode 100644 index 14c7230fc..000000000 --- a/lib/RoadizRozierBundle/templates/widgets/nodeTree/rz_node_tree_wrapper.html.twig +++ /dev/null @@ -1,45 +0,0 @@ -{% embed '@RoadizRozier/widgets/rz_tree_wrapper.html.twig' with { - has_header: mainNodeTree, - title: 'nodeTree'|trans, - display_translations: mainNodeTree, - tree: nodeTree, - mainNodeTree: mainNodeTree, - linkedTypes: linkedTypes, - tree_type: 'node', -} only %} - - {% block head_button %} - {% if tree is defined %} - {{ _self.button({ - icon: 'rz-icon-ri--add-line', - label: not tree.rootNode ? 'add.a.node'|trans : 'add.child.node'|trans, - attributes: { - href: not tree.rootNode ? - path('nodesAddPage', { translationId: tree.translation.id }) - : path('nodesAddChildPage', { nodeId : tree.rootNode.id }), - } - }) }} - {% endif %} - {% endblock %} - - {% block after_title %} - {% import '@RoadizRozier/macros/rz_link.html.twig' as rz_link %} - {{ rz_link.root({ - icon: 'rz-icon-ri--search-line', - class: 'rz-aside__root-tree-link', - attributes: { - href: path('nodesMainTreePage', { translationId: tree.translation.id }), - title: 'see_all'|trans, - } - }) }} - {% endblock %} - - {% block tree_content %} - {% include '@RoadizRozier/widgets/nodeTree/nodeTree.html.twig' with { - nodeTree: tree, - mainNodeTree: mainNodeTree, - linkedTypes: linkedTypes, - } %} - {% endblock %} - -{% endembed %} diff --git a/lib/RoadizRozierBundle/templates/widgets/nodeTree/singleNode.html.twig b/lib/RoadizRozierBundle/templates/widgets/nodeTree/singleNode.html.twig index 0e123074d..c6a86d5d1 100644 --- a/lib/RoadizRozierBundle/templates/widgets/nodeTree/singleNode.html.twig +++ b/lib/RoadizRozierBundle/templates/widgets/nodeTree/singleNode.html.twig @@ -36,12 +36,12 @@ {% set innerClasses = innerClasses|merge(['rz-tree__item__node--not-visible']) %} {% endif %} -
  • date() %} {% set icon_class = 'rz-icon-ri--history-line' %} {% endif %} + {% set contextual_menu_id = 'node-contextual-menu-' ~ (isMainTree ? 'main-' : '') ~ node.id %} {% embed '@RoadizRozier/widgets/rz_tree_item_inner.html.twig' with { item: node, has_children: children is defined and children|length > 0, icon_class: icon_class, can_reorder: canReorder and not node.isLocked, - has_selection: nodeTree.isStackTree, + has_selection: layout == 'condensed' and not isMainTree and nodeTree.isStackTree, nodeTree: nodeTree, - isMainTree: isMainTree + isMainTree: isMainTree, + contextual_menu_id: contextual_menu_id, } only %} {% block icon_content %} - {%- if not isMainTree and not nodeTree.isStackTree -%} + {%- if layout == 'condensed' -%} {% import '@RoadizRozier/macros/rz_button.html.twig' as rz_button %} {{ rz_button.root({ @@ -165,7 +166,7 @@ class: 'tree-contextualmenu-button', attributes: { 'aria-label': 'show.actions'|trans, - popovertarget: contextual_id ~ '-popover', + popovertarget: contextual_menu_id ~ '-popover', type: 'button', } })}} @@ -194,6 +195,7 @@ "level": level + 1, 'canReorder': (node.childrenOrder == 'position'), 'is_last': loop.last, + "layout": layout, } only %} {% endfor %} diff --git a/lib/RoadizRozierBundle/templates/widgets/rz_aside.html.twig b/lib/RoadizRozierBundle/templates/widgets/rz_aside.html.twig index 0064a42c9..8b6b8a03e 100644 --- a/lib/RoadizRozierBundle/templates/widgets/rz_aside.html.twig +++ b/lib/RoadizRozierBundle/templates/widgets/rz_aside.html.twig @@ -1,7 +1,10 @@ - +{% set default_translation = getAvailableTranslations()|find(t => t.defaultTranslation) %} +
    - {% include '@RoadizRozier/widgets/tree/rz_tree_wrapper_auto.html.twig' with { - root_classes: ['rz-aside__body'], - } %} + {% include '@RoadizRozier/widgets/rz_tree_wrapper_auto.html.twig' only %}
    diff --git a/lib/RoadizRozierBundle/templates/widgets/rz_language_switcher.html.twig b/lib/RoadizRozierBundle/templates/widgets/rz_language_switcher.html.twig index 5f1965cf4..b21041d3e 100644 --- a/lib/RoadizRozierBundle/templates/widgets/rz_language_switcher.html.twig +++ b/lib/RoadizRozierBundle/templates/widgets/rz_language_switcher.html.twig @@ -5,13 +5,13 @@
      {%- for translation in translations -%} - {{ _self.item(translation, tree) }} + {{ _self.item(translation, tree, btn_attr) }} {%- endfor -%}
    {% endif %} -{% macro item(translation, tree) %} +{% macro item(translation, tree, btn_attr = {}) %}
  • {% set button_data = { emphasis: 'tertiary', @@ -21,7 +21,11 @@ {% if tree is defined %} {% set button_data = button_data|merge({ selected: translation.id == tree.translation.id }) %} - {% set button_attr = { 'data-translation-id': translation.id } %} + {% set button_attr = { + 'data-translation-id': translation.id, + 'command': '--update-translation', + 'type': 'button', + } %} {% if tree.rootNode is defined %} {% set button_attr = button_attr|merge({'data-children-parent-node': tree.rootNode.id }) %} @@ -31,10 +35,12 @@ {% set button_attr = button_attr|merge({'data-filter-tag': tree.tag.id}) %} {% endif %} - {% set button_data = button_data|merge({attributes: button_attr}) %} {% endif %} {% import "@RoadizRozier/macros/rz_button.html.twig" as rz_button %} - {{ rz_button.root(button_data) }} + {{ rz_button.root(button_data|merge({ + attributes: button_attr|merge(btn_attr) + })) + }}
  • {% endmacro %} diff --git a/lib/RoadizRozierBundle/templates/widgets/rz_tree_wrapper.html.twig b/lib/RoadizRozierBundle/templates/widgets/rz_tree_wrapper.html.twig deleted file mode 100644 index eb0304d05..000000000 --- a/lib/RoadizRozierBundle/templates/widgets/rz_tree_wrapper.html.twig +++ /dev/null @@ -1,58 +0,0 @@ -{% set type_prefix = tree_type|default('node') %} -{% set root_classes = ['rz-tree-wrapper', 'tree-widget', type_prefix ~ '-tree-widget'] %} -
    - {% if not tree %} - {% import "@RoadizRozier/macros/rz_button.html.twig" as rz_button %} - {{ rz_button.root({ - tagName: 'div', - label: 'loading'|trans, - emphasis: 'secondary', - size: 'md', - iconClass: 'rz-spinner', - class: 'rz-aside__loading-button', - attributes: { - 'aria-live': 'polite', - 'role': 'status', - } - }) }} - {% else %} - - {% if has_header is defined and has_header %} -
    - - -

    - {{ title|default('rz_aside.title'|trans) }} - {% block after_title %}{% endblock %} -

    - - {% block head_button %}{% endblock %} -
    - {% endif %} - - {% if display_translations %} - {% include '@RoadizRozier/widgets/rz_language_switcher.html.twig' with { - tree: tree, - type_prefix: type_prefix, - classes: ['rz-aside__langs', type_prefix ~ '-tree-langs'], - } only %} - {% endif %} - - {% set tree_wrapper_classes = ['rz-tree', 'rz-tree--' ~ type_prefix ] %} - {% set tree_id = tree.id ?? tree.parentNode.id ?? tree.rootTag.id ?? tree.rootFolder.id ?? 'root' %} - - {% block tree_content %}{% endblock %} - - {% endif %} -
    - -{% macro button(options) %} - {% import "@RoadizRozier/macros/rz_button.html.twig" as rz_button %} - {{ rz_button.root(options|merge({ size: 'sm', class: 'rz-aside__button' })) }} -{% endmacro %} diff --git a/lib/RoadizRozierBundle/templates/widgets/rz_tree_wrapper_auto.html.twig b/lib/RoadizRozierBundle/templates/widgets/rz_tree_wrapper_auto.html.twig new file mode 100644 index 000000000..b6c6e7b39 --- /dev/null +++ b/lib/RoadizRozierBundle/templates/widgets/rz_tree_wrapper_auto.html.twig @@ -0,0 +1,114 @@ +{% import "@RoadizRozier/macros/rz_button.html.twig" as rz_button %} + +{% set type_prefix = tree_type|default('node') %} +{% set root_classes = ['rz-tree-wrapper', 'tree-widget', type_prefix ~ '-tree-widget'] %} + +
    + {% if not tree %} + {{ rz_button.root({ + tagName: 'div', + label: 'loading'|trans, + emphasis: 'secondary', + size: 'md', + iconClass: 'rz-spinner', + class: 'rz-aside__loading-button', + attributes: { + 'aria-live': 'polite', + 'role': 'status', + } + }) }} + {% else %} +
    + +

    + {{- + tree_type == 'node' + ? 'nodeTree'|trans + : tree_type == 'tag' + ? 'tagTree'|trans + : 'folderTree'|trans + -}} +

    + + {% set btn_label = null %} + {% set btn_href = null %} + + {% if tree_type == 'node' %} + {% set btn_label = not tree.rootNode + ? 'add.a.node'|trans + : 'add.child.node'|trans %} + {% set btn_href = not tree.rootNode + ? path('nodesAddPage', { translationId: tree.translation.id }) + : path('nodesAddChildPage', { nodeId: tree.rootNode.id }) %} + + {% elseif tree_type == 'tag' %} + {% set btn_label = tree.getRootTag == null + ? 'add.a.tag'|trans + : 'add.child.tag'|trans %} + {% set btn_href = tree.getRootTag == null + ? path('tagsAddPage') + : path('tagsAddChildPage', { tagId: tree.rootTag.id }) %} + + {% elseif tree_type == 'folder' %} + {% set btn_label = tree.getRootFolder == null + ? 'add.a.folder'|trans + : 'add.child.folder'|trans %} + {% set btn_href = tree.getRootFolder == null + ? path('foldersAddPage') + : path('foldersAddChildPage', { folderId: tree.rootFolder.id }) %} + {% endif %} + + {{ rz_button.root({ + icon: 'rz-icon-ri--add-line', + size: 'sm', + label: btn_label, + class: 'rz-aside__button', + attributes: { + href: btn_href, + } + }) }} +
    + + {% if mainTree %} + {% include '@RoadizRozier/widgets/rz_language_switcher.html.twig' with { + tree: tree, + type_prefix: type_prefix, + classes: ['rz-aside__langs', type_prefix ~ '-tree-langs'], + btn_attr: { 'commandfor': 'rz-aside' }, + } only %} + {% endif %} + + {% set tree_wrapper_classes = ['rz-tree', 'rz-tree--' ~ type_prefix ] %} + {% set tree_id = tree.id ?? tree.parentNode.id ?? tree.rootTag.id ?? tree.rootFolder.id ?? 'root' %} + + {% if tree_type == 'node' %} + {% include '@RoadizRozier/widgets/nodeTree/nodeTree.html.twig' with { + nodeTree: tree, + isMainTree: not tree.rootNode.id or (isMainTree is defined and isMainTree), + linkedTypes: linkedTypes|default(null), + layout: 'condensed', + } %} + + {% elseif tree_type == 'tag' %} + {% include '@RoadizRozier/widgets/tagTree/tagTree.html.twig' with { + tagTree: tree, + isMainTree: not tree.parentTag.id or (isMainTree is defined and isMainTree), + layout: 'condensed', + } %} + + {% elseif tree_type == 'folder' %} + {% include '@RoadizRozier/widgets/folderTree/folderTree.html.twig' with { + folderTree: tree, + isMainTree: not tree.parentFolder.id or (isMainTree is defined and isMainTree), + layout: 'condensed', + } %} + {% endif %} + + {% endif %} +
    diff --git a/lib/RoadizRozierBundle/templates/widgets/tagTree/rz_tag_tree_wrapper.html.twig b/lib/RoadizRozierBundle/templates/widgets/tagTree/rz_tag_tree_wrapper.html.twig deleted file mode 100644 index b9912df4f..000000000 --- a/lib/RoadizRozierBundle/templates/widgets/tagTree/rz_tag_tree_wrapper.html.twig +++ /dev/null @@ -1,31 +0,0 @@ -{% embed '@RoadizRozier/widgets/rz_tree_wrapper.html.twig' with { - has_header: mainTagTree, - title: 'tagTree'|trans, - display_translations: mainTagTree, - tree: tagTree, - mainTagTree: mainTagTree, - tree_type: 'tag', -} only %} - - {% block head_button %} - {% if tree is defined %} - {{ _self.button({ - icon: 'rz-icon-ri--add-line', - label: tagTree.getRootTag == null ? 'add.a.tag'|trans : 'add.child.tag'|trans, - attributes: { - href: tagTree.getRootTag == null ? - path('tagsAddPage') - : path('tagsAddChildPage', { tagId : tagTree.rootTag.id }), - } - }) }} - {% endif %} - {% endblock %} - - {% block tree_content %} - {% include '@RoadizRozier/widgets/tagTree/tagTree.html.twig' with { - tagTree: tree, - mainTagTree: mainTagTree, - } only %} - {% endblock %} - -{% endembed %} diff --git a/lib/RoadizRozierBundle/templates/widgets/tagTree/tagTree.html.twig b/lib/RoadizRozierBundle/templates/widgets/tagTree/tagTree.html.twig index cf0823cd8..80825fe45 100644 --- a/lib/RoadizRozierBundle/templates/widgets/tagTree/tagTree.html.twig +++ b/lib/RoadizRozierBundle/templates/widgets/tagTree/tagTree.html.twig @@ -1,6 +1,7 @@ {%- if tagTree -%}