Sur que c’est en cliquant, pas avant ? Je regarderai, j’ai pas mis à jour ma version bêta depuis un moment et j’ai aussi pas mal d’erreurs JS
Pour le drag&drop, ça n’a été implémenté par Phpvarious que pour les lignes. Je ne sais pas bien s’il serait possible d’arriver à savoir si on veut déplacer une ligne ou une colonne
C’est bien en cliquant sur les boutons et surtout c’est un ancien tableau ou un tableau créé depuis le dashboard que je modifie.
Dés que le tableau a été sauvé, ca semble fonctionner.
Merci pour ce développement essentiel.
Je l’ai testé dans un virtuel.
En 4.5, la première ligne avec les - et les plus est déplaçable vers le bas comme une autre ligne. Ce n’est pas gênant mais ça serait plus esthétique de ne pas pouvoir le faire.
Idéalement faire bouger une colonne serait vraiment pas mal … j’ai tendance à en oublier quand je fais un virtuel et c’est galère d’ajouter une colonne et de tout décaler à la main.
@jpty,
tu peux fournir plus d’infos stp, combien de lignes / colonnes au départ ? je vais essayer de reproduire, car actuellement j’ai une erreur que si je tente de supp la 1ère colonne. une capture d’écran ce serait top.
Mais la modif de @Bison permet justement de rajouter une colonne ou tu le souhaite !
De toute façon coté code c’est pas possible de jouer avec les colonnes.
J’ai essayé de voir comment faire pour que la 1ere ligne ne soit pas prise en compte dans le drag&drop mais j’ai réussi pour le moment. Tu n’aurais pas une idée ?
Oui j’ai déja fait la modif dans mon env de dev, il y a une autre soucis mais moins grave, qui ne génère pas d’erreur.
La fonction new Sortable que je t’ai demandé d’ajouter, na pas été ajouté au bon endroit , elle ne devrait pas être dans dans le containers.forEach
Voici la correction :
setTableLayoutSortable: function() {
// sortable cmds
let containers = document.querySelectorAll('#md_eqLogicConfigure #tableCmdLayoutConfiguration tbody td .cmdLayoutContainer')
containers.forEach(_container => {
new Sortable(_container, {
delay: 100,
delayOnTouchOnly: true,
group: 'cmdLayoutContainer',
draggable: '.cmdLayout',
filter: 'a, input, textarea',
preventOnFilter: false,
})
})
// sortable rows
new Sortable(document.querySelector('#tableCmdLayoutConfiguration tbody'), {
delay: 50,
delayOnTouchOnly: true,
draggable: 'tr:not(:first-child)', //exclude the first row (row for column manage)
filter: 'input, a',
preventOnFilter: false,
direction: 'vertical',
chosenClass: 'dragSelected',
onUpdate: function(evt) {
let tableLayout = document.getElementById('tableCmdLayoutConfiguration')
let row = 1
tableLayout.querySelectorAll('tr:not(:first-child)').forEach(_cLay => { //exclude the first row (row for column manage)
let col = 1
_cLay.querySelectorAll('td').forEach(_td => {
_td.setAttribute('data-line', row)
if (is_object(_td.querySelector('.counterReorder'))) {
_td.querySelector('span').innerHTML = row
} else {
_td.querySelectorAll('input')[0]?.setAttribute('data-l3key', 'text::td::' + row + '::' + col)
_td.querySelectorAll('input')[1]?.setAttribute('data-l3key', 'style::td::' + row + '::' + col)
col++
}
})
row++
})
}
})
},
J’ai mis à jour avec ton code, c’est nickel pour les drag&drop, merci
J’ai aussi, en effet le même soucis en supprimant la 1ere ligne ou 1ere colonne
VM105:226 Uncaught TypeError: Cannot read properties of null (reading 'appendChild')
at <anonymous>:226:57
at NodeList.forEach (<anonymous>)
at Object.applyTableLayout (<anonymous>:202:54)
at handleDynamicLineColumn (<anonymous>:544:41)
at HTMLDivElement.<anonymous> (<anonymous>:555:13)
En plus, firstTdLayout, ne doit pas fonctionner non plus depuis que tu as ajouté le td de gestion des colonnes, même si je sais pas comment tomber dans la condition d’ailleur
Edit 2 :
Pour résoudre le Edit 1 :
var firstTdLayout = newTableLayout.querySelector('tr').querySelector('td > .cmdLayoutContainer')
a remplacer par
var firstTdLayout = newTableLayout.querySelector('tr td > .cmdLayoutContainer')