Initial Redmine tooling and local plugin forks

This commit is contained in:
Jason Thistlethwaite
2026-04-24 22:01:18 +00:00
commit 9f682af0eb
683 changed files with 56878 additions and 0 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 677 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 795 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 438 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 439 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 792 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 754 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 766 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 615 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 794 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 565 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 837 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 743 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 923 B

@@ -0,0 +1,59 @@
function togglePrivateTicketsOnChange() {
var checked = $(this).is(':checked');
$('.private_tikets').attr('disabled', !checked);
}
function togglePrivateTicketsInit() {
$('.assign_contact_user').each(togglePrivateTicketsOnChange);
}
function toggleStatusesForAutoclose(node) {
if ($(node).val() == ''){
$('#statuses_autoclose').hide();
} else {
$('#statuses_autoclose').show();
}
}
function ccEmailTagResult (opt) {
if (opt.name){
var formated_tag = $('<span>' + opt.avatar + '&nbsp;' + opt.text + '</span>');;
} else {
var formated_tag = opt.text;
}
return formated_tag
};
function ccEmailTagSelection (opt) {
if (opt.name){
var formated_tag = opt.name + ' <' + opt.email + '>';
} else {
var formated_tag = opt.text;
}
return formated_tag
};
function showWithSendAndScrollTo(id, focus) {
showAndScrollTo(id, focus);
send_mail_input = $('#helpdesk_is_send_mail');
send_mail_input.prop( "checked", true );
send_mail_input.checked = true;
toggleSendMail(send_mail_input);
}
$(document).ready(function(){
$('#content').on('change', '.assign_contact_user', togglePrivateTicketsOnChange);
togglePrivateTicketsInit();
$('#history .contextual a[title="Quote"]').click(function(){
if ($('#ticket_data').length > 0) {
var journal_id = this.href.match(/journal_id=(\d*)/)[1];
console.log(journal_id);
$.ajax({
method: 'GET',
url: '/helpdesk/update_customer_email',
data: { journal_id: journal_id }
});
}
});
});
@@ -0,0 +1,370 @@
span.attachment img {
vertical-align: middle;
}
div#contacts_previous_issues {
margin-bottom: 20px;
}
/**********************************************************************/
/* TICKETS DATA SHOW ISSUE
/**********************************************************************/
span.helpdesk-message-date {
font-size: 0.9em;
color: #888;
}
/**********************************************************************/
/* TICKETS DATA FORM
/**********************************************************************/
form#ticket_data_form {
background:
#ffffff;
display: block;
padding: 6px;
margin-bottom: 6px;
margin-right: 10px;
border: 1px solid
#d7d7d7;
}
.contact_auto_complete > span {
font-weight: bold;
}
/**********************************************************************/
/* TICKETS EXCERPT LIST
/**********************************************************************/
table.list.issues td.helpdesk_ticket {white-space: normal; text-align: left;}
table.list.issues td.helpdesk_ticket .gravatar {float: left;}
table.list.issues td.helpdesk_ticket .ticket-data {margin-left: 45px;}
table.list.issues td.helpdesk_ticket .ticket-data .ticket-name {margin: 0px;font-weight: bold;}
table.list.issues td.helpdesk_ticket .ticket-status {float: left;}
table.list.issues td.last_message {vertical-align: top}
/**********************************************************************/
/* PUBCLIV TICKETS
/**********************************************************************/
div.ticket-history div.journal {
overflow: visible;
}
div.ticket-history div.journal.incoming,
div.ticket-history div.journal.outgoing {
padding: 6px;
margin-bottom: 6px;
border: 1px solid #d7d7d7;
position: relative;
}
div.ticket-history div.journal.incoming {
background: #ececec;
margin-right: 30px;
margin-left: 4px;
}
div.ticket-history div.journal.outgoing {
background: #f1faff;
margin-left: 30px;
margin-right: 4px;
}
div.ticket-history div.journal.incoming:after {
content: '';
display: block;
position: absolute;
top: 10px;
left:-7px;
width: 10px;
height: 10px;
background: #ececec;
border-left:1px solid #d7d7d7;
border-bottom:1px solid #d7d7d7;
-moz-transform:rotate(45deg);
-webkit-transform:rotate(45deg);
}
div.ticket-history div.journal.outgoing:after {
content: '';
display: block;
position: absolute;
top: 10px;
right:-7px;
width: 10px;
height: 10px;
background: #f1faff;
border-right:1px solid #d7d7d7;
border-bottom:1px solid #d7d7d7;
-moz-transform:rotate(-45deg);
-webkit-transform:rotate(-45deg);
}
/**********************************************************************/
/* TICKET DATA
/**********************************************************************/
span.ticket-status {
padding: 3px 4px;
font-size: 10px;
white-space: nowrap;
margin-right: 4px;
color: white;
}
div#ticket_data > div.contextual {
margin-top: initial;
}
form.new_issue .email-template {
padding: 10px;
}
span.ticket-status.status-1 {background-color: #CD5C5C;}
span.ticket-status.status-2 {background-color: deepSkyBlue;}
span.ticket-status.status-3 {background-color: green;}
span.ticket-status.status-4 {background-color: #FF8C00;}
span.ticket-status.status-5 {background-color: #AAA;}
span.ticket-status.status-6 {background-color: #8A2BE2;}
/**********************************************************************/
/* SHOW TICKET
/**********************************************************************/
#ticket-history .ticket-avatar {float: left;}
#ticket-history .ticket-note-content {margin-left: 50px;}
#ticket-history .ticket-note {border-top: 1px solid #d7d7d7; padding-top: 8px;}
/**********************************************************************/
/* SEND RESPONSE
/**********************************************************************/
.cc-list-edit .is-cc {
float: left;
min-width: 25px;
margin-top: 4px;
}
.cc-list-edit {
margin-top: -8px;
}
.cc-list-edit .select2 {
margin-left: 60px;
width: 90% !important;
-moz-border-radius: 0px;
-webkit-border-radius: 0px;
-khtml-border-radius: 0px;
border-radius: 0px;
background: white;
padding: 0px;
}
.cc-list-edit .select2 .select2-selection__choice {
background-color: #D7E7F9;
color: #000;
}
.cc-list-edit ul.tagit li.tagit-choice .tagit-close .text-icon:hover {
color: black;
}
.cc-list-edit ul.tagit li.tagit-new input {
font-size: 11px;
background: white;
margin-bottom: 2px;
margin-left: 2px;
width: 200px;
}
.cc-list-edit ul.tagit li.tagit-new {
padding: 0px;
}*/
p#helpdesk_send_response {
margin-top: 5px;
}
/**********************************************************************/
/* ISSUES LIST
/**********************************************************************/
tr.issue td.customer, tr.issue td.customer_company {
white-space: normal;
text-align: left;
}
table.list.issue td.last_message img.gravatar{
vertical-align: middle;
margin: 0 4px 2px 0;
}
div.email-template {
background-color: #FFD;
border: 1px solid #E4E4E4;
padding-left: 10px;
padding-right: 10px;
margin-bottom: 5px;
}
tr.issue td.last_message {
text-align: left;
white-space: normal;
padding: 5px;
}
tr.issue td.last_message_date {
text-align: left;
white-space: normal;
}
tr.issue.context-menu-selection td.last_message span.description {
color: inherit;
}
/**********************************************************************/
/* ICONS
/**********************************************************************/
#admin-menu a.helpdesk { background-image: url(../images/support.png)}
.icon-public-link { background-image: url(../../../images/external.png);padding-left: 14px;}
.icon-email-spam { background-image: url(../images/email_error.png); }
.icon-email-to { background-image: url(../images/email_go.png); }
.icon-email-from { background-image: url(../images/email_from.png); }
.icon-helpdesk { background-image: url(../images/user_comment.png); }
.icon-split { background-image: url(../images/arrow_divide.png); }
.icon-web { background-image: url(../images/world.png); }
.icon-support { background-image: url(../images/support.png); }
.icon-reply { background-image: url(../images/reply.png); }
/**********************************************************************/
/* VOTE
/**********************************************************************/
.vote_form {
text-align: center;
}
.submit, #vote_comment {
margin-top: 5px;
width: 40%;
margin-left: auto;
margin-right: auto;
padding: 10px;
}
.vote-value .icon {
padding-left: 20px;
margin-left: 5px;
}
.icon-awesome { background-image: url(../images/awesome.png); }
.icon-justok { background-image: url(../images/just_ok.png); }
.icon-notgood { background-image: url(../images/not_good.png); }
.error-text { color: red; }
/**********************************************************************/
/* CHARTS
/**********************************************************************/
.helpdesk_chart { text-align: center; width: 100%; }
.center { text-align: center; }
.chart_table { margin: auto; border-collapse:collapse; text-align: center }
.chart_table .header { height: 50px; background-color: #eee }
.chart_table .header .column_data { border: 1px solid #c0c0c0; padding: 0px; }
.chart_table .header .column_data .issues_count { font-weight: bold; }
.chart_table .main_block { height: 200px }
.chart_table .main_block .column_data { vertical-align: bottom; width: 80px; border: 1px solid #c0c0c0; padding: 0px; }
.chart_table .main_block .column_data .percents { background-color: #BAE0BA; }
.chart_table .footer { height: 50px }
.chart_table .footer .column_data { font-weight: bold; padding: 0px; }
/* Metrics*/
table.metrics {
border-collapse: separate;
table-layout: fixed;
width: 100%;
}
.metrics.box {
background-color: #eee;
width: 250px;
margin: 15px;
border: 1px solid #c0c0c0;
display: inline-block;
padding: 20px 5px;
}
.metrics td {
padding: 25px 0;
border-top: 1px solid #dbdde1;
text-align: left;
}
.metrics .num {
color: #444;
font-size: 29px;
margin-right: 8px;
display: inline-block;
}
.metrics .change {
display: inline-block;
color: #999;
font-size: 13px;
text-align: center;
}
.metrics p {
color: #999;
margin: 2px;
line-height: 1.4em;
}
.change>.caret {
border-width: 6px;
display: block;
margin: 0 auto 4px
}
.change>.neg {
border-top-color: #ed5a5a
}
.change>.pos {
border-top: 0;
border-bottom: 6px solid #43ac6d
}
.change>.mirror_pos {
border-top: 0;
border-bottom: 6px solid #ed5a5a
}
.change>.mirror_neg {
border-top-color: #43ac6d
}
.caret {
display: inline-block;
width: 0;
height: 0;
vertical-align: top;
border-top: 4px solid #2b2b2b;
border-right: 4px solid transparent;
border-left: 4px solid transparent;
content: ""
}
.metrics .num>span {
font-size: 16px;
}
#customer_previous_issues ul {margin: 0; padding: 0;}
#customer_previous_issues ul li {position: relative; margin-bottom: 10px}
#customer_previous_issues ul li .ticket-meta {color: #888; font-size: 0.9em;display: block}