initial commit
This commit is contained in:
commit
52aad94550
94 changed files with 43651 additions and 0 deletions
275
node_modules/@materializecss/materialize/js/forms.js
generated
vendored
Executable file
275
node_modules/@materializecss/materialize/js/forms.js
generated
vendored
Executable file
|
@ -0,0 +1,275 @@
|
|||
(function($) {
|
||||
// Function to update labels of text fields
|
||||
M.updateTextFields = function() {
|
||||
let input_selector =
|
||||
'input[type=text], input[type=password], input[type=email], input[type=url], input[type=tel], input[type=number], input[type=search], input[type=date], input[type=time], textarea';
|
||||
$(input_selector).each(function(element, index) {
|
||||
let $this = $(this);
|
||||
if (
|
||||
element.value.length > 0 ||
|
||||
$(element).is(':focus') ||
|
||||
element.autofocus ||
|
||||
$this.attr('placeholder') !== null
|
||||
) {
|
||||
$this.siblings('label').addClass('active');
|
||||
} else if (element.validity) {
|
||||
$this.siblings('label').toggleClass('active', element.validity.badInput === true);
|
||||
} else {
|
||||
$this.siblings('label').removeClass('active');
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
M.validate_field = function(object) {
|
||||
let hasLength = object.attr('data-length') !== null;
|
||||
let lenAttr = parseInt(object.attr('data-length'));
|
||||
let len = object[0].value.length;
|
||||
|
||||
if (len === 0 && object[0].validity.badInput === false && !object.is(':required')) {
|
||||
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');
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
M.textareaAutoResize = function($textarea) {
|
||||
// Wrap if native element
|
||||
if ($textarea instanceof Element) {
|
||||
$textarea = $($textarea);
|
||||
}
|
||||
|
||||
if (!$textarea.length) {
|
||||
console.error('No textarea element found');
|
||||
return;
|
||||
}
|
||||
|
||||
// Textarea Auto Resize
|
||||
let hiddenDiv = $('.hiddendiv').first();
|
||||
if (!hiddenDiv.length) {
|
||||
hiddenDiv = $('<div class="hiddendiv common"></div>');
|
||||
$('body').append(hiddenDiv);
|
||||
}
|
||||
|
||||
// Set font properties of hiddenDiv
|
||||
let fontFamily = $textarea.css('font-family');
|
||||
let fontSize = $textarea.css('font-size');
|
||||
let lineHeight = $textarea.css('line-height');
|
||||
|
||||
// Firefox can't handle padding shorthand.
|
||||
let paddingTop = $textarea.css('padding-top');
|
||||
let paddingRight = $textarea.css('padding-right');
|
||||
let paddingBottom = $textarea.css('padding-bottom');
|
||||
let paddingLeft = $textarea.css('padding-left');
|
||||
|
||||
if (fontSize) {
|
||||
hiddenDiv.css('font-size', fontSize);
|
||||
}
|
||||
if (fontFamily) {
|
||||
hiddenDiv.css('font-family', fontFamily);
|
||||
}
|
||||
if (lineHeight) {
|
||||
hiddenDiv.css('line-height', lineHeight);
|
||||
}
|
||||
if (paddingTop) {
|
||||
hiddenDiv.css('padding-top', paddingTop);
|
||||
}
|
||||
if (paddingRight) {
|
||||
hiddenDiv.css('padding-right', paddingRight);
|
||||
}
|
||||
if (paddingBottom) {
|
||||
hiddenDiv.css('padding-bottom', paddingBottom);
|
||||
}
|
||||
if (paddingLeft) {
|
||||
hiddenDiv.css('padding-left', paddingLeft);
|
||||
}
|
||||
|
||||
// Set original-height, if none
|
||||
if (!$textarea.data('original-height')) {
|
||||
$textarea.data('original-height', $textarea.height());
|
||||
}
|
||||
|
||||
if ($textarea.attr('wrap') === 'off') {
|
||||
hiddenDiv.css('overflow-wrap', 'normal').css('white-space', 'pre');
|
||||
}
|
||||
|
||||
hiddenDiv.text($textarea[0].value + '\n');
|
||||
let 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[0].offsetWidth > 0 && $textarea[0].offsetHeight > 0) {
|
||||
hiddenDiv.css('width', $textarea.width() + 'px');
|
||||
} else {
|
||||
hiddenDiv.css('width', window.innerWidth / 2 + 'px');
|
||||
}
|
||||
|
||||
/**
|
||||
* Resize if the new height is greater than the
|
||||
* original height of the textarea
|
||||
*/
|
||||
if ($textarea.data('original-height') <= hiddenDiv.innerHeight()) {
|
||||
$textarea.css('height', hiddenDiv.innerHeight() + 'px');
|
||||
} else if ($textarea[0].value.length < $textarea.data('previous-length')) {
|
||||
/**
|
||||
* In case the new height is less than original height, it
|
||||
* means the textarea has less text than before
|
||||
* So we set the height to the original one
|
||||
*/
|
||||
$textarea.css('height', $textarea.data('original-height') + 'px');
|
||||
}
|
||||
$textarea.data('previous-length', $textarea[0].value.length);
|
||||
};
|
||||
|
||||
$(document).ready(function() {
|
||||
// Text based inputs
|
||||
let input_selector =
|
||||
'input[type=text], input[type=password], input[type=email], input[type=url], input[type=tel], input[type=number], input[type=search], input[type=date], input[type=time], textarea';
|
||||
|
||||
// Add active if form auto complete
|
||||
$(document).on('change', input_selector, function() {
|
||||
if (this.value.length !== 0 || $(this).attr('placeholder') !== null) {
|
||||
$(this)
|
||||
.siblings('label')
|
||||
.addClass('active');
|
||||
}
|
||||
M.validate_field($(this));
|
||||
});
|
||||
|
||||
// Add active if input element has been pre-populated on document ready
|
||||
$(document).ready(function() {
|
||||
M.updateTextFields();
|
||||
});
|
||||
|
||||
// HTML DOM FORM RESET handling
|
||||
$(document).on('reset', function(e) {
|
||||
let formReset = $(e.target);
|
||||
if (formReset.is('form')) {
|
||||
formReset
|
||||
.find(input_selector)
|
||||
.removeClass('valid')
|
||||
.removeClass('invalid');
|
||||
formReset.find(input_selector).each(function(e) {
|
||||
if (this.value.length) {
|
||||
$(this)
|
||||
.siblings('label')
|
||||
.removeClass('active');
|
||||
}
|
||||
});
|
||||
|
||||
// Reset select (after native reset)
|
||||
setTimeout(function() {
|
||||
formReset.find('select').each(function() {
|
||||
// check if initialized
|
||||
if (this.M_FormSelect) {
|
||||
$(this).trigger('change');
|
||||
}
|
||||
});
|
||||
}, 0);
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Add active when element has focus
|
||||
* @param {Event} e
|
||||
*/
|
||||
document.addEventListener(
|
||||
'focus',
|
||||
function(e) {
|
||||
if ($(e.target).is(input_selector)) {
|
||||
$(e.target)
|
||||
.siblings('label, .prefix')
|
||||
.addClass('active');
|
||||
}
|
||||
},
|
||||
true
|
||||
);
|
||||
|
||||
/**
|
||||
* Remove active when element is blurred
|
||||
* @param {Event} e
|
||||
*/
|
||||
document.addEventListener(
|
||||
'blur',
|
||||
function(e) {
|
||||
let $inputElement = $(e.target);
|
||||
if ($inputElement.is(input_selector)) {
|
||||
let selector = '.prefix';
|
||||
|
||||
if (
|
||||
$inputElement[0].value.length === 0 &&
|
||||
$inputElement[0].validity.badInput !== true &&
|
||||
$inputElement.attr('placeholder') === null
|
||||
) {
|
||||
selector += ', label';
|
||||
}
|
||||
$inputElement.siblings(selector).removeClass('active');
|
||||
M.validate_field($inputElement);
|
||||
}
|
||||
},
|
||||
true
|
||||
);
|
||||
|
||||
// Radio and Checkbox focus class
|
||||
let radio_checkbox = 'input[type=radio], input[type=checkbox]';
|
||||
$(document).on('keyup', radio_checkbox, function(e) {
|
||||
// TAB, check if tabbing to radio or checkbox.
|
||||
if (e.which === M.keys.TAB) {
|
||||
$(this).addClass('tabbed');
|
||||
let $this = $(this);
|
||||
$this.one('blur', function(e) {
|
||||
$(this).removeClass('tabbed');
|
||||
});
|
||||
return;
|
||||
}
|
||||
});
|
||||
|
||||
let text_area_selector = '.materialize-textarea';
|
||||
$(text_area_selector).each(function() {
|
||||
let $textarea = $(this);
|
||||
/**
|
||||
* Resize textarea on document load after storing
|
||||
* the original height and the original length
|
||||
*/
|
||||
$textarea.data('original-height', $textarea.height());
|
||||
$textarea.data('previous-length', this.value.length);
|
||||
M.textareaAutoResize($textarea);
|
||||
});
|
||||
|
||||
$(document).on('keyup', text_area_selector, function() {
|
||||
M.textareaAutoResize($(this));
|
||||
});
|
||||
$(document).on('keydown', text_area_selector, function() {
|
||||
M.textareaAutoResize($(this));
|
||||
});
|
||||
|
||||
// File Input Path
|
||||
$(document).on('change', '.file-field input[type="file"]', function() {
|
||||
let file_field = $(this).closest('.file-field');
|
||||
let path_input = file_field.find('input.file-path');
|
||||
let files = $(this)[0].files;
|
||||
let file_names = [];
|
||||
for (let i = 0; i < files.length; i++) {
|
||||
file_names.push(files[i].name);
|
||||
}
|
||||
path_input[0].value = file_names.join(', ');
|
||||
path_input.trigger('change');
|
||||
});
|
||||
}); // End of $(document).ready
|
||||
})(cash);
|
Loading…
Add table
Add a link
Reference in a new issue