// @todo: find a way to abstractise all these ajax requests...
jQuery(document).ready(function($){
var pulsate = function(e, color){
var finalColor = e.css('background-color').match(/^rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*(\d+))?\)$/),
hex = function(x){ return ('0' + parseInt(x).toString(16)).slice(-2); };
finalColor = '#' + hex(finalColor[1]) + hex(finalColor[2]) + hex(finalColor[3]);
if(finalColor === '#000000')
finalColor = '#fff';
e.css('background-color', color).animate({backgroundColor: finalColor}, 700);
},
setupDependencies = function(e){
// auto-grow text area
$('textarea', e).css('overflow', 'hidden').bind('input focus blur keyup', function(){
this.rows = this.value.split('\n').length;
}).blur();
// quick dependency processing (@todo: use my Form Dependecy script here...)
$('[name="page_visibility"], [name="location"]', e).change(function(){
var page = $('[name="page_visibility"]').val(),
location = $('[name="location"]').val(),
target = function(name, show){
var e = $('[name="' + name + '"]', e).parents('.row-add');
show ? e.removeClass('hidden').find('input:first').focus() : e.addClass('hidden');
},
posts = (location.indexOf('post') !== -1 || location.indexOf('teaser') !== -1) && page.indexOf('singular:') === -1 && (location.indexOf(':index') !== -1),
comments = (location.indexOf('comment') !== -1) && page.indexOf('singular:') === 0 && (location.indexOf(':index') !== -1);
target('index', posts || comments);
target('action', (location === 'action'));
target('shortcode', (location === 'shortcode'));
}).change();
};
$('#new-ad').click(function(event){
event.preventDefault();
if(this.disabled)
return;
var control = $(this),
table = control.parents('table'),
loader = $('
');
$.ajax({
url: ajaxurl,
type: 'GET',
data: ({
action: 'ad_form',
_ajax_nonce: $('#ad_form').val()
}),
beforeSend: function(){
control.attr('disabled','disabled').removeClass('error').addClass('loading');
control.after(loader);
},
error: function(){
control.addClass('error');
loader.remove();
},
success: function(response){
var form = $(response).hide();
$('tbody', table).append(' |
');
$('tbody tr:last td', table).append(form);
form.animate({
opacity: 'show',
height: 'show',
marginTop: 'show',
marginBottom: 'show',
paddingTop: 'show',
paddingBottom: 'show'
}, 150, function(){
loader.remove();
control.removeAttr('disabled').removeClass('loading');
setupDependencies(form);
});
}
});
});
// save/cancel/remove actions
$('#ads')
.delegate('.show-log', 'click', function(){
$.ajax({
url: ajaxurl,
type: 'GET',
context: this,
data: ({
action: 'get_ad_stats',
id: $(this).data('id')
}),
error: function(){
alert('An error occured while processing your request. Try again')
},
success: function(response){
if(response){
response = $(response).hide();
$('#ad-stats').remove();
var overlay = $('').css('opacity', 0);
overlay.appendTo('body').after(response).animate({'opacity': 0.5}, 150);
response
.css('left', (($(window).width() - response.outerWidth()) / 2) + $(window).scrollLeft() + 'px')
.css('top', (($(window).height() - response.outerHeight()) / 2) + $(window).scrollTop() + 'px')
.animate({
opacity: 'show',
top: '-=100'
}, 300)
.find('a.close').click(function(){
response.animate({
opacity: 'hide',
top: '+=100'
}, 300, function(){
response.remove();
overlay.fadeOut(150);
});
});
}
}
});
})
.delegate('textarea[name="html"]', 'change', function(){
var auto_scan = parseInt($(this).parents('form').find('input[name="auto_scan"]').val());
if((auto_scan !== 1) || $(this).parents('.type-options').find('p.notice').length)
return;
$.ajax({
url: ajaxurl,
type: 'POST',
context: this,
data: ({
action: 'scan_type_html',
html: $(this).val(),
type: $(this).parents('form').find('[name="type"]').val()
}),
error: function(){
//control.addClass('error');
//controls.show();
//loader.remove();
},
success: function(response){
if(response){
response = $(response);
$(this).parents('.type-options').after(response);
}
}
});
})
.delegate('a.auto-change-type', 'click', function(event){
event.preventDefault();
var new_type = $(this).data('type');
$(this).parents('form').find('select[name="type"]').val(new_type).change();
$(this).parents('p').remove();
})
.delegate('a.ignore-type', 'click', function(event){
event.preventDefault();
$(this).parents('form').find('input[name="auto_scan"]').val('0');
$(this).parents('p').remove();
})
.delegate('select[name="type"]', 'change', function(){
var form = $(this).parents('form'),
type_options = form.find('.type-options');
$.ajax({
url: ajaxurl,
type: 'GET',
context: this,
data: ({
action: 'change_ad_type',
data: form.serialize(),
type: $(this).val(),
id: form.data('id')
}),
beforeSend: function(){
//control.attr('disabled','disabled').removeClass('error').addClass('loading');
//controls.hide();
//controls.after(loader);
},
error: function(){
//control.addClass('error');
//controls.show();
//loader.remove();
},
success: function(response){
type_options.html($(response));
setupDependencies(type_options);
}
});
})
.delegate('.quick-edit', 'click', function(){
var loader = $(''),
controls = $(this).parents('.controls');
$.ajax({
url: ajaxurl,
type: 'GET',
context: this,
data: ({
action: 'ad_form',
id: $(this).data('id')
}),
beforeSend: function(){
//control.attr('disabled','disabled').removeClass('error').addClass('loading');
controls.hide();
controls.after(loader);
},
error: function(){
//control.addClass('error');
//controls.show();
loader.remove();
},
success: function(response){
var form = $(response).hide(),
old_html = $(this).parents('tr').clone().wrap('').parent().html(),
list = $('
|
').replaceAll($(this).parents('tr'));
list.find('td').append(form);
form.parents('tr').data('original_item', old_html);
form.animate({
opacity: 'show',
height: 'show',
marginTop: 'show',
marginBottom: 'show',
paddingTop: 'show',
paddingBottom: 'show'
}, 150, function(){
setupDependencies(form);
});
}
});
})
.delegate('.quick-enable, .quick-disable', 'click', function(){
var loader = $(''),
controls = $(this).parents('.controls');
$.ajax({
url: ajaxurl,
type: 'POST',
context: this,
data: ({
action: 'process_ad',
data: 'change_status',
id: $(this).data('id')
}),
beforeSend: function(){
controls.hide();
controls.after(loader);
},
error: function(){
loader.remove();
},
success: function(response){
$(this).parents('tr').replaceWith(response);
}
});
})
.delegate('#cancel-edit', 'click', function(event){
event.preventDefault();
$(this).parents('tr').animate({
opacity: 'hide',
height: 'hide',
marginTop: 'hide',
marginBottom: 'hide',
paddingTop: 'hide',
paddingBottom: 'hide'
}, 150, function(){
var old_html = $(this).data('original_item');
// restore old html if this was an edit
if(old_html){
old_html = $(old_html);
old_html.find('.loader').remove();
old_html.find('.controls').show();
$(this).replaceWith(old_html);
return;
}
$(this).remove();
});
})
.delegate('#remove-ad, .quick-remove', 'click', function(event){
event.preventDefault();
$.ajax({
url: ajaxurl,
type: 'POST',
context: this,
dataType: 'json',
data: ({
action: 'process_ad',
data: 'remove',
id: $(this).data('id')
}),
beforeSend: function(){
$(this).parents('tr').addClass('to-be-removed');
if($(this).is('input'))
$(this).attr('disabled','disabled');
},
error: function(XMLHttpRequest, textStatus, errorThrown){
//console.log(XMLHttpRequest);
//control.addClass('error');
},
success: function(response){
if(response.removed){
$(this).parents('tr').animate({
opacity: 'hide',
height: 'hide',
marginTop: 'hide',
marginBottom: 'hide',
paddingTop: 'hide',
paddingBottom: 'hide'
}, 150, function(){
$(this).remove();
});
}
}
});
})
.delegate('.quick-clone', 'click', function(event){
event.preventDefault();
var loader = $(''),
controls = $(this).parents('.controls');
$.ajax({
url: ajaxurl,
type: 'POST',
context: this,
context: this,
data: ({
action: 'process_ad',
data: 'clone',
id: $(this).data('id')
}),
beforeSend: function(){
controls.hide();
controls.after(loader);
},
error: function(){
loader.remove();
},
success: function(response){
var new_row = $(response),
last_row = $(this).parents('tbody').find('tr:last');
if(!last_row.hasClass('alternate'))
new_row.addClass('alternate');
last_row.after(new_row);
loader.remove();
controls.removeAttr('style');
pulsate(new_row, '#00CC00');
}
});
})
.delegate('#save-ad', 'click', function(event){
event.preventDefault();
var form = $(this).parents('form'),
control = $(this);
$.ajax({
url: ajaxurl,
type: 'POST',
context: this,
dataType: 'json',
data: ({
action: 'process_ad',
data: form.serialize(),
_ajax_nonce: $('input.nonce', form).val()
}),
beforeSend: function(){
control.attr('disabled','disabled');
form.find('p.error').remove();
},
error: function(XMLHttpRequest, textStatus, errorThrown){
console.log(XMLHttpRequest);
},
success: function(response){
var html = $(response.html);
if(response.error){
form.find('.type-options').after(html);
control.removeAttr('disabled');
return;
}
form.parents('tr').replaceWith(html);
}
});
});
});