From a9326c52f37d417af2acabddec966e46d4c274bd Mon Sep 17 00:00:00 2001
From: Tymoteusz Motylewski <t.motylewski@gmail.com>
Date: Tue, 12 Dec 2017 13:13:05 +0100
Subject: [PATCH] [BUGFIX] Register page tree navigation component after it is
 initialized

Now Viewport.NavigationContainer.setComponentInstance(tree);
is called after the tree is initialized.
A check to prevent multiple initialization calls is added.

Also position of the title edit imput is corrected
in case where there are multiple mount points.

Releases: master
Resolves: #83299
Change-Id: I5b9cc14b362ab20ecb7631babe3f3f83eb8bfb48
Reviewed-on: https://review.typo3.org/55043
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
Reviewed-by: Stefan Neufeind <typo3.neufeind@speedpartner.de>
Tested-by: Stefan Neufeind <typo3.neufeind@speedpartner.de>
Reviewed-by: Frans Saris <franssaris@gmail.com>
Reviewed-by: Wouter Wolters <typo3@wouterwolters.nl>
Tested-by: Frans Saris <franssaris@gmail.com>
Reviewed-by: Tymoteusz Motylewski <t.motylewski@gmail.com>
Tested-by: Tymoteusz Motylewski <t.motylewski@gmail.com>
---
 .../Public/JavaScript/PageTree/PageTree.js    |  3 +-
 .../JavaScript/PageTree/PageTreeDragDrop.js   |  3 +-
 .../JavaScript/PageTree/PageTreeElement.js    | 30 +++++++++----------
 3 files changed, 16 insertions(+), 20 deletions(-)

diff --git a/typo3/sysext/backend/Resources/Public/JavaScript/PageTree/PageTree.js b/typo3/sysext/backend/Resources/Public/JavaScript/PageTree/PageTree.js
index 170c48c7db9c..bd247ae34ee6 100644
--- a/typo3/sysext/backend/Resources/Public/JavaScript/PageTree/PageTree.js
+++ b/typo3/sysext/backend/Resources/Public/JavaScript/PageTree/PageTree.js
@@ -412,8 +412,7 @@ define(['jquery',
         .append('input')
         .attr('class', 'node-edit')
         .style('top', function () {
-          var top = _this.data.nodes.indexOf(node) * _this.settings.nodeHeight;
-          top = top + 15; //svg margin top
+          var top = node.y + 15; //svg margin top
           return top + 'px';
         })
         .style('left', (node.x + _this.textPosition + 5) + 'px')
diff --git a/typo3/sysext/backend/Resources/Public/JavaScript/PageTree/PageTreeDragDrop.js b/typo3/sysext/backend/Resources/Public/JavaScript/PageTree/PageTreeDragDrop.js
index 66d8ac120961..d07b8f1511d1 100644
--- a/typo3/sysext/backend/Resources/Public/JavaScript/PageTree/PageTreeDragDrop.js
+++ b/typo3/sysext/backend/Resources/Public/JavaScript/PageTree/PageTreeDragDrop.js
@@ -752,8 +752,7 @@ define([
         .append('input')
         .attr('class', 'node-edit')
         .style('top', function () {
-          var top = _this.tree.data.nodes.indexOf(newNode) * _this.tree.settings.nodeHeight;
-          top = top + 15; //svg margin top
+          var top = newNode.y + 15; //svg margin top
           return top + 'px';
         })
         .style('left', (newNode.x + _this.tree.textPosition + 5) + 'px')
diff --git a/typo3/sysext/backend/Resources/Public/JavaScript/PageTree/PageTreeElement.js b/typo3/sysext/backend/Resources/Public/JavaScript/PageTree/PageTreeElement.js
index be22f694928c..a39725abb4b1 100644
--- a/typo3/sysext/backend/Resources/Public/JavaScript/PageTree/PageTreeElement.js
+++ b/typo3/sysext/backend/Resources/Public/JavaScript/PageTree/PageTreeElement.js
@@ -46,25 +46,23 @@ define(['jquery',
      * @param {String} selector
      */
     PageTreeElement.initialize = function (selector) {
-      $(document).ready(function () {
+      $(function () {
         var $element = $(selector);
-        var tree = new PageTree();
 
-        if ($element.html().trim().length === 0) {
-          $element.append(PageTreeElement.template);
+        if ($element.html().trim().length !== 0) {
+          return;
         }
 
-        if ($('.node-loader').html().trim().length === 0) {
-          Icons.getIcon('spinner-circle-light', Icons.sizes.small).done(function (spinner) {
-            $('.node-loader').append(spinner);
-          });
-        }
+        var tree = new PageTree();
+        $element.append(PageTreeElement.template);
 
-        if ($('.svg-tree-loader').html().trim().length === 0) {
-          Icons.getIcon('spinner-circle-light', Icons.sizes.large).done(function (spinner) {
-            $('.svg-tree-loader').append(spinner);
-          });
-        }
+        Icons.getIcon('spinner-circle-light', Icons.sizes.small).done(function (spinner) {
+          $('.node-loader').append(spinner);
+        });
+
+        Icons.getIcon('spinner-circle-light', Icons.sizes.large).done(function (spinner) {
+          $('.svg-tree-loader').append(spinner);
+        });
 
         var dataUrl = top.TYPO3.settings.ajaxUrls.page_tree_data;
         var configurationUrl = top.TYPO3.settings.ajaxUrls.page_tree_configuration;
@@ -74,9 +72,9 @@ define(['jquery',
             dataUrl: dataUrl,
             showIcons: true,
           }));
-        });
 
-        Viewport.NavigationContainer.setComponentInstance(tree);
+          Viewport.NavigationContainer.setComponentInstance(tree);
+        });
 
         if (!$('#svg-toolbar').data('tree-show-toolbar')) {
           var pageTreeToolbar = new PageTreeToolbar();
-- 
GitLab