mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-07 20:08:53 +00:00
[ticket/16413] refactor JQuery to pure Javascript
PHPBB3-16413
This commit is contained in:
parent
dbe91cac88
commit
80af2dc25e
2 changed files with 61 additions and 53 deletions
|
@ -244,6 +244,67 @@ function parse_document(container)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Automatically display custom profile fields FontAwesome icon
|
||||||
|
*/
|
||||||
|
const DEFAULT_COLOR = '#000000';
|
||||||
|
const HEX_REGEX = /^#[A-Fa-f0-9]{6}$/;
|
||||||
|
const colorPicker = document.getElementById('field_icon_color_picker');
|
||||||
|
const colorText = colorPicker.previousElementSibling;
|
||||||
|
|
||||||
|
const syncColors = (source, target) => {
|
||||||
|
const value = '#' + source.value.trim();
|
||||||
|
target.value = HEX_REGEX.test(value) ? value : DEFAULT_COLOR;
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleInput = ({ target }) => {
|
||||||
|
if (target === colorPicker) {
|
||||||
|
colorText.value = target.value.substring(1);
|
||||||
|
} else {
|
||||||
|
syncColors(colorText, colorPicker);
|
||||||
|
}
|
||||||
|
const icon = field_icon?.nextElementSibling;
|
||||||
|
if (icon && icon.tagName.toLowerCase() === 'i') {
|
||||||
|
icon.style.color = colorPicker.value;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
colorPicker.addEventListener('input', handleInput);
|
||||||
|
colorText.addEventListener('input', handleInput);
|
||||||
|
colorText.addEventListener('blur', () => {
|
||||||
|
if (!colorText.value.trim()) {
|
||||||
|
colorPicker.value = DEFAULT_COLOR;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
syncColors(colorText, colorPicker);
|
||||||
|
|
||||||
|
var field_icon = document.getElementById('field_icon');
|
||||||
|
if (!field_icon.nextElementSibling) {
|
||||||
|
icon_demo = document.createElement('i');
|
||||||
|
icon_demo.setAttribute('style', `margin:0 6px; color: ${colorPicker.value}`);
|
||||||
|
icon_demo.setAttribute('class', `o-icon o-icon-font fa-fw fas acp-icon`);
|
||||||
|
field_icon.after(icon_demo);
|
||||||
|
}
|
||||||
|
|
||||||
|
const updateIconClass = (element, newClass) => {
|
||||||
|
|
||||||
|
element.classList.forEach(className => {
|
||||||
|
if (className.startsWith('fa-') && className !== 'fa-fw') {
|
||||||
|
element.classList.remove(className);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
element.classList.add(`fa-${newClass}`);
|
||||||
|
};
|
||||||
|
|
||||||
|
field_icon.addEventListener('keyup', function() {
|
||||||
|
updateIconClass(this.nextElementSibling, this.value);
|
||||||
|
});
|
||||||
|
|
||||||
|
field_icon.addEventListener('blur', function() {
|
||||||
|
updateIconClass(this.nextElementSibling, this.value);
|
||||||
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Run onload functions
|
* Run onload functions
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -420,58 +420,5 @@ $(function() {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
|
||||||
* Automatically display custom profile fields FontAwesome icon
|
|
||||||
*/
|
|
||||||
$(function() {
|
|
||||||
var $field_icon = $('#field_icon');
|
|
||||||
if (!$field_icon.next('i').length) {
|
|
||||||
$field_icon.after('<i style="font-size: 16px; margin:0 6px; vertical-align: middle;"></i>');
|
|
||||||
}
|
|
||||||
|
|
||||||
$field_icon.on('keyup blur', function() {
|
|
||||||
var input = $(this).val();
|
|
||||||
var $icon = $(this).next('i');
|
|
||||||
$icon.attr('class', 'o-icon o-icon-font fa-fw fa-' + input + ' fas acp-icon');
|
|
||||||
});
|
|
||||||
|
|
||||||
const DEFAULT_COLOR = '#000000';
|
|
||||||
const HEX_REGEX = /^#[A-Fa-f0-9]{6}$/;
|
|
||||||
const colorPicker = document.getElementById('field_icon_color_picker');
|
|
||||||
|
|
||||||
if (!colorPicker) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const colorText = colorPicker.previousElementSibling;
|
|
||||||
|
|
||||||
if (!colorText || colorText.type !== 'text') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const syncColors = (source, target) => {
|
|
||||||
const value = '#' + source.value.trim();
|
|
||||||
target.value = HEX_REGEX.test(value) ? value : DEFAULT_COLOR;
|
|
||||||
};
|
|
||||||
|
|
||||||
const handleInput = ({ target }) => {
|
|
||||||
if (target === colorPicker) {
|
|
||||||
colorText.value = target.value.substring(1);
|
|
||||||
} else {
|
|
||||||
syncColors(colorText, colorPicker);
|
|
||||||
}
|
|
||||||
var icon = $field_icon.next('i');
|
|
||||||
icon.css('color', colorPicker.value);
|
|
||||||
};
|
|
||||||
|
|
||||||
colorPicker.addEventListener("input", handleInput);
|
|
||||||
colorText.addEventListener("input", handleInput);
|
|
||||||
colorText.addEventListener('blur', () => {
|
|
||||||
if (!colorText.value.trim()) {
|
|
||||||
colorPicker.value = DEFAULT_COLOR;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
syncColors(colorText, colorPicker);
|
|
||||||
});
|
|
||||||
|
|
||||||
})(jQuery); // Avoid conflicts with other libraries
|
})(jQuery); // Avoid conflicts with other libraries
|
||||||
|
|
Loading…
Add table
Reference in a new issue