use css classes instead of temporary items

This commit is contained in:
chfhtw
2026-04-15 13:56:35 +02:00
parent 88c82a41ba
commit 35355b28c0
2 changed files with 43 additions and 33 deletions
+8
View File
@@ -130,10 +130,12 @@
display: none; display: none;
} }
.drop-grid-item-sizechanged > .dashboard-item,
.drop-grid-item-move > .dashboard-item { .drop-grid-item-move > .dashboard-item {
background-color: var(--fhc-dashboard-item-overlay-background); background-color: var(--fhc-dashboard-item-overlay-background);
} }
.drop-grid-item-sizechanged > .dashboard-item::before,
.drop-grid-item-move > .dashboard-item::before { .drop-grid-item-move > .dashboard-item::before {
position: absolute; position: absolute;
content: ""; content: "";
@@ -145,6 +147,12 @@
opacity: .5; opacity: .5;
} }
.drop-grid-item-oversized > .dashboard-item {
/* Bootstrap: border-danger */
--bs-border-opacity: 1;
border-color: rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important;
}
#deleteBookmark i { #deleteBookmark i {
color: var(--fhc-dashboard-danger); color: var(--fhc-dashboard-danger);
} }
+35 -33
View File
@@ -137,9 +137,31 @@ export default {
return placeholders; return placeholders;
}, },
currentItems() { currentItems() {
if (this.mode != 1 && this.mode != 2 && this.active) if (this.mode == MODE_IDLE && this.active)
return [ ...this.placedItems, ...this.items_placeholders ]; return [ ...this.placedItems, ...this.items_placeholders ];
if (this.mode != MODE_IDLE && this.draggedItem) {
// add classes to dragged item
const draggedItemIndex = this.placedItems.findIndex(item => item.index == this.draggedItem.index);
const modifiedDraggedItem = {
...this.placedItems[draggedItemIndex],
classes: []
};
if (this.mode == MODE_MOVE) {
modifiedDraggedItem.classes.push('drop-grid-item-move');
}
if (this.mode == MODE_RESIZE) {
modifiedDraggedItem.classes.push('drop-grid-item-resize');
if (this.draggedItem.oversized)
modifiedDraggedItem.classes.push('drop-grid-item-oversized')
else if (this.placedItems[draggedItemIndex].resize)
modifiedDraggedItem.classes.push('drop-grid-item-sizechanged')
}
return this.placedItems.toSpliced(draggedItemIndex, 1, modifiedDraggedItem);
}
return this.placedItems; return this.placedItems;
}, },
rows() { rows() {
@@ -195,11 +217,10 @@ export default {
placedItems() { placedItems() {
if (!this.tempPositionUpdates) if (!this.tempPositionUpdates)
return this.prePlacedItems; return this.prePlacedItems;
let mappedPlacedItems= this.prePlacedItems.map(item => { return this.prePlacedItems.map(item => {
if (!this.tempPositionUpdates[item.index] ) if (!this.tempPositionUpdates[item.index])
return item; return item;
let height_diff = this.tempPositionUpdates[item.index]?.h - item.h;
let width_diff = this.tempPositionUpdates[item.index]?.w - item.w;
return { return {
resize: this.tempPositionUpdates[item.index]?.resize, resize: this.tempPositionUpdates[item.index]?.resize,
index: item.index, index: item.index,
@@ -207,26 +228,11 @@ export default {
data: item.data, data: item.data,
x: this.tempPositionUpdates[item.index].x === undefined ? item.x : this.tempPositionUpdates[item.index].x, x: this.tempPositionUpdates[item.index].x === undefined ? item.x : this.tempPositionUpdates[item.index].x,
y: this.tempPositionUpdates[item.index].y === undefined ? item.y : this.tempPositionUpdates[item.index].y, y: this.tempPositionUpdates[item.index].y === undefined ? item.y : this.tempPositionUpdates[item.index].y,
w: width_diff>0?item.w:this.tempPositionUpdates[item.index].w === undefined ? item.w : this.tempPositionUpdates[item.index].w, w: this.tempPositionUpdates[item.index].w === undefined ? item.w : this.tempPositionUpdates[item.index].w,
h: height_diff > 0 ?item.h:this.tempPositionUpdates[item.index].h === undefined ? item.h : this.tempPositionUpdates[item.index].h h: this.tempPositionUpdates[item.index].h === undefined ? item.h : this.tempPositionUpdates[item.index].h
}; };
}); });
let temporaryResizeItems = [];
mappedPlacedItems.forEach(item=>{
if(item.resize){
let newItem = {
...item,
w:this.tempPositionUpdates[item.index].w === undefined ? item.w : this.tempPositionUpdates[item.index].w,
h:this.tempPositionUpdates[item.index].h === undefined ? item.h : this.tempPositionUpdates[item.index].h,
resizeOverlay:true,
blank:true,
};
temporaryResizeItems.push(newItem)
}
})
return [...mappedPlacedItems, ...temporaryResizeItems];
} }
}, },
watch: { watch: {
@@ -474,15 +480,12 @@ export default {
[ w, h ] = this.cropSizeToAllowed(this.draggedItem.data.widget, w, h); [ w, h ] = this.cropSizeToAllowed(this.draggedItem.data.widget, w, h);
let draggedItemNode = document.getElementById(this.draggedItem.data.widgetid); this.draggedItem.oversized = (w !== targetW || h !== targetH);
if (w !== targetW || h !== targetH) {
draggedItemNode.classList.add("border-danger"); if (this.draggedItem.oversized)
} else { [ w, h ] = [ this.draggedItem.w, this.draggedItem.h ];
draggedItemNode.classList.remove("border-danger");
}
this.tempPositionUpdates = dragGrid.resize(this.draggedItem, w, h); this.tempPositionUpdates = dragGrid.resize(this.draggedItem, w, h);
break; break;
} }
} }
@@ -490,6 +493,8 @@ export default {
}, },
_cleanupDragging() { _cleanupDragging() {
if (this.draggedItem) { if (this.draggedItem) {
const draggedItem = this.indexedItems.find(item => item.index == this.draggedItem.index);
delete draggedItem.classes;
this.draggedItem = null; this.draggedItem = null;
} }
}, },
@@ -617,10 +622,7 @@ export default {
v-for="(item, index) in currentItems" v-for="(item, index) in currentItems"
:key="item.data.id" :key="item.data.id"
class="position-absolute" class="position-absolute"
:class="{ :class="item.classes"
'drop-grid-item-move': item.index == draggedItem?.index && mode == 1,
'drop-grid-item-resize': item.index == draggedItem?.index && mode == 2
}"
:item="item" :item="item"
:style="{ :style="{
zIndex: item.resizeOverlay ? 1 : 'auto', zIndex: item.resizeOverlay ? 1 : 'auto',