Empty tag for empty pages with non-archived children
### Motivation
At the moment, the "empty" page label only works when a page has an empty content and no subpages.
There is an edge case where an empty page has only subpages which are archived, so just inspecting the page object with `is_leaf()` is not sufficient to check whether the empty tag should be shown. Instead, the database needs to be queried to check whether all subpages are archived or not.

### Proposed Solution
Since this means that we need to query `n+1` levels from the database to show `n` levels correctly in the tree, we should start with fetching the additional layer right after the page has finished loading:
- #1158

After this is implemented, we can use the additional information to correctly render the empty tag and insert it in those cases where only archived children exist. This is also connected to the following issue:
- #1244

which can probably solved together with this one.
### Alternatives
Alternatively, we can update the page tree view to query the first two levels instead of just the root pages on initial load. And on every expanding operation, all potential next levels need to be fetched to show the empty page tag correctly for subpages.
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 904de0cb5..0ab260908 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -15,6 +15,7 @@ UNRELEASED
 * [ [#1179](https://github.com/digitalfabrik/integreat-cms/issues/1179) ] Disable browser cache of page tree
 * [ [#1190](https://github.com/digitalfabrik/integreat-cms/issues/1190) ] Add possibility to set custom region prefix
 * [ [#1164](https://github.com/digitalfabrik/integreat-cms/issues/1164) ] Fix possibility to cancel translation process
+* [ [#1175](https://github.com/digitalfabrik/integreat-cms/issues/1175) ] Don't show empty tag if the page has subpages
 
 
 2022.2.0-beta
diff --git a/integreat_cms/cms/models/pages/page_translation.py b/integreat_cms/cms/models/pages/page_translation.py
index a6b1b48cd..c17af427d 100644
--- a/integreat_cms/cms/models/pages/page_translation.py
+++ b/integreat_cms/cms/models/pages/page_translation.py
@@ -140,7 +140,7 @@ class PageTranslation(AbstractBasePageTranslation):
         This functions returns a list of translated tags which apply to this function.
         Supported tags:
         * Live content: if the page of this translation has live content
-        * Empty: if the page contains no text
+        * Empty: if the page contains no text and has no subpages (TODO: Can also be empty if subpages are archived)
 
         :return: A list of tags which apply to this translation
         :rtype: list [ str ]
@@ -150,7 +150,7 @@ class PageTranslation(AbstractBasePageTranslation):
         if self.page.mirrored_page:
             tags.append(_("Live content"))
 
-        if not self.combined_text.strip():
+        if not self.combined_text.strip() and self.page.is_leaf():
             tags.append(_("Empty"))
 
         return tags
diff --git a/integreat_cms/static/src/js/tree-drag-and-drop.ts b/integreat_cms/static/src/js/tree-drag-and-drop.ts
index 88b35ae41..e8276728a 100644
--- a/integreat_cms/static/src/js/tree-drag-and-drop.ts
+++ b/integreat_cms/static/src/js/tree-drag-and-drop.ts
@@ -134,6 +134,6 @@ function drop(event: DragEvent) {
   const target_position = target.getAttribute("data-drop-position");
   // abuse confirmation dialog form to perform action
   let form = document.getElementById("confirmation-dialog").querySelector("form");
-  form.action = window.location.href + node_id + "/move/" + target_id + "/" + target_position;
+  form.action = window.location.href + node_id + "/move/" + target_id + "/" + target_position + "/";
   form.submit();
 }
['integreat_cms/cms/models/pages/page_translation.py', 'integreat_cms/static/src/js/tree-drag-and-drop.ts', 'CHANGELOG.md']