Files
Phraseanet/www/include/path_files_tests.jquery.js
Romain Neutron dc5c12a592 Fix JS code style
2013-11-11 11:25:52 +01:00

238 lines
9.7 KiB
JavaScript

(function( $ ){
var methods = {
init : function( options ) {
var settings = {
'url' : '/admin/tests/pathurl/path/'
};
return this.each(function() {
var $this = $(this), data = $(this).data('path_file_tests');
if ( ! data )
{
if ( options ) {
$.extend( settings, options );
}
$this.data('path_file_tests', {});
$this.after('<img class="loader" style="visibility:hidden;" src="/skins/icons/loader-black.gif"/>');
$this.after('<img class="reload" src="/skins/icons/reload.png"/>');
$this.after('<img class="status" src="/skins/icons/delete.png"/>');
$this.bind('keyup blur', function(){
var el_loader = $this.nextAll('.loader');
var el_status = $this.nextAll('.status');
if($this.data('ajax_path_test') && typeof $this.data('ajax_path_test').abort == 'function')
$this.data('ajax_path_test').abort();
if(!$this.hasClass('test_executable') && !$this.hasClass('test_writeable') && !$this.hasClass('test_readable'))
return;
if(!$this.hasClass('required') && $.trim($this.val()) === '')
{
el_status.css('visibility', 'hidden');
return;
}
var ajax = $.ajax({
dataType: 'json',
type: "GET",
url: settings.url,
data: {
path : $this.val()
},
beforeSend:function(){
el_loader.css('visibility', 'visible');
},
success: function(data){
el_loader.css('visibility', 'hidden');
if($this.hasClass('required'))
{
$this.addClass('field_error');
}
if($this.hasClass('test_executable') && (data.executable === false || data.file !== true))
{
el_status.attr('src','/skins/icons/delete.png').css('visibility', 'visible');
return;
}
if($this.hasClass('test_writeable') && data.writeable === false)
{
el_status.attr('src','/skins/icons/delete.png').css('visibility', 'visible');
return;
}
if($this.hasClass('test_readable') && data.readable === false)
{
el_status.attr('src','/skins/icons/delete.png').css('visibility', 'visible');
return;
}
el_status.attr('src','/skins/icons/ok.png').css('visibility', 'visible');
$this.removeClass('field_error');
return;
},
timeout:function(){
el_loader.css('visibility', 'hidden');
el_status.attr('src','/skins/icons/delete.png').css('visibility', 'visible');
},
error:function(){
el_loader.css('visibility', 'hidden');
el_status.attr('src','/skins/icons/delete.png').css('visibility', 'visible');
}
});
$this.data('ajax_path_test', ajax);
});
$this.trigger('keyup');
$this.nextAll('.reload').bind('click', function(){
$this.trigger('keyup');
});
}
});
},
destroy : function( ) {
return this.each(function() {
$(this).data('path_file_tests', null);
});
}
};
$.fn.path_file_test = function(method) {
if ( methods[method] ) {
return methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));
} else if ( typeof method === 'object' || ! method ) {
return methods.init.apply( this, arguments );
} else {
$.error( 'Method ' + method + ' does not exist on jQuery.path_file_test' );
}
};
})( jQuery );
(function( $ ){
var methods = {
init : function( options ) {
var settings = {
'url' : '/admin/tests/pathurl/url/'
};
return this.each(function() {
var $this = $(this), data = $(this).data('url_tests');
if ( ! data )
{
if ( options ) {
$.extend( settings, options );
}
$this.data('url_tests', {});
$this.after('<img class="loader" style="visibility:hidden;" src="/skins/icons/loader-black.gif"/>');
$this.after('<img class="reload" src="/skins/icons/reload.png"/>');
$this.after('<img class="status" src="/skins/icons/delete.png"/>');
$this.bind('keyup blur', function(){
var el_loader = $(this).nextAll('.loader');
var el_status = $(this).nextAll('.status');
var listable = $this.hasClass('listable');
var required = $this.hasClass('required');
var same_domain = $this.hasClass('same_domain');
var value = $.trim($this.val());
if(!required && value === '')
{
el_status.attr('src','/skins/icons/ok.png');
return;
}
if(required && value === '')
{
el_status.attr('src','/skins/icons/delete.png');
return;
}
if(same_domain && value.substring(0,1) != '/')
{
value = '/'+value;
}
if(same_domain)
{
value = location.protocol+'//'+location.hostname+value;
}
if($this.data('ajax_url_test') && typeof $this.data('ajax_url_test').abort == 'function')
$this.data('ajax_url_test').abort();
var ajax = $.ajax({
type: "GET",
url: settings.url,
dataType:'json',
data: {
url : value
},
beforeSend:function(){
el_loader.css('visibility', 'visible');
},
success: function(datas){
el_loader.css('visibility', 'hidden');
if(datas.code === 404)
{
el_status.attr('src','/skins/icons/delete.png');
return;
}
if(!listable && datas.code === 403)
{
el_status.attr('src','/skins/icons/ok.png');
}
else
{
el_status.attr('src','/skins/icons/delete.png');
}
return;
},
timeout:function(){
el_loader.css('visibility', 'hidden');
el_status.attr('src','/skins/icons/delete.png');
},
error:function(datas){
el_loader.css('visibility', 'hidden');
el_status.attr('src','/skins/icons/delete.png');
}
});
$this.data('ajax_url_test', ajax);
});
$this.trigger('keyup');
$this.nextAll('.reload').bind('click', function(){
$this.trigger('keyup');
});
}
});
},
destroy : function( ) {
return this.each(function() {
$(this).data('url_tests', null);
});
}
};
$.fn.url_test = function(method) {
if ( methods[method] ) {
return methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));
} else if ( typeof method === 'object' || ! method ) {
return methods.init.apply( this, arguments );
} else {
$.error( 'Method ' + method + ' does not exist on jQuery.url_test' );
}
};
})( jQuery );