[BUGFIX] Fix unclear position for the new page using the wizard 96/50396/2
authorMichael Oehlhof <typo3@oehlhof.de>
Sat, 22 Oct 2016 09:31:19 +0000 (11:31 +0200)
committerJan Helke <typo3@helke.de>
Thu, 27 Oct 2016 09:18:37 +0000 (11:18 +0200)
Resolves: #72957
Releases: master, 7.6
Change-Id: I06cee55c78365ff83a239fff71ef02a180009f30
Reviewed-on: https://review.typo3.org/50396
Reviewed-by: Jan Helke <typo3@helke.de>
Tested-by: Jan Helke <typo3@helke.de>
typo3/sysext/backend/Classes/Tree/View/PagePositionMap.php

index 588c920..1b065de 100644 (file)
@@ -155,6 +155,10 @@ class PagePositionMap
         // Traverse the tree:
         $lines = [];
         foreach ($pageTree->tree as $cc => $dat) {
+            if ($latestInvDepth > $dat['invertedDepth']) {
+                $margin = 'style="margin-left: ' . ($dat['invertedDepth'] * 16 + 9) . 'px;"';
+                $lines[] = '<ul class="list-tree" ' . $margin . '>';
+            }
             // Make link + parameters.
             $latestInvDepth = $dat['invertedDepth'];
             $saveLatestUid[$latestInvDepth] = $dat;
@@ -165,7 +169,7 @@ class PagePositionMap
                     // 1) It must be allowed to create a new page and 2) If there are subpages there is no need to render a subpage icon here - it'll be done over the subpages...
                     if (!$this->dontPrintPageInsertIcons && $this->checkNewPageInPid($id) && !($prev_dat['invertedDepth'] > $pageTree->tree[$cc]['invertedDepth'])) {
                         end($lines);
-                        $lines[key($lines)] .= '<ul><li><span class="text-nowrap"><a href="#" onclick="' . htmlspecialchars($this->onClickEvent($id, $id, 1)) . '"><i class="t3-icon fa fa-long-arrow-left" title="' . $this->insertlabel() . '"></i></a></span></li></ul>';
+                        $lines[] = '<li><span class="text-nowrap"><a href="#" onclick="' . htmlspecialchars($this->onClickEvent($id, $id, 1)) . '"><i class="t3-icon fa fa-long-arrow-left" title="' . $this->insertlabel() . '"></i></a></span></li>';
                     }
                 }
                 // If going down
@@ -177,7 +181,7 @@ class PagePositionMap
                     if (!$this->dontPrintPageInsertIcons && $this->checkNewPageInPid($prev_dat['row']['pid'])) {
                         $prevPid = -$prev_dat['row']['uid'];
                         end($lines);
-                        $lines[key($lines)] .= '<ul><li><span class="text-nowrap"><a href="#" onclick="' . htmlspecialchars($this->onClickEvent($prevPid, $prev_dat['row']['pid'], 2)) . '"><i class="t3-icon fa fa-long-arrow-left" title="' . $this->insertlabel() . '"></i></a></span></li></ul>';
+                        $lines[] = '<li><span class="text-nowrap"><a href="#" onclick="' . htmlspecialchars($this->onClickEvent($prevPid, $prev_dat['row']['pid'], 2)) . '"><i class="t3-icon fa fa-long-arrow-left" title="' . $this->insertlabel() . '"></i></a></span></li>';
                     }
                     // Then set the current prevPid
                     $prevPid = -$prev_dat['row']['pid'];
@@ -191,6 +195,9 @@ class PagePositionMap
             }
             // print arrow on the same level
             if (!$this->dontPrintPageInsertIcons && $this->checkNewPageInPid($dat['row']['pid'])) {
+                if (!empty($prev_dat) && $prev_dat['invertedDepth'] < $dat['invertedDepth']) {
+                    $lines[] = '</ul>';
+                }
                 $lines[] = '<span class="text-nowrap"><a href="#" onclick="' . htmlspecialchars($this->onClickEvent($prevPid, $dat['row']['pid'], 3)) . '"><i class="t3-icon fa fa-long-arrow-left" title="' . $this->insertlabel() . '"></i></a></span>';
             }
             // The line with the icon and title:
@@ -203,13 +210,16 @@ class PagePositionMap
         $prev_dat = end($pageTree->tree);
         if ($prev_dat['row']['uid'] == $id) {
             if (!$this->dontPrintPageInsertIcons && $this->checkNewPageInPid($id)) {
-                $lines[] = '<span class="text-nowrap"><a href="#" onclick="' . htmlspecialchars($this->onClickEvent($id, $id, 4)) . '"><i class="t3-icon fa fa-long-arrow-left" title="' . $this->insertlabel() . '"></i></a></span>';
+                $lines[] = '<ul class="list-tree" style="margin-left: 25px"><li><span class="text-nowrap"><a href="#" onclick="' . htmlspecialchars($this->onClickEvent($id, $id, 4)) . '"><i class="t3-icon fa fa-long-arrow-left" title="' . $this->insertlabel() . '"></i></a></span></li></ul>';
             }
         }
         for ($a = $latestInvDepth; $a <= $this->depth; $a++) {
             $dat = $saveLatestUid[$a];
             $prevPid = -$dat['row']['uid'];
             if (!$this->dontPrintPageInsertIcons && $this->checkNewPageInPid($dat['row']['pid'])) {
+                if ($latestInvDepth < $dat['invertedDepth']) {
+                    $lines[] = '</ul>';
+                }
                 $lines[] = '<span class="text-nowrap"><a href="#" onclick="' . htmlspecialchars($this->onClickEvent($prevPid, $dat['row']['pid'], 5)) . '"><i class="t3-icon fa fa-long-arrow-left" title="' . $this->insertlabel() . '"></i></a></span>';
             }
         }
@@ -217,7 +227,11 @@ class PagePositionMap
         $code = '<ul class="list-tree">';
 
         foreach ($lines as $line) {
-            $code .= '<li>' . $line . '</li>';
+            if ((substr($line, 0, 3) === '<ul') || (substr($line, 0, 4) === '</ul')) {
+                $code .= $line;
+            } else {
+                $code .= '<li>' . $line . '</li>';
+            }
         }
 
         $code .= '</ul>';