merge duong

This commit is contained in:
2026-04-24 23:32:19 +07:00
+30 -15
View File
@@ -344,16 +344,28 @@
// return html; // return html;
// } // }
function iconPickerInputHtml(extraClass, currentValue) {
return (
'<div class="input-group">' +
'<span class="input-group-text icon-preview-cell" style="min-width:38px">' +
(currentValue ? '<i class="' + escapeHtml(currentValue) + '"></i>' : '') +
'</span>' +
'<input type="text" class="form-control ch-icon ' + escapeHtml(extraClass) + '"' +
' value="' + escapeHtml(currentValue || '') + '"' +
' placeholder="Click to pick..." readonly' +
' style="cursor:pointer;background:#fff" onclick="IconPicker.open(this)">' +
'</div>'
);
}
function buildServiceRow(svc) { function buildServiceRow(svc) {
svc = svc || {}; svc = svc || {};
var iconSel = '<select class="form-select svc-icon-select">' + iconOptionsHtml(svc.icon) + '</select>';
var hoursIconSel = '<select class="form-select svc-hours-icon-select">' + iconOptionsHtml(svc.hoursIcon) + '</select>';
return ( return (
'<div class="card service-row border">' + '<div class="card service-row border">' +
'<div class="card-body">' + '<div class="card-body">' +
'<div class="row g-2">' + '<div class="row g-2">' +
'<div class="col-md-4"><label class="form-label small">Icon</label>' + iconPickerInput('svc-icon-select', svc.icon) + '</div>' + '<div class="col-md-4"><label class="form-label small">Icon</label>' + iconPickerInputHtml('svc-icon-field', svc.icon) + '</div>' +
'<div class="col-md-4"><label class="form-label small">Hours icon</label>' + iconPickerInput('svc-hours-icon-select', svc.hoursIcon) + '</div>' + '<div class="col-md-4"><label class="form-label small">Hours icon</label>' + iconPickerInputHtml('svc-hours-icon-field', svc.hoursIcon) + '</div>' +
'<div class="col-md-4 d-flex align-items-end justify-content-end">' + '<div class="col-md-4 d-flex align-items-end justify-content-end">' +
'<button type="button" class="btn btn-outline-danger btn-sm remove-service"><i class="fas fa-trash"></i></button>' + '<button type="button" class="btn btn-outline-danger btn-sm remove-service"><i class="fas fa-trash"></i></button>' +
'</div>' + '</div>' +
@@ -376,7 +388,7 @@
return ( return (
'<div class="card channel-row border"><div class="card-body py-2">' + '<div class="card channel-row border"><div class="card-body py-2">' +
'<div class="row g-2 align-items-end">' + '<div class="row g-2 align-items-end">' +
'<div class="col-md-3"><label class="form-label small">Icon</label>' + iconPickerInput('ch-icon-select', ch.icon) + '</div>' + '<div class="col-md-3"><label class="form-label small">Icon</label>' + iconPickerInputHtml('ch-icon-field', ch.icon) + '</div>' +
'<div class="col-md-3"><label class="form-label small">Title</label>' + '<div class="col-md-3"><label class="form-label small">Title</label>' +
'<input type="text" class="form-control ch-title" value="' + escapeHtml(ch.title) + '"></div>' + '<input type="text" class="form-control ch-title" value="' + escapeHtml(ch.title) + '"></div>' +
'<div class="col-md-5"><label class="form-label small">Detail</label>' + '<div class="col-md-5"><label class="form-label small">Detail</label>' +
@@ -427,14 +439,16 @@
var services = []; var services = [];
document.querySelectorAll('#servicesContainer .service-row').forEach(function(row) { document.querySelectorAll('#servicesContainer .service-row').forEach(function(row) {
// Icon inputs: all .ch-icon inside this row — first = service icon, second = hours icon
var iconInputs = row.querySelectorAll('.ch-icon');
services.push({ services.push({
icon: row.querySelector('.svc-icon-select').value, icon: iconInputs[0] ? iconInputs[0].value : '',
title: row.querySelector('.svc-title').value.trim(), title: row.querySelector('.svc-title') ? row.querySelector('.svc-title').value.trim() : '',
description: row.querySelector('.svc-description').value.trim(), description: row.querySelector('.svc-description') ? row.querySelector('.svc-description').value.trim() : '',
hours: row.querySelector('.svc-hours').value.trim(), hours: row.querySelector('.svc-hours') ? row.querySelector('.svc-hours').value.trim() : '',
hoursIcon: row.querySelector('.svc-hours-icon-select').value, hoursIcon: iconInputs[1] ? iconInputs[1].value : '',
buttonLabel: row.querySelector('.svc-btn-label').value.trim(), buttonLabel: row.querySelector('.svc-btn-label') ? row.querySelector('.svc-btn-label').value.trim() : '',
buttonHref: row.querySelector('.svc-btn-href').value.trim(), buttonHref: row.querySelector('.svc-btn-href') ? row.querySelector('.svc-btn-href').value.trim() : '',
}); });
}); });
document.getElementById('directoryJson').value = JSON.stringify({ document.getElementById('directoryJson').value = JSON.stringify({
@@ -445,10 +459,11 @@
var channels = []; var channels = [];
document.querySelectorAll('#channelsContainer .channel-row').forEach(function(row) { document.querySelectorAll('#channelsContainer .channel-row').forEach(function(row) {
var iconInput = row.querySelector('.ch-icon');
channels.push({ channels.push({
icon: row.querySelector('.ch-icon-select').value, icon: iconInput ? iconInput.value : '',
title: row.querySelector('.ch-title').value.trim(), title: row.querySelector('.ch-title') ? row.querySelector('.ch-title').value.trim() : '',
detail: row.querySelector('.ch-detail').value.trim(), detail: row.querySelector('.ch-detail') ? row.querySelector('.ch-detail').value.trim() : '',
}); });
}); });
var departments = []; var departments = [];