S’ouvre dans un nouvel onglet

Suivez notre chronique du feu sur

Episodes précédents

Votre expert en cheminées, poêles et tubages en Valais

Bienvenue chez Cheminées du Valais

Depuis plus de 15 ans, nous mettons notre expertise et notre passion au service de votre confort. Spécialisés dans la conception, l’installation et la rénovation de cheminées et poêles, nous vous garantissons des solutions sur-mesure alliant performance, design et respect des normes. 

Nous vous accompagnons tout au long de votre projet et pouvant compter sur la bonne collaboration avec des partenaires, nous sommes également en mesure de vous proposer des solutions clé en main. 

Notre priorité : votre satisfaction, grâce à des conseils personnalisés et un service d’excellence.

Donnez vie à vos projets avec un partenaire de confiance.

Années d'expérience

0
+

Nombre d'appareils en expo

0
+

Chantiers annuels

0
+ / an

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();

Contactez-nous

Produit : Accueil