diff --git a/Asset/js/relocate.js b/Asset/js/relocate.js
index ce0ec9b..4630931 100644
--- a/Asset/js/relocate.js
+++ b/Asset/js/relocate.js
@@ -1,17 +1,23 @@
/*
- * OrganonTweaks -- place the "Remove this Column" entry inside the native column menu.
+ * OrganonTweaks -- move plugin-injected DOM bits into their native positions on the board.
*
- * Kanboard only exposes the template:board:column:dropdown hook AFTER the column menu
- *
, and its dropdown JS clones just that when the menu opens. So the hook item
- * cannot reach the menu on its own. column_dropdown.php renders the item hidden next to
- * the menu; this script moves each such item into that column's real so it appears
- * alongside the native entries. It re-runs when the board is redrawn (AJAX polling /
- * drag-and-drop refresh).
+ * Both fixes are needed because Kanboard's relevant hooks render at the END of their
+ * container, not where the item belongs:
+ *
+ * 1. "Remove this Column": the template:board:column:dropdown hook renders AFTER the column
+ * menu (and the dropdown JS clones only that ), so we move the hidden - into
+ * the column's real
.
+ * 2. "Always show comment icon": the template:board:task:icons hook renders at the end of
+ * the card icons row, so the "+" bubble lands after priority instead of in the native
+ * comment slot. We move it just before the description icon (where the native comment
+ * icon sits), so the order matches whether or not the card has comments.
+ *
+ * Both re-run when the board is redrawn (AJAX polling / drag-and-drop refresh).
*/
(function () {
"use strict";
- function relocate() {
+ function relocateColumnMenuItems() {
var items = document.querySelectorAll(".organontweaks-remove-column-item");
for (var i = 0; i < items.length; i++) {
@@ -34,17 +40,53 @@
}
}
+ function repositionCommentIcons() {
+ var items = document.querySelectorAll(".organontweaks-comment-add");
+
+ for (var i = 0; i < items.length; i++) {
+ var item = items[i];
+ var row = item.parentNode;
+
+ if (!row) {
+ continue;
+ }
+
+ // Native comment icon sits just before the description icon; if there is no
+ // description, before the age / closed block. That is the slot we move into.
+ var anchor = null;
+ var descIcon = row.querySelector("i.fa-file-text-o");
+
+ if (descIcon) {
+ anchor = descIcon.closest("a");
+ }
+
+ if (!anchor) {
+ anchor = row.querySelector(".task-icon-age") || row.querySelector(".task-board-closed");
+ }
+
+ // Move only if needed (keeps the MutationObserver from looping).
+ if (anchor && anchor.parentNode === row && item.nextElementSibling !== anchor) {
+ row.insertBefore(item, anchor);
+ }
+ }
+ }
+
+ function apply() {
+ relocateColumnMenuItems();
+ repositionCommentIcons();
+ }
+
function init() {
if (!document.getElementById("board")) {
return;
}
- relocate();
+ apply();
var container = document.getElementById("board-container");
if (container && window.MutationObserver) {
- new MutationObserver(relocate).observe(container, { childList: true, subtree: true });
+ new MutationObserver(apply).observe(container, { childList: true, subtree: true });
}
}
diff --git a/Plugin.php b/Plugin.php
index 32a9122..d259299 100644
--- a/Plugin.php
+++ b/Plugin.php
@@ -52,7 +52,7 @@ class Plugin extends Base
public function getPluginVersion()
{
- return '0.3.0';
+ return '0.3.1';
}
public function getPluginHomepage()
diff --git a/Template/board/task_comment_icon.php b/Template/board/task_comment_icon.php
index 2ec0603..8cea843 100644
--- a/Template/board/task_comment_icon.php
+++ b/Template/board/task_comment_icon.php
@@ -10,5 +10,9 @@
* so it does not appear for read-only viewers.
*/ ?>
user->hasProjectAccess('CommentController', 'save', $task['project_id'])): ?>
- = $this->modal->medium('comments-o', '+', 'CommentListController', 'show', array('task_id' => $task['id']), t('Add a comment')) ?>
+
+
diff --git a/VERSION b/VERSION
index ed666ee..48c54ec 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-OrganonTweaks v0.3
+OrganonTweaks v0.3.1