svg
This commit is contained in:
@ -31,7 +31,7 @@ class Issue
|
||||
private int $rowissue = 0;
|
||||
|
||||
#[ORM\Column(nullable: true)]
|
||||
private string $color = '';
|
||||
private ?string $color = null;
|
||||
|
||||
#[ORM\ManyToOne(targetEntity: Project::class, inversedBy: 'issues')]
|
||||
#[ORM\JoinColumn(nullable: false)]
|
||||
@ -130,7 +130,9 @@ class Issue
|
||||
|
||||
public function getColor(): ?string
|
||||
{
|
||||
return $this->rowsprint;
|
||||
if($this->color) return $this->color;
|
||||
elseif($this->parent) return $this->parent->getColor();
|
||||
else return null;
|
||||
}
|
||||
|
||||
public function setColor(?string $color): static
|
||||
|
@ -6,15 +6,16 @@ use Symfony\Component\Form\AbstractType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
|
||||
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||
|
||||
|
||||
class SelbgType extends AbstractType
|
||||
{
|
||||
public function configureOptions(OptionsResolver $resolver): void
|
||||
{
|
||||
$choices = $this->loadCssClasses();
|
||||
|
||||
|
||||
// clef => valeur
|
||||
$choices = array_combine($choices, $choices);
|
||||
|
||||
|
||||
$resolver->setDefaults([
|
||||
'choices' => $choices,
|
||||
'choice_attr' => function ($choice, $key, $value) {
|
||||
|
@ -6,7 +6,7 @@
|
||||
{% endblock %}
|
||||
|
||||
{% block title %}
|
||||
Modification Issue = {{title}}
|
||||
= Modification Issue = {{title}}
|
||||
{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
@ -27,6 +27,7 @@ Modification Issue = {{title}}
|
||||
<div class="col-md-6 mx-auto">
|
||||
<div class="card mt-3">
|
||||
<div class="card-header">Information</div>
|
||||
{{ form_row(form.color) }}
|
||||
<div class="card-body">
|
||||
</div>
|
||||
</div>
|
||||
|
@ -4,7 +4,6 @@
|
||||
<h5 style="flex-grow:1">#{{ issue.redmine.id }} = {{ issue.redmine.subject }}</h5>
|
||||
<a href="{{redmineUrl}}/issues/{{issue.id}}" target="_blank" class="btn btn-primary"><i class="fas fa-eye"></i></a>
|
||||
<div class="btn btn-secondary" onClick="hideIssue()"><i class="fas fa-window-close"></i></div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="d-flex">
|
||||
@ -17,6 +16,8 @@
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<div><a href="{{path("app_issue_update",{id:issue.id})}}">Modifier</a></div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
|
@ -16,12 +16,14 @@
|
||||
z-index: 1000;
|
||||
}
|
||||
|
||||
|
||||
main {
|
||||
padding-top:80px;
|
||||
}
|
||||
|
||||
content {
|
||||
padding:0px;
|
||||
overflow:auto;
|
||||
}
|
||||
|
||||
.issueContainer {
|
||||
@ -42,6 +44,7 @@
|
||||
.scrumContainer {
|
||||
display:none;
|
||||
padding-left:300px;
|
||||
width:10000px;
|
||||
}
|
||||
|
||||
.containerStatus{
|
||||
@ -313,7 +316,7 @@
|
||||
</div>
|
||||
|
||||
{% for issue in project.issues %}
|
||||
<div class="issueCard card tracker{{issue.redmine.tracker.id}} category{{(issue.redmine.category is defined?issue.redmine.category.id:'0') }}" data-status='{{issue.redmine.status.id}}' data-sprint='{{issue.rowsprint}}' data-version='{{(issue.redmine.fixed_version is defined?issue.redmine.fixed_version.id:'')}}' data-id='{{issue.id}}'>
|
||||
<div class="issueCard {{issue.color}} card tracker{{issue.redmine.tracker.id}} category{{(issue.redmine.category is defined?issue.redmine.category.id:'0') }}" data-status='{{issue.redmine.status.id}}' data-sprint='{{issue.rowsprint}}' data-version='{{(issue.redmine.fixed_version is defined?issue.redmine.fixed_version.id:'')}}' data-id='{{issue.id}}'>
|
||||
<div class='issueHeader'>
|
||||
<div class='issueId'>#{{issue.id}}</div>
|
||||
<div class='issueTitle'>
|
||||
@ -665,8 +668,13 @@
|
||||
$sourceContainer = ui.item.parent();
|
||||
$movedItem = ui.item;
|
||||
originalIndex = ui.item.index();
|
||||
enableAutoScroll($(window)); // ou remplace par ton conteneur scrollable
|
||||
},
|
||||
|
||||
stop: function () {
|
||||
disableAutoScroll();
|
||||
},
|
||||
|
||||
update: function (event, ui) {
|
||||
console.log("UPDATE");
|
||||
if (!event.originalEvent) return;
|
||||
@ -697,7 +705,7 @@
|
||||
data: {
|
||||
target: targetId,
|
||||
targetIssues: targetIssues
|
||||
},
|
||||
},
|
||||
success: function (response) {
|
||||
console.log('Déplacement réussi', response);
|
||||
},
|
||||
@ -725,7 +733,39 @@
|
||||
}
|
||||
});
|
||||
|
||||
let autoScrollInterval = null;
|
||||
|
||||
function enableAutoScroll($container) {
|
||||
$(document).on('mousemove.autoScroll', function (e) {
|
||||
const scrollMargin = 50; // px depuis le bord de la fenêtre
|
||||
const scrollSpeed = 20; // px à chaque tick
|
||||
|
||||
const mouseY = e.clientY;
|
||||
const windowHeight = window.innerHeight;
|
||||
|
||||
// Scroll vers le haut
|
||||
if (mouseY < scrollMargin) {
|
||||
clearInterval(autoScrollInterval);
|
||||
autoScrollInterval = setInterval(() => {
|
||||
$container.scrollTop($container.scrollTop() - scrollSpeed);
|
||||
}, 50);
|
||||
}
|
||||
// Scroll vers le bas
|
||||
else if (mouseY > windowHeight - scrollMargin) {
|
||||
clearInterval(autoScrollInterval);
|
||||
autoScrollInterval = setInterval(() => {
|
||||
$container.scrollTop($container.scrollTop() + scrollSpeed);
|
||||
}, 50);
|
||||
} else {
|
||||
clearInterval(autoScrollInterval);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function disableAutoScroll() {
|
||||
$(document).off('mousemove.autoScroll');
|
||||
clearInterval(autoScrollInterval);
|
||||
}
|
||||
|
||||
</script>
|
||||
{% endblock %}
|
Reference in New Issue
Block a user