Files
2026-04-24 22:01:18 +00:00

248 lines
6.8 KiB
JavaScript

// Copyright (c) 2011-2013 Kirill Bezrukov
var noteFileFieldCount = 1;
function addNoteFileField() {
if (noteFileFieldCount >= 10) return false
noteFileFieldCount++;
var f = document.createElement("input");
f.type = "file";
f.name = "note_attachments[" + noteFileFieldCount + "][file]";
f.size = 30;
var d = document.createElement("input");
d.type = "text";
d.name = "note_attachments[" + noteFileFieldCount + "][description]";
d.size = 60;
p = document.getElementById("note_attachments_fields");
p.appendChild(document.createElement("br"));
p.appendChild(f);
p.appendChild(d);
}
function updateCustomForm(url, form) {
$.ajax({
url: url,
type: 'post',
data: $(form).serialize()
});
}
function toggleContact(event, element)
{
if (event.shiftKey==1)
{
if (element.checked) {
checkAllContacts($$('.contacts.index td.checkbox input'));
}
else
{
uncheckAllContacts($$('.contacts.index td.checkbox input'));
}
}
else
{
Element.up(element, 'tr').toggleClassName('context-menu-selection');
}
}
// Observ field function
(function( $ ){
jQuery.fn.observe_field = function(frequency, callback) {
frequency = frequency * 100; // translate to milliseconds
return this.each(function(){
var $this = $(this);
var prev = $this.val();
var check = function() {
if(removed()){ // if removed clear the interval and don't fire the callback
if(ti) clearInterval(ti);
return;
}
var val = $this.val();
if(prev != val){
prev = val;
$this.map(callback); // invokes the callback on $this
}
};
var removed = function() {
return $this.closest('html').length == 0
};
var reset = function() {
if(ti){
clearInterval(ti);
ti = setInterval(check, frequency);
}
};
check();
var ti = setInterval(check, frequency); // invoke check periodically
// reset counter after user interaction
$this.bind('keyup click mousemove', reset); //mousemove is for selects
});
};
$.fn.insertAtCaret = function (myValue) {
return this.each(function() {
//IE support
if (document.selection) {
this.focus();
sel = document.selection.createRange();
sel.text = myValue;
this.focus();
} else if (this.selectionStart || this.selectionStart == '0') {
//MOZILLA / NETSCAPE support
var startPos = this.selectionStart;
var endPos = this.selectionEnd;
var scrollTop = this.scrollTop;
this.value = this.value.substring(0, startPos)+ myValue+ this.value.substring(endPos,this.value.length);
this.focus();
this.selectionStart = startPos + myValue.length;
this.selectionEnd = startPos + myValue.length;
this.scrollTop = scrollTop;
} else {
this.value += myValue;
this.focus();
}
});
};
})( jQuery );
function setupDeferredTabs(url) {
$('body').on('click', '.tab-header', function(e){
tab = $(e.target);
$('.tab-placeholder').removeClass('active');
name = tab.data('name');
partial = tab.data('partial');
placeholder = $('#tab-placeholder-' + name);
placeholder.addClass('active');
if (!placeholder.is('.loaded')) {
url = url
$.ajax(url, {
data: {tab_name: name, partial: partial},
complete: function(){
placeholder.addClass('loaded')
//replaces current URL with the "href" attribute of the current link
//(only triggered if supported by browser)
if ("replaceState" in window.history) {
window.history.replaceState(null, document.title, tab.attr('href'));
}
return undefined;
},
dataType: 'script'
})
}
else {
if ("replaceState" in window.history) {
window.history.replaceState(null, document.title, tab.attr('href'));
}
}
})
};
function selectAllOptions(id) {
var select = $('#'+id);
select.children('option').attr('selected', true);
}
function submit_query_form(id) {
selectAllOptions("selected_columns");
$('#'+id).submit();
}
//replaces redmine default method showTab() beacuse of compatibility Redmine 3.1+
function showContactTab(name, url) {
$('div#content .tab-content').hide();
$('div.tabs a').removeClass('selected');
$('#tab-content-' + name).show();
$('#tab-' + name).addClass('selected');
if ("replaceState" in window.history) {
window.history.replaceState(null, document.title, url);
}
return false;
}
function tooglePriceField() {
$('#deal_price').prop( "disabled", $('.line:visible').size() > 0 );
}
function toggleCRMIssuesSelection(el) {
var boxes = $(el).parents('form').find('input[type=checkbox]');
var all_checked = true;
boxes.each(function(){ if (!$(this).prop('checked')) { all_checked = false; } });
boxes.each(function(){
if (all_checked) {
$(this).removeAttr('checked');
$(this).parents('tr').removeClass('context-menu-selection');
} else if (!$(this).prop('checked')) {
$(this).prop('checked', true);
$(this).parents('tr').addClass('context-menu-selection');
}
});
}
function toogleDealItems(el) {
$(el).closest('p').hide();
$('.deal_items').show();
}
function uploadAvatar(element) {
var fileSpan = $('<span>', { id: 'attachments_0'});
$('#contact_data #attachments_fields').html('');
fileSpan.append(
$('<input>', { type: 'hidden', class: 'filename', name: 'attachments[0][filename]'} ).val(element.files[0].name),
$('<input>', { type: 'hidden', class: 'description', name: 'attachments[0][description]' } ).val('avatar'),
$('<input>', { type: 'hidden', class: 'token', name: 'attachments[0][token]' } )
).appendTo('#contact_data #attachments_fields');
ajaxUpload(element.files[0], 0, fileSpan, element);
return 0;
}
function initDealSelect2(id, url, placeholder) {
$(function () {
$('select#' + id).select2({
ajax: {
url: url,
dataType: 'json',
delay: 250,
data: function (params) {
return { q: params.term };
},
processResults: function (data, params) {
return { results: data };
},
cache: true
},
placeholder: placeholder,
allowClear: true,
minimumInputLength: 0,
width: '60%',
templateResult: function (option) {
return $('<span>' + option.avatar + '&nbsp;' + option.text + '</span>');
}
});
});
};