Archive: Namaste PHP AMQP framework v1.0 (2017-2020)
952 days continuous production uptime, 40k+ tp/s single node. Original corpo Bitbucket history not included — clean archive commit.
This commit is contained in:
158
html/js/modules (optional)/forms-basic.js
Normal file
158
html/js/modules (optional)/forms-basic.js
Normal file
@@ -0,0 +1,158 @@
|
||||
/* FORMS */
|
||||
|
||||
(function ($) {
|
||||
$(document).ready(function () {
|
||||
|
||||
// Function to update labels of text fields
|
||||
Materialize.updateTextFields = function () {
|
||||
var input_selector = 'input[type=text], input[type=password], input[type=email], input[type=url], input[type=tel], input[type=number], input[type=search], textarea';
|
||||
$(input_selector).each(function (index, element) {
|
||||
if ($(element).val().length > 0 || $(this).attr('placeholder') !== undefined || $(element)[0].validity.badInput === true) {
|
||||
$(this).siblings('label, i').addClass('active');
|
||||
} else {
|
||||
$(this).siblings('label, i').removeClass('active');
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
// Text based inputs
|
||||
var input_selector = 'input[type=text], input[type=password], input[type=email], input[type=url], input[type=tel], input[type=number], input[type=search], textarea';
|
||||
|
||||
// Handle HTML5 autofocus
|
||||
$('input[autofocus]').siblings('label, i').addClass('active');
|
||||
|
||||
// Add active if form auto complete
|
||||
$(document).on('change', input_selector, function () {
|
||||
if ($(this).val().length !== 0 || $(this).attr('placeholder') !== undefined) {
|
||||
$(this).siblings('label, i').addClass('active');
|
||||
}
|
||||
validate_field($(this));
|
||||
});
|
||||
|
||||
// Add active if input element has been pre-populated on document ready
|
||||
$(document).ready(function () {
|
||||
Materialize.updateTextFields();
|
||||
});
|
||||
|
||||
// HTML DOM FORM RESET handling
|
||||
$(document).on('reset', function (e) {
|
||||
var formReset = $(e.target);
|
||||
if (formReset.is('form')) {
|
||||
formReset.find(input_selector).removeClass('valid').removeClass('invalid');
|
||||
formReset.find(input_selector).each(function () {
|
||||
if ($(this).attr('value') === '') {
|
||||
$(this).siblings('label, i').removeClass('active');
|
||||
}
|
||||
});
|
||||
|
||||
// Reset select
|
||||
formReset.find('select.initialized').each(function () {
|
||||
var reset_text = formReset.find('option[selected]').text();
|
||||
formReset.siblings('input.select-dropdown').val(reset_text);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// Add active when element has focus
|
||||
$(document).on('focus', input_selector, function () {
|
||||
$(this).siblings('label, i').addClass('active');
|
||||
});
|
||||
|
||||
$(document).on('blur', input_selector, function () {
|
||||
var $inputElement = $(this);
|
||||
if ($inputElement.val().length === 0 && $inputElement[0].validity.badInput !== true && $inputElement.attr('placeholder') === undefined) {
|
||||
$inputElement.siblings('label, i').removeClass('active');
|
||||
}
|
||||
validate_field($inputElement);
|
||||
});
|
||||
|
||||
validate_field = function (object) {
|
||||
var hasLength = object.attr('length') !== undefined;
|
||||
var lenAttr = parseInt(object.attr('length'));
|
||||
var len = object.val().length;
|
||||
|
||||
if (object.val().length === 0 && object[0].validity.badInput === false) {
|
||||
if (object.hasClass('validate')) {
|
||||
object.removeClass('valid');
|
||||
object.removeClass('invalid');
|
||||
}
|
||||
} else {
|
||||
if (object.hasClass('validate')) {
|
||||
// Check for character counter attributes
|
||||
if ((object.is(':valid') && hasLength && (len < lenAttr)) || (object.is(':valid') && !hasLength)) {
|
||||
object.removeClass('invalid');
|
||||
object.addClass('valid');
|
||||
} else {
|
||||
object.removeClass('valid');
|
||||
object.addClass('invalid');
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
// Textarea Auto Resize
|
||||
var hiddenDiv = $('.hiddendiv').first();
|
||||
if (!hiddenDiv.length) {
|
||||
hiddenDiv = $('<div class="hiddendiv common"></div>');
|
||||
$('body').append(hiddenDiv);
|
||||
}
|
||||
var text_area_selector = '.materialize-textarea';
|
||||
|
||||
function textareaAutoResize($textarea) {
|
||||
// Set font properties of hiddenDiv
|
||||
|
||||
var fontFamily = $textarea.css('font-family');
|
||||
var fontSize = $textarea.css('font-size');
|
||||
|
||||
if (fontSize) {
|
||||
hiddenDiv.css('font-size', fontSize);
|
||||
}
|
||||
if (fontFamily) {
|
||||
hiddenDiv.css('font-family', fontFamily);
|
||||
}
|
||||
|
||||
if ($textarea.attr('wrap') === "off") {
|
||||
hiddenDiv.css('overflow-wrap', "normal")
|
||||
.css('white-space', "pre");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
hiddenDiv.text($textarea.val() + '\n');
|
||||
var content = hiddenDiv.html().replace(/\n/g, '<br>');
|
||||
hiddenDiv.html(content);
|
||||
|
||||
|
||||
// When textarea is hidden, width goes crazy.
|
||||
// Approximate with half of window size
|
||||
|
||||
if ($textarea.is(':visible')) {
|
||||
hiddenDiv.css('width', $textarea.width());
|
||||
} else {
|
||||
hiddenDiv.css('width', $(window).width() / 2);
|
||||
}
|
||||
|
||||
$textarea.css('height', hiddenDiv.height());
|
||||
}
|
||||
|
||||
$(text_area_selector).each(function () {
|
||||
var $textarea = $(this);
|
||||
if ($textarea.val().length) {
|
||||
textareaAutoResize($textarea);
|
||||
}
|
||||
});
|
||||
|
||||
$('body').on('keyup keydown', text_area_selector, function () {
|
||||
textareaAutoResize($(this));
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}); // End of $(document).ready
|
||||
|
||||
}(jQuery));
|
||||
Reference in New Issue
Block a user