Votre expert en cheminées, poêles et tubages en Valais
Bienvenue chez Cheminées du Valais

Notre catalogue
Explorez une sélection variée de cheminées, poêles et inserts, alliant design, performance et confort. Nos modèles, issus de marques de renom, proposent des solutions de chauffages et de styles qui sauront répondre à vos besoins. Trouvez l’équipement parfait pour votre intérieur ou extérieur avec élégance et efficacité.
Nos promotions
CHF
// Should call the progress method to update the progress to 100% before calling load
// Setting computable to false switches the loading indicator to infinite mode
request.upload.onprogress = (e) => {
progress(e.lengthComputable, e.loaded, e.total);
};
// Should call the load method when done and pass the returned server file id
// this server file id is then used later on when reverting or restoring a file
// so your server knows which file to return without exposing that info to the client
request.onload = function() {
if (request.status >= 200 && request.status < 300) {
const json = JSON.parse(request.responseText);
if (!json.success || !json.data) {
error('Error uploading file');
return;
}
// Usually "json.data" is an array or object from your code
let uploadedFile = json.data;
// If it's an array, e.g. [ { url: "...", name: "...", ... } ], pick first
if (Array.isArray(uploadedFile)) {
uploadedFile = uploadedFile[0];
}
// `uploadedFile` might look like { url: "...", name: "...", attachmentId: ... }
// Step 1: Pass final file info as a string:
load(JSON.stringify(uploadedFile));
// Step 2: Optionally store in your custom array
if (!window.bricksforgeData.temporaryFileUploads) {
window.bricksforgeData.temporaryFileUploads = [];
}
window.bricksforgeData.temporaryFileUploads.push({
file: uploadedFile,
field: fieldName,
});
} else {
error('Error uploading file');
}
};
request.send(formData);
// Should expose an abort method so the request can be cancelled
return {
abort: () => {
// This function is entered if the user has tapped the cancel button
request.abort();
// Let FilePond know the request has been cancelled
abort();
},
};
},
load: (source, load, error, progress, abort, headers) => {
const formData = new FormData();
formData.append('file', source);
const request = new XMLHttpRequest();
request.open('POST', BRFELEMENTS.apiurl + 'form_file_load_initial_files');
request.setRequestHeader('X-WP-Nonce', BRFELEMENTS.nonce);
progress(true, 0, 1024);
request.onload = () => {
if (request.status >= 200 && request.status < 300) {
let response = JSON.parse(request.responseText);
if (!response.success) {
error('Error loading file');
return;
}
let fileData = response.data;
let binary = atob(fileData.content);
let array = [];
for (let i = 0; i < binary.length; i++) {
array.push(binary.charCodeAt(i));
}
let blob = new Blob([new Uint8Array(array)], {
type: fileData.type
});
blob.lastModified = Date.now();
blob.name = fileData.name;
load(blob);
} else {
error('Error loading file');
}
};
request.onerror = () => {
error('Network error');
};
request.send(formData);
return {
abort: () => {
request.abort();
abort();
},
};
},
}
}),
});
// Fix label accessibility: Make the label (if exists) use the same ID as the filepond browser input
setTimeout(() => {
if (fp.element) {
const filePondBrowser = fp.element.querySelector('.filepond--browser');
const label = fp.element.closest('.form-group').querySelector('label');
if (label && filePondBrowser) {
label.setAttribute('for', filePondBrowser.id);
}
}
}, 100);
// If a file is removed, we also remove it from the temporary uploads
fp.on('removefile', (error, file) => {
if (error) {
console.log('File removal error', error);
}
if (window.bricksforgeData.temporaryFileUploads) {
window.bricksforgeData.temporaryFileUploads = window.bricksforgeData.temporaryFileUploads.filter((f) => {
return f.file.originalFilename != file.filename && f.file.originalFilesize != file.originalFilesize;
});
}
// We remove the file from the initial files as well
if (window.bricksforgeData.initialFiles) {
let initialFilesData = window.bricksforgeData.initialFiles;
let matchingInitialFilesData = initialFilesData.find((d) => d.formId == form.dataset.scriptId);
initialFilesData = initialFilesData.map((data) => {
if (data.formId == form.dataset.scriptId) {
data.files = data.files.filter((fi) => {
let source = fi.source; // URL
if (source == file.source) {
// We remove this file
return false;
}
return true;
});
}
return data;
});
if (initialFilesData) {
window.bricksforgeData.initialFiles = initialFilesData;
}
}
BrfProForms.clearLiveValue(file.source, file.id);
updateFileCount();
});
fp.on('processfile', (error, file) => {
// Todo
return;
if (error) return;
const data = JSON.parse(file.serverId);
file.setMetadata('realUrl', data.url);
// That's it: no extra load() calls, no re-adding the file.
});
fp.on('addfile', (fileItems) => {
const instance = new BrfProForms(form, true);
instance.handleLiveValues();
// We remove .brf-invalid of the parent .form-group
const elementId = element.id;
const formGroup = document.querySelector(`#${elementId}`)?.closest(".form-group");
if (formGroup) {
formGroup.classList.remove("brf-invalid");
const validationMessage = formGroup.querySelector(".brf-validation-message");
if (validationMessage) {
validationMessage.remove();
}
}
updateFileCount();
});
fp.on('reorderfiles', (fileItems) => {
// Build array of their sources (URLs, or IDs, whichever you use)
const fieldId = element.getAttribute('name');
const newOrder = fileItems.map((item) => {
const metaUrl = item.getMetadata('realUrl');
// If we have a realUrl, use that; if not, fallback to item.source or local blob
return metaUrl || item.source;
});
// Get the existing fileOrder JSON from the hidden input
const hidden = document.getElementById('fileOrder');
let fileOrderObj = {};
try {
fileOrderObj = JSON.parse(hidden.value || '{}');
} catch (err) {
console.warn('Invalid JSON in #fileOrder hidden input, resetting...');
}
// Update or set the array for this specific field
fileOrderObj[fieldId] = newOrder;
// Write back to the hidden input
hidden.value = JSON.stringify(fileOrderObj);
updateFileCount();
});
// We save the FilePond instance
if (!window.bricksforgeData.filePondInstances) {
window.bricksforgeData.filePondInstances = [];
}
window.bricksforgeData.filePondInstances.push(fp);
}
window.bricksforgeData.initFileField();




