Since hosting our first free forum 12 long years ago, ProBoards has always put members first in an effort to provide the best forum experience possible. Click on any of the links below for a deeper look into the processes and thinking that's brought ProBoards to its status as the worlds largest and most used free forum host on the Internet.
Our Forum TechnologyA look inside the systems powering ProBoards award winning service.
The Future of ForumsProBoards v5 Web 2.0 forum platform; the next generation of forum hosting.
try { $('#form_SEO1rBHZ_ga_client_id_input').val( proboards.analytics.google.getClientId() ); } catch(e) {} }, validations: [{"field":"privacy_policy_accept","opts":{},"message":"You must agree to the Privacy Policy","name":"exists"},{"field":"tos_accept","name":"exists","message":"You must agree to the Terms of Service","opts":{}},{"field":"username","message":"Forum Name Required","opts":{},"name":"exists"},{"opts":{"less_than_equal_to":20},"message":"Name can only be up to 20 characters long","name":"length","field":"username"},{"opts":{},"message":"Select a category.","name":"exists","field":"category"}], errors: {}, positionError: function(message) { var $input = $(this); var errorHtml = message; var $errorElem = $('.ui-form-error'); var isMobile = $.isMobile && $.isMobile();
// If the input is not visible, try to position it by the submit button instead if (!$input.is(':visible')) { $input = $('input[type="submit"]', $input.closest('form')); }
var windowTop = $(window).scrollTop(); var windowBottom = windowTop + $(window).height();
// If the input is the submit button, scroll to the top of the form... always if ($input.is('input[type="submit"]')) { var form = $input.closest('form').get(0); if (form) form.scrollIntoView(); }
// Otherwise, scroll to the input if it's not already on screen else { var inputTop = $input.offset().top; var inputBottom = inputTop + $input.outerHeight();
// If mobile, scroll a little further up to allow space for the error msg if (isMobile) inputTop -= $errorElem.outerHeight() + 5;
// Top and bottom should be within viewport bounds if (windowTop > inputTop || windowBottom < inputBottom) { window.scroll({ top: inputTop }); } }
// Display the error next to the input field if it's not mobile. if (!isMobile) { $errorElem .position({ my: 'left center', at: 'right center', of: $input, collision: 'flipfit', offset: '5 0' }) .attr('role', 'alert'); } // If mobile, we simply display the error at the top of the screen. else { $errorElem.addClass('mobile'); } }