in Allura/allura/lib/widgets/forms.py [0:0]
def resources(self):
yield from super().resources()
yield ew.CSSLink('css/add_project.css')
neighborhood = g.antispam.enc('neighborhood')
project_name = g.antispam.enc('project_name')
project_unixname = g.antispam.enc('project_unixname')
yield ew.JSScript('''
$(function(){
var $scms = $('input[type=checkbox].scm');
var $nbhd_input = $('input[name="%(neighborhood)s"]');
var $name_input = $('input[name="%(project_name)s"]');
var $unixname_input = $('input[name="%(project_unixname)s"]');
var $project_url = $('#project_url');
var $url_fragment = $('#url_fragment');
var $form = $name_input.closest('form');
var delay = (function(){
var timers = {};
return function(callback, ms){
clearTimeout (timers[callback]);
timers[callback] = setTimeout(callback, ms);
};
})();
$name_input.focus();
var update_icon = function($input) {
var $success_icon = $input.parent().next().find('.success_icon');
var $error_icon = $input.parent().next().find('.error_icon');
var is_error = $input.nextAll('.error').is(':visible');
$success_icon.toggle(!is_error);
$error_icon.toggle(is_error);
};
if ($name_input.val() !== '') {
update_icon($name_input);
}
if ($unixname_input.val() !== '') {
update_icon($unixname_input);
}
var handle_error = function($input, message) {
var $error_field = $input.nextAll('.error');
if ($error_field.length === 0) {
$error_field = $('<div class="error" style="display: none"></div>').insertAfter($input);
}
$error_field.text(message).toggle(!!message);
$project_url.toggle(!message);
update_icon($input);
};
$form.submit(function(e) {
var has_errors = $name_input.add($unixname_input).nextAll('.error').is(':visible');
if (has_errors || $name_input.val() === '' || $unixname_input.val() === '') {
e.preventDefault();
alert('You must resolve the issues with the project name.');
return false;
}
});
$scms.change(function(){
if ( $(this).prop('checked') ) {
var on = this;
$scms.each(function(){
if ( this !== on ) {
$(this).prop('checked', false);
}
});
}
});
var suggest_name = function(project_name) {
return project_name.replace(/[^A-Za-z0-9]+/g, '-').toLowerCase().replace(/^-+|-+$/g, '');
};
var check_names = function() {
var data = {
'neighborhood': $nbhd_input.val(),
'project_name': $name_input.val(),
'project_unixname': $unixname_input.val()
};
$.getJSON('check_names', data, function(result){
handle_error($name_input, result.project_name);
handle_error($unixname_input, result.project_unixname);
});
};
var manual = false;
$name_input.on('input', function(){
if (!manual) {
var suggested_name = suggest_name($name_input.val());
$unixname_input.val(suggested_name);
$url_fragment.text(suggested_name);
}
delay(check_names, 20);
});
$unixname_input.change(function() {
manual = true;
});
$unixname_input.on('input', function(){
$url_fragment.text($unixname_input.val());
delay(check_names, 20);
});
});
''' % dict(neighborhood=neighborhood, project_name=project_name, project_unixname=project_unixname))