1<!doctype html> 2<html lang="fr-FR"> 3<head > 4 <meta charset="utf-8"/> 5<meta name="title" content="Accès client"/> 6<meta name="robots" content="INDEX,FOLLOW"/> 7<meta name="viewport" content="width=device-width, initial-scale=1"/> 8<meta name="p:domain_verify" content="d389a291a8f8dd4dbe792d189fd2b956"/> 9<title>Accès client</title> 10<link rel="stylesheet" type="text/css" media="all" href="https://www.we-wall.com/static/version1786625269/_cache/merged/7248ab8d3fcb52de06488d6407b768c1.min.css" /> 11<link rel="icon" type="image/x-icon" href="https://www.we-wall.com/static/version1786625269/frontend/Texdecor/default/fr_FR/Magento_Theme/favicon.ico" /> 12<link rel="shortcut icon" type="image/x-icon" href="https://www.we-wall.com/static/version1786625269/frontend/Texdecor/default/fr_FR/Magento_Theme/favicon.ico" /> 13 14<meta name="clarity-site-verification" content="4de2f6ce-a325-4f60-9f27-1602f7e5bcbfâ/> 15 16 17 18<style> 19 picture.mfwebp source.lazyload, 20 picture.mfwebp source.lazy {background:none;content:none;} 21</style> 22 23 24 25 26<!-- GOOGLE TAG MANAGER --> 27 28<!-- END GOOGLE TAG MANAGER --> 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44<!-- added by Trusted Shops app: Start --> 45 46<!-- End --> 47 48</head> 49<body id="html-body" class="mst-nav__theme-hyva-reset mst-nav__theme-hyva-default mst-nav__theme-texdecor-default customer-account-login page-layout-1column"> 50 51<input name="form_key" type="hidden" value="Re5fy3d9lYbPZkVe" /><div class="page-wrapper"><header id="header-container" class="page-header bg-white"> 52 53 54<a class="action skip sr-only contentarea" 55 href="#contentarea"> 56 <span> 57 Allez au contenu </span> 58</a> 59 60 61<!--Clarity--> 62 63 64 65<div id="header" 66 class="container px-2 xlg:px-4 relative z-50 bg-white" 67 x-data="initHeader()" 68 @keydown.window.escape="searchOpen = false;" 69 @private-content-loaded.window="getData(event.detail.data)" 70 @scroll.window="scroll();"> 71 <div id="pre-header-links" class="hidden xlg:flex gap-5 py-2"> 72 <div class="full-width bg-neutral-100 hidden xlg:flex absolute top-0 left-0 h-[32px]"></div> 73 <div class="w-5/12"> 74 <!-- Begin eTrusted widget tag --> 75 <etrusted-widget data-etrusted-widget-id="wdg-40912a33-e472-4606-850b-e3dbdde0c85a" class="h-[32px] block absolute -top-4 -left-20 w-[400px] z-[120]"></etrusted-widget> 76 <!-- End eTrusted widget tag --> 77 </div> 78 79 <div class="flex justify-end w-7/12"> 80 <span data-o="aHR0cHM6Ly93d3cud2Utd2FsbC5jb20vbm9zLXNlcnZpY2VzI3JldHJhaXQ," 81 class="hidden-when-print btn btn-tertiary btn-link text-xs text-neutral-700 obfuscated mr-4" 82 title="Retrait gratuit"> 83 <span>Retrait gratuit</span> 84 </span> 85 <span data-o="aHR0cHM6Ly93d3cud2Utd2FsbC5jb20vbm9zLXNlcnZpY2VzI3NhbXBsZQ,," 86 class="hidden-when-print btn btn-tertiary btn-link text-xs text-neutral-700 obfuscated mr-4" 87 title="Commandes échantillons"> 88 <span>Commandes échantillons</span> 89 </span> 90 <span data-o="aHR0cHM6Ly93d3cud2Utd2FsbC5jb20vbm9zLW1hcnF1ZXM," 91 class="hidden-when-print btn btn-tertiary btn-link text-xs text-neutral-700 obfuscated mr-4" 92 title="Nos marques"> 93 <span>Nos marques</span> 94 </span> 95 <span data-o="aHR0cHM6Ly93d3cud2Utd2FsbC5jb20vcmV0YWlsZXIvYWNjb3VudC9sb2dpbi8," 96 class="hidden-when-print btn btn-tertiary btn-link text-xs text-neutral-700 obfuscated" 97 title="Espace partenaire"> 98 <span>Espace partenaire</span> 99 </span> 100 </div> 101 </div> 102 103 <div class="contain-header flex flex-wrap items-center xlg:items-center justify-between mt-0 xlg:mt-2 xlg:h-auto"> 104 <button @click="navMobile = !navMobile; document.documentElement.classList.add('noscroll');" type="button" 105 class="inline-flex xlg:hidden btn btn-tertiary btn-icon-only btn-size-md" 106 aria-label="Ouvrir la navigation"> 107 <svg fill="currentColor" class="w-6 h-6" focusable="false" aria-hidden="true" 108 xmlns="http://www.w3.org/2000/svg"
109 viewBox="0 0 24 24"> 110 <path d="M22 4.5H2v1.108h20V4.5Zm-2.523 7.108H2v1.109h20v-1.109Zm-2.523 7H2v1.109h20v-1.109Z"/> 111 </svg> 112 </button> 113 114 115<a class="max-w-144 md:max-w-none logo block" 116 href="https://www.we-wall.com/" 117 title="WE WALL" 118 aria-label="store logo"> 119 <img class="block" src="https://www.we-wall.com/static/version1786625269/frontend/Texdecor/default/fr_FR/images/we-wall.svg" 120 title="WE WALL" 121 alt="WE WALL" 122 width="240" height="60" /> 123</a> 124 125 126 127 <div class="w-full xlg:w-[48rem] flex justify-center order-last xlg:order-none"> 128 <button id="menu-search-icon" 129 title="Recherche interne" 130 class="inline-flex items-center w-full xlg:w-2/3 mx-3 mb-3 xlg:m-0 h-9 border-solid border border-black hover:bg-neutral-100" 131 rel="nofollow" 132 @click.prevent=" 133 searchOpen = !searchOpen; 134 $nextTick(function () { document.querySelector('#search').select(); });"> 135 <div class="w-full flex items-center justify-start"> 136 <span class="ml-4 text-neutral-600 text-sm">Quel papier peint cherchez-vous ?</span> 137 </div> 138 139 <div class="w-9 h-[calc(2.25rem-2px)] bg-primary-500 flex items-center justify-center"> 140 <svg focusable="false" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" class="w-6 h-6" width="24" height="24"> 141 <path d="M10.64 19.28C5.88 19.28 2 15.4 2 10.64 2 5.88 5.88 2
14110.64 2c4.76 0 8.64 3.88 8.64 8.64 0 4.76-3.88 8.64-8.64 8.64Zm0-16.08c-4.1 0-7.44 3.34-7.44 7.44 0 4.1 3.34 7.44 7.44 7.44 4.1 0 7.44-3.34 7.44-7.44 0-4.1-3.34-7.44-7.44-7.44Z"></path> 142 <path d="m16.706 15.846-.849.848 5.346 5.346.849-.848-5.346-5.346Z"></path> 143 </svg> 144 </div> 145 </button> 146 </div> 147 148 <ul class="flex relative right-2 xlg:right-auto transform xl:gap-1 order-3 hidden-when-print"> 149 <li> 150 <a href="https://www.we-wall.com/magasin-papier-peint" title="Magasins papier peint" 151 class="btn btn-tertiary btn-icon-only btn-size-md" aria-label="Magasins papier peint"> 152 <svg focusable="false" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" class="w-6 h-6" width="24" height="24"> 153 <path d="m12.043 22.294-5.99-7.09c-1.24-1.47-1.95-3.13-2.04-4.82-.1-1.79.39-3.58 1.38-5.02.59-.85 1.36-1.58 2.29-2.14a8.41 8.41 0 0 1 8.48-.15c1.2.67 2.14 1.59 2.81 2.71 1.63 2.73 1.46 6.22-.43 8.88l-6.49 7.63h-.01Zm0-19.08c-1.31 0-2.62.35-3.75 1.04-.79.48-1.43 1.08-1.92 1.8a6.894 6.894 0 0 0-1.17 4.27c.1 1.8 1.02 3.23 1.76 4.12l5.08 6.01 5.54-6.51c1.58-2.23 1.73-5.2.35-7.53-.56-.94-1.36-1.71-2.37-2.28a7.16 7.16 0 0 0-3.52-.91v-.01Z"></path> 154 <path d="M12.043 14.394c-2.45 0-4.44-1.99-4.44-4.44s1.99-4.44 4.44-4.44 4.44 1.99 4.44 4.44-1.99 4.44-4.44 4.44Zm0-7.67c-1.78 0-3.24 1.45-3.24 3.23s1.45 3.24 3.24 3.24a3.23 3.23 0 0 0 3.23-3.24c0-1.79-1.45-3.23-3.23-3.23Z"></path> 155 </svg> 156 </a> 157 </li> 158 <li> 159 160<div class="hidden xlg:block" x-data="initCustomerPopin()"> 161 <button 162 id="customer-menu" 163 class="xlg:inline-flex btn btn-tertiary btn-icon-only btn-size-md relative" 164 aria-label="Mon compte" 165 x-ref="button" 166 rel="nofollow" 167 title="Compte client" 168 x-on:click="toggle()" 169 :aria-expanded="open" 170 aria-expanded="false" 171 aria-controls="dropdown-customer-popin"> 172 173 174 <svg focusable="false" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" 175 fill="currentColor" class="w-6 h-6" width="24" height="24"> 176 <path 177 d="M12 13.4c-3.21 0-5.82-2.61-5.82-5.82 0-3.21 2.61-5.82 5.82-5.82 3.21 0 5.82 2.61 5.82 5.82 0 3.21-2.61 5.82-5.82 5.82Zm0-10.44c-2.55 0-4.62 2.07-4.62 4.62 0 2.55 2.07 4.62 4.62 4.62 2.55 0 4.62-2.07 4.62-4.62 0-2.55-2.07-4.62-4.62-4.62Z"></path> 178 <path 179 d="M3.2 22 2 21.96c.17-5.35 4.65-9.73 10-9.76 5.39-.02 9.93 4.35 10.1 9.76l-1.2.04c-.15-4.75-4.12-8.6-8.85-8.6H12c-4.71.02-8.66 3.88-8.81 8.6h.01Z"></path> 180 </svg> 181 </button> 182 183 <div class="absolute hidden -right-24 2xl:right-auto left-auto 2xl:left-1/2 z-50 bg-white p-6 shadow-sm w-80 184 text-center 2xl:transform 2xl:-translate-x-1/2" 185 x-ref="panel" 186 :class="{ 'block': open, 'hidden': !open }" 187 x-on:click.outside="close($refs.button)" 188 id="dropdown-customer-popin"> 189 <span data-o="aHR0cHM6Ly93d3cud2Utd2FsbC5jb20vY3VzdG9tZXIvYWNjb3VudC9sb2dpbi8," 190 class="btn btn-primary btn-size-md w-full justify-center obfuscated" 191 title="Compte client"> 192 Me connecter </span> 193 <div class="flex gap-2 items-center justify-center mt-4 text-sm"> 194 <span>Nouveau ?</span> 195 <span data-o="aHR0cHM6Ly93d3cud2Utd2FsbC5jb20vY3VzdG9tZXIvYWNjb3VudC9jcmVhdGUv" 196 class="btn btn-tertiary btn-link btn-size-xs underline obfuscated" 197 title="Compte client"> 198 <span> 199 Inscrivez-vous </span> 200 </span> 201 </div> 202 </div> 203 </div> 204 205<div class="xlg:hidden"> 206 <a class="xlg:inline-flex btn btn-tertiary btn-icon-only btn-size-md relative" href="https://www.we-wall.com/customer/account/login/"> 207 208 <svg focusable="false" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" 209 fill="currentColor" class="w-6 h-6" width="24" height="24"> 210 <path 211 d="M12 13.4c-3.21 0-5.82-2.61-5.82-5.82 0-3.21 2.61-5.82 5.82-5.82 3.21 0 5.82 2.61 5.82 5.82 0 3.21-2.61 5.82-5.82 5.82Zm0-10.44c-2.55 0-4.62 2.07-4.62 4.62 0 2.55 2.07 4.62 4.62 4.62 2.55 0 4.62-2.07 4.62-4.62 0-2.55-2.07-4.62-4.62-4.62Z"></path> 212 <path 213 d="M3.2 22 2 21.96c.17-5.35 4.65-9.73 10-9.76 5.39-.02 9.93 4.35 10.1 9.76l-1.2.04c-.15-4.75-4.12-8.6-8.85-8.6H12c-4.71.02-8.66 3.88-8.81 8.6h.01Z"></path> 214 </svg> 215 </a> 216</div> 217 218 219 </li> 220 <li>
221 <span data-o="aHR0cHM6Ly93d3cud2Utd2FsbC5jb20vd2lzaGxpc3Qv" 222 class="hidden xlg:inline-flex btn btn-tertiary btn-icon-only btn-size-md obfuscated" 223 aria-label="Ma liste dâenvies" 224 title="Ma liste dâenvies"> 225 <svg focusable="false" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" class="w-6 h-6" width="24" height="24"> 226 <path d="m12.057 22 8.062-8.061c2.559-2.56 3.534-5.493 2.68-8.043a5.67 5.67 0 0 0-4.593-3.834c-2.24-.328-4.442.647-6.158 2.681C10.342 2.71 8.13 1.734 5.89 2.063a5.657 5.657 0 0 0-4.593 3.833c-.844 2.56.13 5.493 2.68 8.043L12.048 22h.01ZM2.618 6.327a4.283 4.283 0 0 1 3.478-2.905c.215-.029.431-.047.647-.047 1.743 0 3.45 1.03 4.752 2.896l.563.806.562-.806c1.462-2.1 3.43-3.13 5.4-2.85a4.27 4.27 0 0 1 3.477 2.906c.684 2.044-.178 4.462-2.353 6.637l-7.086 7.086-7.087-7.086C2.796 10.789 1.943 8.37 2.618 6.327Z"></path> 227 </svg> 228 </span> 229 </li> 230 <li> 231 <span id="menu-cart-icon" class="btn btn-tertiary btn-icon-only btn-size-md relative obfuscated" 232 aria-label="Panier" 233 title="Panier" 234 data-o="aHR0cHM6Ly93d3cud2Utd2FsbC5jb20vY2hlY2tvdXQvY2FydC9pbmRleC8,"> 235 <template x-if="cart.summary_count"> 236 <span class="absolute top-2 right-2 rounded-full w-4 h-4 bg-black outline-badge flex items-center justify-center text-white text-[11px]" x-text="cart.summary_count"></span> 237 </template> 238 <svg focusable="false" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" class="w-6 h-6" width="24" height="24"> 239 <path d="M20.85 6.2H16.9L15.84 2H8.19L7.13 6.2H3.11L1.4 22.07h21.11L20.85 6.2Zm-11.72-3h5.77l.76 3H8.37l.76-3ZM4.18 7.4h15.59l1.41 13.47H2.74L4.18 7.4Z"></path> 240 </svg> 241 </span> 242 </li> 243 </ul> 244 245 246<nav id="menu-links" class="h-screen xlg:h-auto nav-menu w-full order-last xlg:mx-3 xlg:mt-3" role="navigation" 247 aria-label="Menu" 248 :class="searchOpen ? 'hidden' : ''" 249 x-show="!isMobile || navMobile"> 250 <div class="nav-mobile-header"> 251 252<a class="max-w-144 md:max-w-none" 253 href="https://www.we-wall.com/" 254 title="WE WALL" 255 aria-label="store logo"> 256 <img src="https://www.we-wall.com/static/version1786625269/frontend/Texdecor/default/fr_FR/images/we-wall.svg" 257 title="WE WALL" 258 alt="WE WALL" 259 width="144" height="36" /> 260</a> 261 262 263 <button id="button-close" 264 @click="navMobile = !navMobile; document.documentElement.classList.remove('noscroll');" 265 type="button" 266 class="absolute right-4 top-1/2 transform -translate-y-1/2 btn btn-tertiary btn-icon-only btn-size-xs" 267 aria-label="Fermer"> 268 <svg focusable="false" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" 269 class="text-neutral-900 w-6 h-6"> 270 <path 271 d="M12.04 12.677 5.93 18.92l-.858-.84 6.13-6.26-5.776-5.9.857-.84 5.759 5.882L17.8 5.08l.858.84-5.777 5.9 6.13 6.26-.857.84-6.112-6.243Z"/> 272 </svg> 273 </button> 274 </div> 275 276 <div class="xlg:flex xlg:flex-row xlg:w-full overflow-y-scroll xlg:overflow-y-auto h-[calc(100%-8.5rem)] xlg:h-auto"> 277 <ul class="menu xlg:!justify-start xlg:gap-8 xlg:w-3/4"> 278 279 <li> 280 <a href="https://www.we-wall.com/fin-de-serie.html" 281 :class="{'underlineHover' : !isMobile && subMenuOpen[212]}" 282 title="Papier peint Fin de série"> 283 <span class="font-medium xlg:font-normal" style="font-weight: bolder;background-color: #FFFF00"> 284 Fin de série </span> 285 </a> 286 </li> 287 288 <li> 289 <a href="https://www.we-wall.com/meilleures-ventes.html" 290 :class="{'underlineHover' : !isMobile && subMenuOpen[381]}" 291 title="Papier peint Meilleures Ventes">
292 <span class="font-medium xlg:font-normal" style="font-weight: bolder"> 293 Meilleures Ventes </span> 294 </a> 295 </li> 296 297 <li> 298 <a href="https://www.we-wall.com/papier-peint.html" 299 @mouseover="isMobile ? '' : openSubMenu('5'); searchOpen = false" 300 @click.prevent="isMobile ? $event.preventDefault() : 301 window.location.href = 'https://www.we-wall.com/papier-peint.html'" 302 @click="isMobile ? openSubMenu('5') : ''" 303 :class="{'underlineHover' : !isMobile && subMenuOpen[5]}" 304 title="Papier peint"> 305 <span class="font-medium xlg:font-normal" style=""> 306 Papier peint </span> 307 </a> 308 <div x-show="subMenuOpen[5]" 309 x-trap="subMenuOpen[5]" 310 @mouseleave="isMobile ? '' : openSubMenu('5');" 311 class="submenu" 312 style="display: none;" 313 role="navigation"> 314 <div class="nav-mobile-header"> 315 316<a class="max-w-144 md:max-w-none" 317 href="https://www.we-wall.com/" 318 title="WE WALL" 319 aria-label="store logo"> 320 <img src="https://www.we-wall.com/static/version1786625269/frontend/Texdecor/default/fr_FR/images/we-wall.svg" 321 title="WE WALL" 322 alt="WE WALL" 323 width="144" height="36" /> 324</a> 325 326 327 <button 328 @click="document.getElementById('button-close').dispatchEvent(new Event('click'));" 329 type="button" 330 class="absolute right-4 top-1/2 transform -translate-y-1/2 btn btn-tertiary btn-icon-only btn-size-xs" 331 aria-label="Fermer"> 332 <svg focusable="false" aria-hidden="true" xmlns="http://www.w3.org/2000/svg"
333 viewBox="0 0 24 24" class="text-neutral-900 w-6 h-6"> 334 <path 335 d="M12.04 12.677 5.93 18.92l-.858-.84 6.13-6.26-5.776-5.9.857-.84 5.759 5.882L17.8 5.08l.858.84-5.777 5.9 6.13 6.26-.857.84-6.112-6.243Z"/> 336 </svg> 337 </button> 338 </div> 339 <div class="nav-mobile-child-header"> 340 <button id="contentsearch" type="button" 341 @click="subMenuOpen[5] = !subMenuOpen[5]" 342 aria-label="Retour"> 343 <svg fill="currentColor" class="w-5 h-5 relative -left-1" focusable="false" 344 aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"> 345 <path d="M3 11.84 6.886 14v-1.529H21V11.21H6.886V9.68L3 11.84Z"/> 346 </svg> 347 </button> 348 <span class="text-black"> 349 Papier peint </span> 350 <a href="https://www.we-wall.com/papier-peint.html" 351 title="Papier  peint" 352 class="text-black"> 353 <span>Voir tout</span> 354 </a> 355 </div> 356 <ul> 357 <li x-data="{open : (window.innerWidth < 1200 ? false : true)}"> 358 <a 359 href="https://www.we-wall.com/papier-peint/papier-peint-motif.html" 360 title="Papier peint Motif" 361 @click.prevent="window.innerWidth < 1200 ? $event.preventDefault() : 362 window.location.href = 'https://www.we-wall.com/papier-peint/papier-peint-motif.html'" 363 @click="window.innerWidth < 1200 ? open = !open : ''"> 364 <span class="uppercase font-medium"> 365 Motif </span> 366 <svg class="w-6 h-6 xlg:hidden" xmlns="http://www.w3.org/2000/svg"
367 viewBox="0 0 24 24" 368 fill="currentColor" focusable="false" aria-hidden="true"> 369 <path x-show="!open" 370 d="M18 11.4v1.2h-5.4V18h-1.2v-5.4H6v-1.2h5.4V6h1.2v5.4H18Z"/> 371 <path x-show="open" d="M18.06 11h-12v1.2h12V11Z"/> 372 </svg> 373 <svg class="w-6 h-6 hidden xlg:block" aria-hidden="true" focusable="false" 374 xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"> 375 <path 376 d="m9.65 17.88-.84-.85L13.88 12 8.81 6.97l.84-.85L15.58 12l-5.93 5.88Z"></path> 377 </svg> 378 </a> 379 380 <ul class="mb-3" x-show="open"> 381 <li> 382 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 383 href="https://www.we-wall.com/papier-peint/papier-peint-motif/papier-peint-rayures.html" 384 title="Papier peint Motif Rayures"> 385 <span>Rayures</span> 386 </a> 387 </li> 388 <li> 389 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 390 href="https://www.we-wall.com/papier-peint/papier-peint-motif/papier-peint-toile-de-jouy.html" 391 title="Papier peint Motif Toile de jouy"> 392 <span>Toile de jouy</span> 393 </a> 394 </li> 395 <li> 396 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 397 href="https://www.we-wall.com/papier-peint/papier-peint-motif/papier-peint-floral.html" 398 title="Papier peint Motif Floral"> 399 <span>Floral</span> 400 </a> 401 </li> 402 <li> 403 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 404 href="https://www.we-wall.com/papier-peint/papier-peint-motif/papier-peint-geometrique.html" 405 title="Papier peint Motif Géométrique"> 406 <sp
406an>Géométrique</span> 407 </a> 408 </li> 409 <li> 410 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 411 href="https://www.we-wall.com/papier-peint/papier-peint-motif/papier-peint-art-deco.html" 412 title="Papier peint Motif Art déco"> 413 <span>Art déco</span> 414 </a> 415 </li> 416 <li> 417 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 418 href="https://www.we-wall.com/papier-peint/papier-peint-motif/papier-peint-vegetal.html" 419 title="Papier peint Motif Végétal"> 420 <span>Végétal</span> 421 </a> 422 </li> 423 <li> 424 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 425 href="https://www.we-wall.com/papier-peint/papier-peint-motif/papier-peint-rayures-bleues.html" 426 title="Papier peint Motif Rayures bleues"> 427 <span>Rayures bleues</span> 428 </a> 429 </li> 430 <li> 431 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 432 href="https://www.we-wall.com/papier-peint/papier-peint-motif/papier-peint-unis.html" 433 title="Papier peint Motif Unis"> 434 <span>Unis</span> 435 </a> 436 </li> 437 <li> 438 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 439 href="https://www.we-wall.com/papier-peint/papier-peint-motif/papier-peint-enfants.html" 440 title="Papier peint Motif Enfants"> 441 <sp
441an>Enfants</span> 442 </a> 443 </li> 444 <li> 445 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 446 href="https://www.we-wall.com/papier-peint/papier-peint-motif/papier-peint-rayures-verticales.html" 447 title="Papier peint Motif Rayures verticales"> 448 <span>Rayures verticales</span> 449 </a> 450 </li> 451 <li> 452 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 453 href="https://www.we-wall.com/papier-peint/papier-peint-motif/papier-peint-vichy.html" 454 title="Papier peint Motif Vichy"> 455 <span>Vichy</span> 456 </a> 457 </li> 458 <li> 459 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 460 href="https://www.we-wall.com/papier-peint/papier-peint-motif/papier-peint-feuillage.html" 461 title="Papier peint Motif Feuillage"> 462 <span>Feuillage</span> 463 </a> 464 </li> 465 <li> 466 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 467 href="https://www.we-wall.com/papier-peint/papier-peint-motif/papier-peint-oiseaux.html" 468 title="Papier peint Motif Oiseaux"> 469 <span>Oiseaux</span> 470 </a> 471 </li> 472 <li> 473 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 474 href="https://www.we-wall.com/papier-peint/papier-peint-motif/papier-peint-japonais.html" 475 title="Papier peint Motif Japonais"> 476 <sp
476an>Japonais</span> 477 </a> 478 </li> 479 <li> 480 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 481 href="https://www.we-wall.com/papier-peint/papier-peint-motif/papier-peint-jungle.html" 482 title="Papier peint Motif Jungle"> 483 <span>Jungle</span> 484 </a> 485 </li> 486 <li> 487 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 488 href="https://www.we-wall.com/papier-peint/papier-peint-motif/papier-peint-animal.html" 489 title="Papier peint Motif Animal"> 490 <span>Animal</span> 491 </a> 492 </li> 493 <li> 494 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 495 href="https://www.we-wall.com/papier-peint/papier-peint-motif/papier-peint-foret.html" 496 title="Papier peint Motif Forêt"> 497 <span>Forêt</span> 498 </a> 499 </li> 500 <li> 501 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 502 href="https://www.we-wall.com/papier-peint/papier-peint-motif/papier-peint-carreaux.html" 503 title="Papier peint Motif Carreaux"> 504 <span>Carreaux</span> 505 </a> 506 </li> 507 <li> 508 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 509 href="https://www.we-wall.com/papier-peint/papier-peint-motif/papier-peint-imitation-bois.html" 510 title="Papier peint Motif Bois"> 511 <sp
511an>Bois</span> 512 </a> 513 </li> 514 <li> 515 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 516 href="https://www.we-wall.com/papier-peint/papier-peint-motif/papier-peint-nature.html" 517 title="Papier peint Motif Nature"> 518 <span>Nature</span> 519 </a> 520 </li> 521 <li> 522 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 523 href="https://www.we-wall.com/papier-peint/papier-peint-motif/papier-peint-trompe-l-oeil.html" 524 title="Papier peint Motif Trompe l'œil"> 525 <span>Trompe l'Åil</span> 526 </a> 527 </li> 528 <li> 529 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 530 href="https://www.we-wall.com/papier-peint/papier-peint-motif/leopard.html" 531 title="Papier peint Motif Léopard"> 532 <span>Léopard</span> 533 </a> 534 </li> 535 <li> 536 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 537 href="https://www.we-wall.com/catalog/category/view/s/faux-uni-texture/id/423/" 538 title="Papier peint Motif Faux uni/texture"> 539 <span>Faux uni/texture</span> 540 </a> 541 </li> 542 <li> 543 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 544 href="https://www.we-wall.com/papier-peint/papier-peint-motif/papier-peint-vintage.html" 545 title="Papier peint Motif Vintage"> 546 <sp
546an>Vintage</span> 547 </a> 548 </li> 549 </ul> 550 </li> 551 <li x-data="{open : (window.innerWidth < 1200 ? false : true)}"> 552 <a 553 href="https://www.we-wall.com/papier-peint/papier-peint-couleur.html" 554 title="Papier peint Couleur" 555 @click.prevent="window.innerWidth < 1200 ? $event.preventDefault() : 556 window.location.href = 'https://www.we-wall.com/papier-peint/papier-peint-couleur.html'" 557 @click="window.innerWidth < 1200 ? open = !open : ''"> 558 <span class="uppercase font-medium"> 559 Couleur </span> 560 <svg class="w-6 h-6 xlg:hidden" xmlns="http://www.w3.org/2000/svg"
561 viewBox="0 0 24 24" 562 fill="currentColor" focusable="false" aria-hidden="true"> 563 <path x-show="!open" 564 d="M18 11.4v1.2h-5.4V18h-1.2v-5.4H6v-1.2h5.4V6h1.2v5.4H18Z"/> 565 <path x-show="open" d="M18.06 11h-12v1.2h12V11Z"/> 566 </svg> 567 <svg class="w-6 h-6 hidden xlg:block" aria-hidden="true" focusable="false" 568 xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"> 569 <path 570 d="m9.65 17.88-.84-.85L13.88 12 8.81 6.97l.84-.85L15.58 12l-5.93 5.88Z"></path> 571 </svg> 572 </a> 573 574 <ul class="mb-3" x-show="open"> 575 <li> 576 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 577 href="https://www.we-wall.com/papier-peint/papier-peint-couleur/papier-peint-vert.html" 578 title="Papier peint Couleur VERT"> 579 <img class="mr-3" 580 src="/media/catalog/category/vert.JPG" 581 width="16" height="16"/> 582 <span>VERT</span> 583 </a> 584 </li> 585 <li> 586 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 587 href="https://www.we-wall.com/papier-peint/papier-peint-couleur/papier-peint-sauge.html" 588 title="Papier peint Couleur VERT SAUGE"> 589 <img class="mr-3" 590 src="/media/catalog/category/vert-sauge.jpg" 591 width="16" height="16"/> 592 <span>VERT SAUGE</span> 593 </a> 594 </li> 595 <li> 596 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 597 href="https://www.we-wall.com/papier-peint/papier-peint-couleur/papier-peint-bleu.html" 598 title="Papier peint Couleur BLEU"> 599 <img class="mr-3" 600 src="/media/catalog/category/bleu.JPG" 601 width="16" height="16"/> 602 <sp
602an>BLEU</span> 603 </a> 604 </li> 605 <li> 606 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 607 href="https://www.we-wall.com/papier-peint/papier-peint-couleur/papier-peint-beige.html" 608 title="Papier peint Couleur BEIGE"> 609 <img class="mr-3" 610 src="/media/catalog/category/beige_1.JPG" 611 width="16" height="16"/> 612 <span>BEIGE</span> 613 </a> 614 </li> 615 <li> 616 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 617 href="https://www.we-wall.com/papier-peint/papier-peint-couleur/papier-peint-rose.html" 618 title="Papier peint Couleur ROSE"> 619 <img class="mr-3" 620 src="/media/catalog/category/rose.JPG" 621 width="16" height="16"/> 622 <span>ROSE</span> 623 </a> 624 </li> 625 <li> 626 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 627 href="https://www.we-wall.com/papier-peint/papier-peint-couleur/papier-peint-noir.html" 628 title="Papier peint Couleur NOIR"> 629 <img class="mr-3" 630 src="/media/catalog/category/noir_1.JPG" 631 width="16" height="16"/> 632 <span>NOIR</span> 633 </a> 634 </li> 635 <li> 636 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 637 href="https://www.we-wall.com/papier-peint/papier-peint-couleur/papier-peint-rouge.html" 638 title="Papier peint Couleur ROUGE"> 639 <img class="mr-3" 640 src="/media/catalog/category/rouge.JPG" 641 width="16" height="16"/> 642 <sp
642an>ROUGE</span> 643 </a> 644 </li> 645 <li> 646 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 647 href="https://www.we-wall.com/papier-peint/papier-peint-couleur/papier-peint-peche.html" 648 title="Papier peint Couleur PÊCHE"> 649 <img class="mr-3" 650 src="/media/catalog/category/peinture-murale-peche-decohom.jpg" 651 width="16" height="16"/> 652 <span>PÃCHE</span> 653 </a> 654 </li> 655 <li> 656 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 657 href="https://www.we-wall.com/papier-peint/papier-peint-couleur/papier-peint-terracotta.html" 658 title="Papier peint Couleur TERRACOTTA"> 659 <img class="mr-3" 660 src="/media/catalog/category/w_2__1.png" 661 width="16" height="16"/> 662 <span>TERRACOTTA</span> 663 </a> 664 </li> 665 <li> 666 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 667 href="https://www.we-wall.com/papier-peint/papier-peint-couleur/papier-peint-marron.html" 668 title="Papier peint Couleur MARRON"> 669 <img class="mr-3" 670 src="/media/catalog/category/marron_1.JPG" 671 width="16" height="16"/> 672 <span>MARRON</span> 673 </a> 674 </li> 675 <li> 676 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 677 href="https://www.we-wall.com/papier-peint/papier-peint-couleur/papier-peint-dore.html" 678 title="Papier peint Couleur DORÉ"> 679 <img class="mr-3" 680 src="/media/catalog/category/Design_sans_titre_-_2024-07-03T1049
68004.589.png" 681 width="16" height="16"/> 682 <span>DORÃ</span> 683 </a> 684 </li> 685 <li> 686 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 687 href="https://www.we-wall.com/papier-peint/papier-peint-couleur/papier-peint-noir-et-blanc.html" 688 title="Papier peint Couleur NOIR ET BLANC"> 689 <img class="mr-3" 690 src="/media/catalog/category/noir-et-blanc_1.png" 691 width="16" height="16"/> 692 <span>NOIR ET BLANC</span> 693 </a> 694 </li> 695 <li> 696 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 697 href="https://www.we-wall.com/papier-peint/papier-peint-couleur/papier-peint-bleu-canard.html" 698 title="Papier peint Couleur BLEU CANARD"> 699 <img class="mr-3" 700 src="/media/catalog/category/bleu-canard.jpg" 701 width="16" height="16"/> 702 <span>BLEU CANARD</span> 703 </a> 704 </li> 705 <li> 706 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 707 href="https://www.we-wall.com/papier-peint/papier-peint-couleur/papier-peint-orange.html" 708 title="Papier peint Couleur ORANGE"> 709 <img class="mr-3" 710 src="/media/catalog/category/orange.JPG" 711 width="16" height="16"/> 712 <span>ORANGE</span> 713 </a> 714 </li> 715 <li> 716 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 717 href="https://www.we-wall.com/papier-peint/papier-peint-couleur/papier-peint-jaune.html" 718 title="Papier peint Couleur JAUNE"> 719 <img class="mr-3" 720 src="/media/catalog/category/jaune.JPG" 721 width="16" height="16"/> 722 <sp
722an>JAUNE</span> 723 </a> 724 </li> 725 <li> 726 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 727 href="https://www.we-wall.com/papier-peint/papier-peint-couleur/papier-peint-blanc.html" 728 title="Papier peint Couleur BLANC"> 729 <img class="mr-3" 730 src="/media/catalog/category/blanc_3.JPG" 731 width="16" height="16"/> 732 <span>BLANC</span> 733 </a> 734 </li> 735 <li> 736 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 737 href="https://www.we-wall.com/papier-peint/papier-peint-couleur/papier-peint-violet.html" 738 title="Papier peint Couleur VIOLET"> 739 <img class="mr-3" 740 src="/media/catalog/category/violet.JPG" 741 width="16" height="16"/> 742 <span>VIOLET</span> 743 </a> 744 </li> 745 <li> 746 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 747 href="https://www.we-wall.com/papier-peint/papier-peint-couleur/papier-peint-gris.html" 748 title="Papier peint Couleur GRIS"> 749 <img class="mr-3" 750 src="/media/catalog/category/gris_1.JPG" 751 width="16" height="16"/> 752 <span>GRIS</span> 753 </a> 754 </li> 755 <li> 756 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 757 href="https://www.we-wall.com/papier-peint/papier-peint-couleur/papier-peint-multicouleurs.html" 758 title="Papier peint Couleur MULTICOULEURS"> 759 <img class="mr-3" 760 src="/media/catalog/category/test-multicouleurs2_1.jpg" 761 width="16" height="16"/> 762 <sp
762an>MULTICOULEURS</span> 763 </a> 764 </li> 765 <li> 766 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 767 href="https://www.we-wall.com/papier-peint/papier-peint-couleur/papier-peint-cuivre.html" 768 title="Papier peint Couleur CUIVRE"> 769 <img class="mr-3" 770 src="/media/catalog/category/Capture_d_cran_2026-02-12_172018.png" 771 width="16" height="16"/> 772 <span>CUIVRE</span> 773 </a> 774 </li> 775 </ul> 776 </li> 777 <li x-data="{open : (window.innerWidth < 1200 ? false : true)}"> 778 <a 779 href="https://www.we-wall.com/papier-peint/papier-peint-piece.html" 780 title="Papier peint Pièce" 781 @click.prevent="window.innerWidth < 1200 ? $event.preventDefault() : 782 window.location.href = 'https://www.we-wall.com/papier-peint/papier-peint-piece.html'" 783 @click="window.innerWidth < 1200 ? open = !open : ''"> 784 <span class="uppercase font-medium"> 785 Pièce </span> 786 <svg class="w-6 h-6 xlg:hidden" xmlns="http://www.w3.org/2000/svg"
787 viewBox="0 0 24 24" 788 fill="currentColor" focusable="false" aria-hidden="true"> 789 <path x-show="!open" 790 d="M18 11.4v1.2h-5.4V18h-1.2v-5.4H6v-1.2h5.4V6h1.2v5.4H18Z"/> 791 <path x-show="open" d="M18.06 11h-12v1.2h12V11Z"/> 792 </svg> 793 <svg class="w-6 h-6 hidden xlg:block" aria-hidden="true" focusable="false" 794 xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"> 795 <path 796 d="m9.65 17.88-.84-.85L13.88 12 8.81 6.97l.84-.85L15.58 12l-5.93 5.88Z"></path> 797 </svg> 798 </a> 799 800 <ul class="mb-3" x-show="open"> 801 <li> 802 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 803 href="https://www.we-wall.com/papier-peint/papier-peint-piece/papier-peint-salle-de-bain.html" 804 title="Papier peint Pièce Salle de bain"> 805 <span>Salle de bain</span> 806 </a> 807 </li> 808 <li> 809 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 810 href="https://www.we-wall.com/papier-peint/papier-peint-piece/papier-peint-chambre.html" 811 title="Papier peint Pièce Chambre"> 812 <span>Chambre</span> 813 </a> 814 </li> 815 <li> 816 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 817 href="https://www.we-wall.com/papier-peint/papier-peint-piece/papier-peint-cuisine-1.html" 818 title="Papier peint Pièce Cuisine"> 819 <span>Cuisine</span> 820 </a> 821 </li> 822 <li> 823 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 824 href="https://www.we-wall.com/papier-peint/papier-peint-piece/papier-peint-entree-couloir.html" 825 title="Papier peint Pièce Entrée, couloir"> 826 <sp
826an>Entrée, couloir</span> 827 </a> 828 </li> 829 <li> 830 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 831 href="https://www.we-wall.com/papier-peint/papier-peint-pieces/papier-peint-cage-d-escalier-moderne.html" 832 title="Papier peint Pièce Cage d’escalier moderne"> 833 <span>Cage dâescalier moderne</span> 834 </a> 835 </li> 836 <li> 837 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 838 href="https://www.we-wall.com/papier-peint/papier-peint-piece/papier-peint-salle-a-manger.html" 839 title="Papier peint Pièce Salle à manger"> 840 <span>Salle à manger</span> 841 </a> 842 </li> 843 <li> 844 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 845 href="https://www.we-wall.com/papier-peint/papier-peint-piece/papier-peint-salon.html" 846 title="Papier peint Pièce Salon"> 847 <span>Salon</span> 848 </a> 849 </li> 850 <li> 851 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 852 href="https://www.we-wall.com/papier-peint/papier-peint-piece/papier-peint-entree.html" 853 title="Papier peint Pièce Entrée"> 854 <span>Entrée</span> 855 </a> 856 </li> 857 <li> 858 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 859 href="https://www.we-wall.com/papier-peint/papier-peint-pieces/papier-peint-bebe.html" 860 title="Papier peint Pièce Chambre bébé"> 861 <sp
861an>Chambre bébé</span> 862 </a> 863 </li> 864 <li> 865 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 866 href="https://www.we-wall.com/papier-peint/papier-peint-piece/papier-peint-chambre-d-enfants.html" 867 title="Papier peint Pièce Chambre d'enfants"> 868 <span>Chambre d'enfants</span> 869 </a> 870 </li> 871 <li> 872 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 873 href="https://www.we-wall.com/papier-peint/papier-peint-piece/papier-peint-bureau.html" 874 title="Papier peint Pièce Bureau"> 875 <span>Bureau</span> 876 </a> 877 </li> 878 <li> 879 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 880 href="https://www.we-wall.com/papier-peint/papier-peint-piece/papier-peint-couloir.html" 881 title="Papier peint Pièce Couloir"> 882 <span>Couloir</span> 883 </a> 884 </li> 885 <li> 886 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 887 href="https://www.we-wall.com/papier-peint/papier-peint-piece/papier-peint-piece-d-eau.html" 888 title="Papier peint Pièce Pièce d'eau"> 889 <span>Pièce d'eau</span> 890 </a> 891 </li> 892 <li> 893 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 894 href="https://www.we-wall.com/papier-peint/papier-peint-pieces/chambre-adulte-tendance.html" 895 title="Papier peint Pièce Chambre adulte tendance​"> 896 <sp
896an>Chambre adulte tendanceâ</span> 897 </a> 898 </li> 899 <li> 900 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 901 href="https://www.we-wall.com/papier-peint/papier-peint-pieces/papier-peint-bibliotheque.html" 902 title="Papier peint Pièce Bibliothèque"> 903 <span>Bibliothèque</span> 904 </a> 905 </li> 906 </ul> 907 </li> 908 909 <div class="w-px mt-12 bg-neutral-300 self-bottom hidden xlg:block"></div> 910 <div class="hidden xlg:flex xlg:flex-col"> 911 912 <a href="https://we-wall.com/papier-peint.html" 913 title="Voir tous les papiers peints" 914 class="btn btn-tertiary btn-size-xs text-sm px-0 mb-3"> 915 <span>Voir tous les papiers peints</span> 916 <svg class="w-6 h-6 ml-1" xmlns="http://www.w3.org/2000/svg"
917 viewBox="0 0 24 24"> 918 <path d="m21 12.48-3.886-2.16v1.529H3v1.262h14.114v1.53L21 12.48Z"></path> 919 </svg> 920 </a> 921 922 923 <div class="block mt-10"> 924 <p><a href="https://www.we-wall.com/papier-peint.html" title="SOLDES"> <img class="mb-3" src="https://www.we-wall.com/media/wysiwyg/rayures-we-wall-linen-lines-caselio.jpg" alt="RAYURES" width="227" height="324"></a></p> 925<p>PAPIER PEINT</p> 926<p>TENDANCE</p> </div> 927 </div> 928 </ul> 929 </div> 930 </li> 931 932 <li> 933 <a href="https://www.we-wall.com/panoramique.html" 934 @mouseover="isMobile ? '' : openSubMenu('6'); searchOpen = false" 935 @click.prevent="isMobile ? $event.preventDefault() : 936 window.location.href = 'https://www.we-wall.com/panoramique.html'" 937 @click="isMobile ? openSubMenu('6') : ''" 938 :class="{'underlineHover' : !isMobile && subMenuOpen[6]}" 939 title="Papier peint Panoramique"> 940 <span class="font-medium xlg:font-normal" style=""> 941 Panoramique </span> 942 </a> 943 <div x-show="subMenuOpen[6]" 944 x-trap="subMenuOpen[6]" 945 @mouseleave="isMobile ? '' : openSubMenu('6');" 946 class="submenu" 947 style="display: none;" 948 role="navigation"> 949 <div class="nav-mobile-header"> 950 951<a class="max-w-144 md:max-w-none" 952 href="https://www.we-wall.com/" 953 title="WE WALL" 954 aria-label="store logo"> 955 <img src="https://www.we-wall.com/static/version1786625269/frontend/Texdecor/default/fr_FR/images/we-wall.svg" 956 title="WE WALL" 957 alt="WE WALL" 958 width="144" height="36" /> 959</a> 960 961 962 <button 963 @click="document.getElementById('button-close').dispatchEvent(new Event('click'));" 964 type="button" 965 class="absolute right-4 top-1/2 transform -translate-y-1/2 btn btn-tertiary btn-icon-only btn-size-xs" 966 aria-label="Fermer"> 967 <svg focusable="false" aria-hidden="true" xmlns="http://www.w3.org/2000/svg"
968 viewBox="0 0 24 24" class="text-neutral-900 w-6 h-6"> 969 <path 970 d="M12.04 12.677 5.93 18.92l-.858-.84 6.13-6.26-5.776-5.9.857-.84 5.759 5.882L17.8 5.08l.858.84-5.777 5.9 6.13 6.26-.857.84-6.112-6.243Z"/> 971 </svg> 972 </button> 973 </div> 974 <div class="nav-mobile-child-header"> 975 <button id="contentsearch" type="button" 976 @click="subMenuOpen[6] = !subMenuOpen[6]" 977 aria-label="Retour"> 978 <svg fill="currentColor" class="w-5 h-5 relative -left-1" focusable="false" 979 aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"> 980 <path d="M3 11.84 6.886 14v-1.529H21V11.21H6.886V9.68L3 11.84Z"/> 981 </svg> 982 </button> 983 <span class="text-black"> 984 Panoramique </span> 985 <a href="https://www.we-wall.com/panoramique.html" 986 title="Panoramique" 987 class="text-black"> 988 <span>Voir tout</span> 989 </a> 990 </div> 991 <ul> 992 <li x-data="{open : (window.innerWidth < 1200 ? false : true)}"> 993 <a 994 href="https://www.we-wall.com/panoramique/panoramique-motif.html" 995 title="Papier peint Panoramique Motif" 996 @click.prevent="window.innerWidth < 1200 ? $event.preventDefault() : 997 window.location.href = 'https://www.we-wall.com/panoramique/panoramique-motif.html'" 998 @click="window.innerWidth < 1200 ? open = !open : ''"> 999 <span class="uppercase font-medium"> 1000 Motif </span> 1001 <svg class="w-6 h-6 xlg:hidden" xmlns="http://www.w3.org/2000/svg"
1002 viewBox="0 0 24 24" 1003 fill="currentColor" focusable="false" aria-hidden="true"> 1004 <path x-show="!open" 1005 d="M18 11.4v1.2h-5.4V18h-1.2v-5.4H6v-1.2h5.4V6h1.2v5.4H18Z"/> 1006 <path x-show="open" d="M18.06 11h-12v1.2h12V11Z"/> 1007 </svg> 1008 <svg class="w-6 h-6 hidden xlg:block" aria-hidden="true" focusable="false" 1009 xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"> 1010 <path 1011 d="m9.65 17.88-.84-.85L13.88 12 8.81 6.97l.84-.85L15.58 12l-5.93 5.88Z"></path> 1012 </svg> 1013 </a> 1014 1015 <ul class="mb-3" x-show="open"> 1016 <li> 1017 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 1018 href="https://www.we-wall.com/panoramique/panoramique-motif/panoramique-vegetal.html" 1019 title="Papier peint Panoramique Motif Végétal"> 1020 <span>Végétal</span> 1021 </a> 1022 </li> 1023 <li> 1024 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 1025 href="https://www.we-wall.com/panoramique/panoramique-motif/panoramique-floral.html" 1026 title="Papier peint Panoramique Motif Floral"> 1027 <span>Floral</span> 1028 </a> 1029 </li> 1030 <li> 1031 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 1032 href="https://www.we-wall.com/panoramique/panoramique-motif/panoramique-geometrique.html" 1033 title="Papier peint Panoramique Motif Géométrique"> 1034 <span>Géométrique</span> 1035 </a> 1036 </li> 1037 <li> 1038 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 1039 href="https://www.we-wall.com/panoramique/panoramique-motif/panoramique-jungle.html" 1040 title="Papier peint Panoramique Motif Jungle"> 1041 <sp
1041an>Jungle</span> 1042 </a> 1043 </li> 1044 <li> 1045 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 1046 href="https://www.we-wall.com/panoramique/panoramique-motif/panoramique-paysage.html" 1047 title="Papier peint Panoramique Motif Paysage"> 1048 <span>Paysage</span> 1049 </a> 1050 </li> 1051 <li> 1052 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 1053 href="https://www.we-wall.com/panoramique/panoramique-motif/panoramique-abstrait.html" 1054 title="Papier peint Panoramique Motif Abstrait"> 1055 <span>Abstrait</span> 1056 </a> 1057 </li> 1058 <li> 1059 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 1060 href="https://www.we-wall.com/panoramique/panoramique-motif/panoramique-animal.html" 1061 title="Papier peint Panoramique Motif Animal"> 1062 <span>Animal</span> 1063 </a> 1064 </li> 1065 <li> 1066 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 1067 href="https://www.we-wall.com/panoramique/panoramique-motif/panoramique-enfants.html" 1068 title="Papier peint Panoramique Motif Enfants"> 1069 <span>Enfants</span> 1070 </a> 1071 </li> 1072 <li> 1073 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 1074 href="https://www.we-wall.com/panoramique/panoramique-motif/panoramique-trompe-l-oeil.html" 1075 title="Papier peint Panoramique Motif Trompe l'œil"> 1076 <sp
1076an>Trompe l'Åil</span> 1077 </a> 1078 </li> 1079 <li> 1080 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 1081 href="https://www.we-wall.com/papier-peint-panoramique/panoramique-motif/panoramique-foret.html" 1082 title="Papier peint Panoramique Motif Forêt"> 1083 <span>Forêt</span> 1084 </a> 1085 </li> 1086 <li> 1087 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 1088 href="https://www.we-wall.com/panoramique/panoramique-motif/panoramique-faux-unis-texture.html" 1089 title="Papier peint Panoramique Motif Faux unis / Texture"> 1090 <span>Faux unis / Texture</span> 1091 </a> 1092 </li> 1093 <li> 1094 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 1095 href="https://www.we-wall.com/papier-peint-panoramique/panoramique-motif/papier-peint-panoramique-arbre.html" 1096 title="Papier peint Panoramique Motif Arbre"> 1097 <span>Arbre</span> 1098 </a> 1099 </li> 1100 <li> 1101 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 1102 href="https://www.we-wall.com/papier-peint-panoramique/panoramique-motif/carnaval-de-rio.html" 1103 title="Papier peint Panoramique Motif Carnaval de Rio"> 1104 <span>Carnaval de Rio</span> 1105 </a> 1106 </li> 1107 </ul> 1108 </li> 1109 <li x-data="{open : (window.innerWidth < 1200 ? false : true)}"> 1110 <a 1111 href="https://www.we-wall.com/panoramique/panoramique-couleur.html" 1112 title="Papier peint Panoramique Couleur" 1113 @click.prevent="window.innerWidth < 1200 ? $event.preventDefault() : 1114 window.location.href = 'https://www.we-wall.com/panoramique/panoramique-couleur.html'" 1115 @click="window.innerWidth < 1200 ? open = !open : ''">
1116 <span class="uppercase font-medium"> 1117 Couleur </span> 1118 <svg class="w-6 h-6 xlg:hidden" xmlns="http://www.w3.org/2000/svg" 1119 viewBox="0 0 24 24" 1120 fill="currentColor" focusable="false" aria-hidden="true"> 1121 <path x-show="!open" 1122 d="M18 11.4v1.2h-5.4V18h-1.2v-5.4H6v-1.2h5.4V6h1.2v5.4H18Z"/> 1123 <path x-show="open" d="M18.06 11h-12v1.2h12V11Z"/> 1124 </svg> 1125 <svg class="w-6 h-6 hidden xlg:block" aria-hidden="true" focusable="false" 1126 xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"> 1127 <path 1128 d="m9.65 17.88-.84-.85L13.88 12 8.81 6.97l.84-.85L15.58 12l-5.93 5.88Z"></path> 1129 </svg> 1130 </a> 1131 1132 <ul class="mb-3" x-show="open"> 1133 <li> 1134 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 1135 href="https://www.we-wall.com/panoramique/panoramique-couleur/panoramique-vert.html" 1136 title="Papier peint Panoramique Couleur VERT"> 1137 <img class="mr-3" 1138 src="/media/catalog/category/vert_1.JPG" 1139 width="16" height="16"/> 1140 <span>VERT</span> 1141 </a> 1142 </li> 1143 <li> 1144 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 1145 href="https://www.we-wall.com/panoramique/panoramique-couleur/panoramique-bleu.html" 1146 title="Papier peint Panoramique Couleur BLEU"> 1147 <img class="mr-3" 1148 src="/media/catalog/category/bleu_1.JPG" 1149 width="16" height="16"/> 1150 <span>BLEU</span> 1151 </a> 1152 </li> 1153 <li> 1154 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 1155 href="https://www.we-wall.com/panoramique/panoramique-couleur/panoramique-noir-et-blanc.html" 1156 title="Papier peint Panoramique Couleur NOIR ET BLANC"> 1157 <img class="mr-3" 1158 src="/media/catalog/category/noir-et-blanc.jpg" 1159 width="16" height="16"/> 1160 <sp
1160an>NOIR ET BLANC</span> 1161 </a> 1162 </li> 1163 <li> 1164 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 1165 href="https://www.we-wall.com/panoramique/panoramique-couleur/panoramique-beige.html" 1166 title="Papier peint Panoramique Couleur BEIGE"> 1167 <img class="mr-3" 1168 src="/media/catalog/category/beige_2.JPG" 1169 width="16" height="16"/> 1170 <span>BEIGE</span> 1171 </a> 1172 </li> 1173 <li> 1174 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 1175 href="https://www.we-wall.com/panoramique/panoramique-couleur/panoramique-rose.html" 1176 title="Papier peint Panoramique Couleur ROSE"> 1177 <img class="mr-3" 1178 src="/media/catalog/category/rose_1.JPG" 1179 width="16" height="16"/> 1180 <span>ROSE</span> 1181 </a> 1182 </li> 1183 <li> 1184 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 1185 href="https://www.we-wall.com/panoramique/panoramique-couleur/panoramique-blanc.html" 1186 title="Papier peint Panoramique Couleur BLANC"> 1187 <img class="mr-3" 1188 src="/media/catalog/category/blanc_4.JPG" 1189 width="16" height="16"/> 1190 <span>BLANC</span> 1191 </a> 1192 </li> 1193 <li> 1194 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 1195 href="https://www.we-wall.com/panoramique/panoramique-couleur/panoramique-jaune.html" 1196 title="Papier peint Panoramique Couleur JAUNE"> 1197 <img class="mr-3" 1198 src="/media/catalog/category/jaune_1.JPG" 1199 width="16" height="16"/> 1200 <sp
1200an>JAUNE</span> 1201 </a> 1202 </li> 1203 <li> 1204 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 1205 href="https://www.we-wall.com/panoramique/panoramique-couleur/panoramique-orange.html" 1206 title="Papier peint Panoramique Couleur ORANGE"> 1207 <img class="mr-3" 1208 src="/media/catalog/category/orange_1.JPG" 1209 width="16" height="16"/> 1210 <span>ORANGE</span> 1211 </a> 1212 </li> 1213 <li> 1214 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 1215 href="https://www.we-wall.com/panoramique/panoramique-couleur/panoramique-noir.html" 1216 title="Papier peint Panoramique Couleur NOIR"> 1217 <img class="mr-3" 1218 src="/media/catalog/category/noir.JPG" 1219 width="16" height="16"/> 1220 <span>NOIR</span> 1221 </a> 1222 </li> 1223 <li> 1224 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 1225 href="https://www.we-wall.com/panoramique/panoramique-couleur/panoramique-marron.html" 1226 title="Papier peint Panoramique Couleur MARRON"> 1227 <img class="mr-3" 1228 src="/media/catalog/category/marron.JPG" 1229 width="16" height="16"/> 1230 <span>MARRON</span> 1231 </a> 1232 </li> 1233 <li> 1234 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 1235 href="https://www.we-wall.com/panoramique/panoramique-couleur/panoramique-rouge.html" 1236 title="Papier peint Panoramique Couleur ROUGE"> 1237 <img class="mr-3" 1238 src="/media/catalog/category/rouge_1.JPG" 1239 width="16" height="16"/> 1240 <sp
1240an>ROUGE</span> 1241 </a> 1242 </li> 1243 <li> 1244 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 1245 href="https://www.we-wall.com/panoramique/panoramique-couleur/panoramique-violet.html" 1246 title="Papier peint Panoramique Couleur VIOLET"> 1247 <img class="mr-3" 1248 src="/media/catalog/category/violet_1.JPG" 1249 width="16" height="16"/> 1250 <span>VIOLET</span> 1251 </a> 1252 </li> 1253 <li> 1254 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 1255 href="https://www.we-wall.com/panoramique/panoramique-couleur/panoramique-gris.html" 1256 title="Papier peint Panoramique Couleur GRIS"> 1257 <img class="mr-3" 1258 src="/media/catalog/category/gris.JPG" 1259 width="16" height="16"/> 1260 <span>GRIS</span> 1261 </a> 1262 </li> 1263 <li> 1264 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 1265 href="https://www.we-wall.com/panoramique/panoramique-couleur/panoramique-multicouleurs.html" 1266 title="Papier peint Panoramique Couleur MULTICOULEURS"> 1267 <img class="mr-3" 1268 src="/media/catalog/category/test-multicouleurs2.jpg" 1269 width="16" height="16"/> 1270 <span>MULTICOULEURS</span> 1271 </a> 1272 </li> 1273 <li> 1274 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 1275 href="https://www.we-wall.com/catalog/category/view/s/noir-et-blanc/id/408/" 1276 title="Papier peint Panoramique Couleur NOIR ET BLANC"> 1277 <sp
1277an>NOIR ET BLANC</span> 1278 </a> 1279 </li> 1280 </ul> 1281 </li> 1282 <li x-data="{open : (window.innerWidth < 1200 ? false : true)}"> 1283 <a 1284 href="https://www.we-wall.com/panoramique/panoramique-piece.html" 1285 title="Papier peint Panoramique Pièce" 1286 @click.prevent="window.innerWidth < 1200 ? $event.preventDefault() : 1287 window.location.href = 'https://www.we-wall.com/panoramique/panoramique-piece.html'" 1288 @click="window.innerWidth < 1200 ? open = !open : ''"> 1289 <span class="uppercase font-medium"> 1290 Pièce </span> 1291 <svg class="w-6 h-6 xlg:hidden" xmlns="http://www.w3.org/2000/svg"
1292 viewBox="0 0 24 24" 1293 fill="currentColor" focusable="false" aria-hidden="true"> 1294 <path x-show="!open" 1295 d="M18 11.4v1.2h-5.4V18h-1.2v-5.4H6v-1.2h5.4V6h1.2v5.4H18Z"/> 1296 <path x-show="open" d="M18.06 11h-12v1.2h12V11Z"/> 1297 </svg> 1298 <svg class="w-6 h-6 hidden xlg:block" aria-hidden="true" focusable="false" 1299 xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"> 1300 <path 1301 d="m9.65 17.88-.84-.85L13.88 12 8.81 6.97l.84-.85L15.58 12l-5.93 5.88Z"></path> 1302 </svg> 1303 </a> 1304 1305 <ul class="mb-3" x-show="open"> 1306 <li> 1307 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 1308 href="https://www.we-wall.com/panoramique/panoramique-piece/panoramique-chambre.html" 1309 title="Papier peint Panoramique Pièce Chambre"> 1310 <span>Chambre</span> 1311 </a> 1312 </li> 1313 <li> 1314 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 1315 href="https://www.we-wall.com/panoramique/panoramique-piece/panoramique-salon.html" 1316 title="Papier peint Panoramique Pièce Salon"> 1317 <span>Salon</span> 1318 </a> 1319 </li> 1320 <li> 1321 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 1322 href="https://www.we-wall.com/panoramique/panoramique-piece/panoramique-salle-a-manger.html" 1323 title="Papier peint Panoramique Pièce Salle à manger"> 1324 <span>Salle à manger</span> 1325 </a> 1326 </li> 1327 <li> 1328 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 1329 href="https://www.we-wall.com/papier-peint-panoramique/panoramique-pieces/papier-peint-chambre-adulte.html" 1330 title="Papier peint Panoramique Pièce Chambre Adulte"> 1331 <sp
1331an>Chambre Adulte</span> 1332 </a> 1333 </li> 1334 <li> 1335 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 1336 href="https://www.we-wall.com/panoramique/panoramique-piece/panoramique-chambre-d-enfants.html" 1337 title="Papier peint Panoramique Pièce Chambre d'enfants"> 1338 <span>Chambre d'enfants</span> 1339 </a> 1340 </li> 1341 <li> 1342 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 1343 href="https://www.we-wall.com/panoramique/panoramique-piece/panoramique-bureau.html" 1344 title="Papier peint Panoramique Pièce Bureau"> 1345 <span>Bureau</span> 1346 </a> 1347 </li> 1348 <li> 1349 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 1350 href="https://www.we-wall.com/panoramique/panoramique-piece/panoramique-entree-couloir.html" 1351 title="Papier peint Panoramique Pièce Entrée, couloir"> 1352 <span>Entrée, couloir</span> 1353 </a> 1354 </li> 1355 <li> 1356 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 1357 href="https://www.we-wall.com/panoramique/panoramique-piece/panoramique-piece-d-eau.html" 1358 title="Papier peint Panoramique Pièce Pièce d'eau"> 1359 <span>Pièce d'eau</span> 1360 </a> 1361 </li> 1362 <li> 1363 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 1364 href="https://www.we-wall.com/papier-peint-panoramique/panoramique-pieces/papier-peint-panoramique-salle-de-bain.html" 1365 title="Papier peint Panoramique Pièce Salle de bain"> 1366 <sp
1366an>Salle de bain</span> 1367 </a> 1368 </li> 1369 <li> 1370 <a class="btn btn-tertiary btn-link flex px-6 xlg:px-0 py-2 xlg:py-0 items-baseline" 1371 href="https://www.we-wall.com/panoramique/panoramique-piece/panoramique-cuisine.html" 1372 title="Papier peint Panoramique Pièce Cuisine"> 1373 <span>Cuisine</span> 1374 </a> 1375 </li> 1376 </ul> 1377 </li> 1378 1379 <div class="w-px mt-12 bg-neutral-300 self-bottom hidden xlg:block"></div> 1380 <div class="hidden xlg:flex xlg:flex-col"> 1381 1382 <a href="https://we-wall.com/panoramique.html" 1383 title="Voir tous les panoramiques" 1384 class="btn btn-tertiary btn-size-xs text-sm px-0 mb-3"> 1385 <span>Voir tous les panoramiques</span> 1386 <svg class="w-6 h-6 ml-1" xmlns="http://www.w3.org/2000/svg"
1387 viewBox="0 0 24 24"> 1388 <path d="m21 12.48-3.886-2.16v1.529H3v1.262h14.114v1.53L21 12.48Z"></path> 1389 </svg> 1390 </a> 1391 1392 1393 <div class="block mt-10"> 1394 <p><a href="https://www.we-wall.com/panoramique.html" title="ECHANTILLONS"> <img class="mb-3" src="https://www.we-wall.com/media/wysiwyg/PAPIER_PEINT_1_.png" width="227" height="324"></a></p> 1395<p>PAPIER PEINT</p> 1396<p>PANORAMIQUE</p> </div> 1397 </div> 1398 </ul> 1399 </div> 1400 </li> 1401 1402 <li> 1403 <a href="https://www.we-wall.com/frise.html" 1404 :class="{'underlineHover' : !isMobile && subMenuOpen[240]}" 1405 title="Papier peint Frise"> 1406 <span class="font-medium xlg:font-normal" style=""> 1407 Frise </span> 1408 </a> 1409 </li> 1410 1411 <li> 1412 <a href="https://www.we-wall.com/nouveautes.html" 1413 :class="{'underlineHover' : !isMobile && subMenuOpen[11]}" 1414 title="Papier peint Nouveautés"> 1415 <span class="font-medium xlg:font-normal" style=""> 1416 Nouveautés </span> 1417 </a> 1418 </li> 1419 </ul> 1420 1421 <ul class="menu xlg:flex xlg:flex-row xlg:gap-8 xlg:w-1/4 xlg:justify-end"> 1422 <li> 1423 <a href="https://www.we-wall.com/conseils" 1424 @mouseover="isMobile ? '' : openSubMenu(0); searchOpen = false" 1425 class="text-sm btn btn-tertiary btn-link uppercase !bg-neutral-300 xlg:!bg-transparent" 1426 title="Conseils papier peint"> 1427 <span class="font-medium xlg:font-normal">Nos conseils</span> 1428 </a> 1429 </li> 1430 1431 <li> 1432 <a href="https://www.we-wall.com/magasin-papier-peint" 1433 class="text-sm btn btn-tertiary btn-link uppercase !bg-neutral-300 xlg:!bg-transparent" 1434 title="Magasins papier peint"> 1435 <span class="font-medium">Trouvez-nous !</span> 1436 </a> 1437 </li> 1438 1439 <li class="xlg:hidden"> 1440 <a href="https://www.we-wall.com/retailer/account/login/" 1441 class="text-sm btn btn-tertiary btn-link uppercase !bg-neutral-300" 1442 rel="nofollow" 1443 title="Espace partenaire"> 1444 <span class="font-medium">Espace partenaire</span> 1445 </a> 1446 </li> 1447 </ul> 1448 </div> 1449</nav> 1450 1451<div x-show="navMobile" @click="navMobile = !navMobile; document.documentElement.classList.remove('noscroll');" 1452 class="xlg:hidden fixed bg-black bg-opacity-60 w-full h-full top-0 left-0 z-200"></div> 1453 </div> 1454 1455 <!--Search--> 1456 <div class="c-nav-search border border-neutral-300 z-300 w-full fixed top-[94px] max-w-425 xlg:max-w-none 1457 bottom-0 left-0 lg:left-1/2 lg:transform lg:-translate-x-1/2 bg-white lg:pt-6 lg:pb-12 lg:px-10 hidden" 1458 id="search-content" 1459 :class="{ 'block': searchOpen, 'hidden': !searchOpen }" 1460 @click.away="closeNav(); searchOpen = false" 1461 x-show="true"> 1462 <button id="button-close-search" 1463 @click="searchOpen = false; navMobile = false; document.documentElement.classList.remove('noscroll');" 1464 type="button" 1465 class="xlg:hidden absolute left-4 top-[34px] transform -translate-y-1/2 bt
1465n btn-tertiary btn-icon-only btn-size-xs" 1466 aria-label="Fermer"> 1467 <svg focusable="false" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" 1468 class="text-neutral-900 w-6 h-6"> 1469 <path d="M3 11.84 6.886 14v-1.529H21V11.21H6.886V9.68L3 11.84Z"/> 1470 </svg> 1471 </button> 1472 1473 1474<div class="container p-0" x-data="initMiniSearch()" @private-content-loaded.window="setCurrentWishlist($event.detail.data)"> 1475 <div class="flex flex-row justify-center items-center w-full h-full fixed select-none" 1476 style="left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%); background: rgba(255,255,255,0.7); z-index:1000;" 1477 x-show="isLoading" 1478 x-transition:enter="ease-out duration-200" 1479 x-transition:enter-start="opacity-0" 1480 x-transition:enter-end="opacity-100" 1481 x-transition:leave="ease-in duration-200" 1482 x-transition:leave-start="opacity-100" 1483 x-transition:leave-end="opacity-0"> 1484 <!-- By Sam Herbert (@sherb), for everyone. More @ http://goo.gl/7AJzbL --> 1485 <svg width="57" height="57" viewBox="0 0 57 57" xmlns="http://www.w3.org/2000/svg" stroke="#fff" 1486 class="stroke-current text-primary"> 1487 <g fill="none" fill-rule="evenodd"> 1488 <g transform="translate(1 1)" stroke-width="2"> 1489 <circle cx="5" cy="50" r="5"> 1490 <animate attributeName="cy" 1491 begin="0s" dur="2.2s" 1492 values="50;5;50;50" 1493 calcMode="linear" 1494 repeatCount="indefinite"/> 1495 <animate attributeName="cx" 1496 begin="0s" dur="2.2s" 1497 values="5;27;49;5" 1498 calcMode="linear" 1499 repeatCount="indefinite"/> 1500 </circle> 1501 <circle cx="27" cy="5" r="5"> 1502 <animate attributeName="cy" 1503 begin="0s" dur="2.2s" 1504 from="5" to="5" 1505 values="5;50;50;5" 1506 calcMode="linear" 1507 repeatCount="indefinite"/> 1508 <animate attributeName="cx" 1509 begin="0s" dur="2.2s" 1510 from="27" to="27" 1511 values="27;49;5;27" 1512 calcMode="linear" 1513 repeatCount="indefinite"/> 1514 </circle> 1515 <circle cx="49" cy="50" r="5"> 1516 <animate attributeName="cy" 1517 begin="0s" dur="2.2s" 1518 values="50;50;5;50" 1519 calcMode="linear" 1520 repeatCount="indefinite"/> 1521 <animate attributeName="cx" 1522 from="49" to="49" 1523 begin="0s" dur="2.2s" 1524 values="49;5;27;49" 1525 calcMode="linear" 1526 repeatCount="indefinite"/> 1527 </circle> 1528 </g> 1529 </g> 1530 </svg> 1531</div> 1532 <form class="form minisearch relative" id="search_mini_form" x-ref="form" @submit.prevent="search()" 1533 action="https://www.we-wall.com/catalogsearch/result/" method="get"> 1534 <label class="hidden" for="search" data-role="minisearch-label"> 1535 <span>Recherche</span> 1536 </label> 1537 <div class="field required text field-search has-value" 1538 :class="{'has-value': value.length > 0, 'input-focus': makeSearch === true}"> 1539 <div class="field-wrapper"> 1540 <div class="control "> 1541 <input x-on:focus="makeSearch = true" 1542 x-on:blur="makeSearch = false" 1543 x-model="value" 1544 x-ref="searchInput" 1545 name="q" 1546 class="form-input pl-18 lg:pl-4 " 1547 required="" 1548 value="" 1549 autocomplete="off" 1550 placeholder="Rechercher..." 1551 id="search" 1552 maxlength="128" 1553 type="text" 1554 @focus.once="suggest();" 1555 @input.debounce.300="suggest();" 1556 @keydown.arrow-down.prevent="focusElement($el.querySelector('[tabindex]'))"> 1557 </div> 1558 </div> 1559 </div> 1560 <button @click="clearValues()" type="button" 1561 class="hidden lg:flex btn btn-tertiary btn-icon-only btn-size-lg absolute right-16 top-1/2 transform -translate-y-1/2" 1562 aria-label="Vider le champ de recherche"> 1563 <svg class="w-6 h-6" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" focusable="false" 1564 aria-hidden="true"> 1565 <path fill-rule="evenodd" 1566 d="M12.04 12.677 5.93 18.92l-.858-.84 6.13-6.26-5.776-5.9.857-.84 5.759 5.882L17.8 5.08l.858.84-5.777 5.9 6.13 6.26-.857.84-6.112-6.243Z"/> 1567 </svg> 1568 </button> 1569 <button type="submit" title="Recherche" 1570 class="action search btn btn-tertiary btn-icon-only btn-size-lg absolute right-2 top-1/2 transform -translate-y-1/2" 1571 aria-label="Recherche"> 1572 <svg class="w-6 h-6" focusable="false" aria-hidden="true" xmlns="http://www.w3.org/2000/svg"
1573 viewBox="0 0 24 24"> 1574 <path 1575 d="M10.64 19.28C5.88 19.28 2 15.4 2 10.64 2 5.88 5.88 2 10.64 2c4.76 0 8.64 3.88 8.64 8.64 0 4.76-3.88 8.64-8.64 8.64Zm0-16.08c-4.1 0-7.44 3.34-7.44 7.44 0 4.1 3.34 7.44 7.44 7.44 4.1 0 7.44-3.34 7.44-7.44 0-4.1-3.34-7.44-7.44-7.44Z"/> 1576 <path d="m16.706 15.846-.849.848 5.346 5.346.849-.848-5.346-5.346Z"/> 1577 </svg> 1578 </button> 1579 </form> 1580 1581 <div class="flex flex-col lg:flex-row justify-between mt-4 lg:mt-8 px-3 lg:px-4"> 1582 <div class="px-3 lg:px-0 w-full md:w-1/3"> 1583 <p class="font-secondary text-xl uppercase font-bold mb-6" :class="suggestions.length > 0 ? 'block' : 'hidden'"> 1584 Suggestions de recherche </p> 1585 <template x-if="suggestions.length > 0"> 1586 <ul class="mb-6"> 1587 <template x-for="suggestion in suggestions"> 1588 <li class="mb-4"> 1589 <a class="btn btn-tertiary btn-link text-sm lg:text-base" href="#" 1590 tabindex="0" 1591 @click="search(suggestion.title)" 1592 @keydown.enter="search(suggestion.title)" 1593 @keydown.arrow-up.prevent="focusElement($event.target.previousElementSibling) || $refs.searchInput.focus()" 1594 @keydown.arrow-down.prevent="focusElement($event.target.nextElementSibling)"> 1595 <span x-text="suggestion.title"></span> 1596 <b class="ml-1 font-semibold">(<span x-text="suggestion.num_results"></span>)</b> 1597 </a> 1598 </li> 1599 </template> 1600 </ul> 1601 </template> 1602 1603 <p class="font-secondary text-xl uppercase font-bold mb-6" :class="categories.length > 0 ? 'block' : 'hidden'"> 1604 Catégories </p> 1605 <template x-if="categories.length > 0"> 1606 <ul> 1607 <template x-for="category in categories"> 1608 <li class="mb-4"> 1609 <a class="btn btn-tertiary btn-link text-sm lg:text-base" x-bind:href="category.url"> 1610 <span x-text="category.title"></span> 1611 </a> 1612 </li> 1613 </template> 1614 </ul> 1615 </template> 1616 </div> 1617 <div class="w-full md:w-2/3"> 1618 <template x-if="products.length > 0"> 1619 <p class="font-secondary text-xl uppercase font-bold mb-6" :class="suggestions.length > 0 ? 'block' : 'hidden'"> 1620 Nos meilleures ventes </p> 1621 </template> 1622 <div class="products wrapper mode-grid products-grid lg:max-w-2xl"> 1623 <template x-if="products.length > 0"> 1624 <div 1625 class="mx-auto pb-12 grid gap-x-3 md:gap-x-10 gap-y-8 grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-3"> 1626 <template x-for="product in products"> 1627 <div class="item product product-item product_addtocart_form"> 1628 <div class="relative" @mouseenter.self="product.hoverImg = true"
1629 @mouseleave.self="product.hoverImg = false"> 1630 <a x-bind:href="product.url" class="product photo product-item-photo block overflow-hidden" 1631 tabindex="-1"> 1632 <template x-if="product.hoverImg"> 1633 <img class="absolute top-0 hidden md:block" 1634 :src="product.image_src_hover" 1635 :alt="product.name" 1636 :title="product.name" 1637 :width="product.image_src_w" 1638 :height="product.image_src_h"> 1639 </template> 1640 <img loading="lazy" 1641 :alt="product.name" 1642 :title="product.name" 1643 :src="product.image_src" 1644 :width="product.image_src_hover_w" 1645 :height="product.image_src_hover_h"> 1646 </a> 1647 </div> 1648 <div class="product-info relative mt-1 md:mt-3 flex flex-col"> 1649 <div class="flex justify-between items-center""> 1650 <div class="md:pt-1 text-neutral-900 text-sm"> 1651 <div class="price-box price-final_price" data-role="priceBox" 1652 :data-product-id="product.entity_id" 1653 :data-price-box="getDataPriceBox(product.entity_id)"> 1654 <span class="normal-price"> 1655 <span class="price-container price-final_price tax"> 1656 <span :id="getDataPriceBox(product.entity_id)" :data-price-amount="product.price" 1657 data-price-type="finalPrice" class="price-wrapper "><span 1658 class="price"> 1659 <span x-text="product.formatted_price"></span> 1660 </span></span> 1661 </span> 1662 </span> 1663 </div> 1664 </div> 1665 <div class="absolute md:relative top-0.5 right-0"> 1666 <button @click.prevent="addToWishlist(product.entity_id)" 1667 aria-label="Ajouter à ma liste dâenvie" 1668 type="button" 1669 class="p-0 border-0 inline-flex flex-shrink-0 items-center justify-center text-neutral-900 hover:text-neutral-800 "> 1670 <template x-if="resultProductId[product.entity_id]"> 1671 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" 1672 fill="currentColor" class="w-4 h-4" width="24" height="24"> 1673 <path 1674 d="M22.79,5.894C22.114,3.851 20.331,2.362 18.2,2.062C15.96,1.735 13.75,2.709 12.045,4.751C10.331,2.709 8.129,1.735 5.881,2.062C3.751,2.36 1.97,3.85 1.301,5.894C0.448,8.451 1.431,11.384 3.979,13.941L12.045,21.997L20.101,13.941C22.659,11.383 23.633,8.451 22.79,5.894Z"/> 1675 </svg> 1676 </template> 1677 <template x-if="!resultProductId[product.entity_id]"> 1678 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" 1679 fill="currentColor" class="w-4 h-4" width="24" height="24"> 1680 <path 1681 d="m12.057 22 8.062-8.061c2.559-2.56 3.534-5.493 2.68-8.043a5.67 5.67 0 0 0-4.593-3.834c-2.24-.328-4.442.647-6.158 2.681C10.342 2.71 8.13 1.734 5.89 2.063a5.657 5.657 0 0 0-4.593 3.833c-.844 2.56.13 5.493 2.68 8.043L12.048 22h.01ZM2.618 6.327a4.283 4.283 0 0 1 3.478-2.905c.215-.029.431-.047.647-.047 1.743 0 3.45 1.03 4.752 2.896l.563.806.562-.806c1.462-2.1 3.43-3.13 5.4-2.85a4.27 4.27 0 0 1 3.477 2.906c.684 2.044-.178 4.462-2.353 6.637l-7.086 7.086-7.087-7.086C2.796 10.789 1.943 8.37 2.618 6.327Z"/> 1682 </svg> 1683 </template> 1684 </button> 1685 </div> 1686 </div> 1687 <a class="product-item-link text-[13px] uppercase" x-bind:href="product.url"> 1688 <template x-if="product.seo_product_name">
1689 <span x-text="product.seo_product_name + ' ' + product.color"></span> 1690 </template> 1691 <template x-if="!product.seo_product_name"> 1692 <span x-text="product.name + ' ' + product.color"></span> 1693 </template> 1694 </a> 1695 <div> 1696 <p class="text-xs text-neutral-900 flex flex-wrap items-center"> 1697 <span x-text="product.manufacturer"></span> 1698 <svg class="mx-2 fill-current text-primary-500" width="6" height="7" 1699 viewBox="0 0 6 7" xmlns="http://www.w3.org/2000/svg"> 1700 <circle cx="3" cy="3.5" r="3"/> 1701 </svg> 1702 <span x-text="product.supportName"></span> 1703 </p> 1704 </div> 1705 </div> 1706 </div> 1707 </template> 1708 </div> 1709 </template> 1710 </div> 1711 </div> 1712 </div> 1713</div> 1714 </div> 1715
1716 <!--Cart Drawer--> 1717 </div> 1718</header><main id="maincontent" class="page-main"><a id="contentarea" tabindex="-1"></a> 1719<div class="page messages"> 1720<section id="messages" 1721 x-data="initMessages()" 1722 x-spread="eventListeners" 1723> 1724 <template x-if="!isEmpty()"> 1725 <div class="w-full"> 1726 <div role="alert" class="messages container mx-auto"> 1727 <template x-for="(message, index) in messages" :key="index"> 1728 <div> 1729 <template x-if="message"> 1730 <div 1731 class="text-sm py-3 px-4 flex items-center relative message rounded-none justify-center pr-10 md:mb-5" 1732 :ui-id="'message-' + message.type" 1733 > 1734 <div class="h-6 w-6 flex-shrink-0 mr-3 rounded-full" :class="'bg-' + message.type"> 1735 <template x-if="message.type === 'error'"> 1736 <svg class="fill-current text-white" xmlns="http://www.w3.org/2000/svg"
1737 viewBox="0 0 24 24"> 1738 <path fill-rule="evenodd" 1739 d="M12.04 12.677 5.93 18.92l-.858-.84 6.13-6.26-5.776-5.9.857-.84 5.759 5.882L17.8 5.08l.858.84-5.777 5.9 6.13 6.26-.857.84-6.112-6.243Z"/> 1740 </svg> 1741 </template> 1742 <template x-if="message.type !== 'error'"> 1743 <svg class="fill-current text-white" xmlns="http://www.w3.org/2000/svg" 1744 viewBox="0 0 24 24"> 1745 <path fill-rule="evenodd" 1746 d="M19.424 7.924 10 17.35l-5.424-5.425.848-.848L10 15.65l8.576-8.575.848.848Z"></path> 1747 </svg> 1748 </template> 1749 </div> 1750 <span x-html="message.text"></span> 1751 <button 1752 class="btn btn-icon-only btn-size-xs close cursor-pointer absolute right-4 top-1/2 transform -translate-y-1/2 fill-current " 1753 title="Fermer" 1754 aria-label="Fermer" 1755 @click.prevent="removeMessage(index)"> 1756 <svg class="w-4 h-4" fill="currentColor" xmlns="http://www.w3.org/2000/svg"
1757 viewBox="0 0 24 24"> 1758 <path fill-rule="evenodd" 1759 d="M12.04 12.677 5.93 18.92l-.858-.84 6.13-6.26-5.776-5.9.857-.84 5.759 5.882L17.8 5.08l.858.84-5.777 5.9 6.13 6.26-.857.84-6.112-6.243Z"></path> 1760 </svg> 1761 </button> 1762 </div> 1763 </template> 1764 </div> 1765 </template> 1766 </div> 1767 </div> 1768 </template> 1769</section> 1770</div><div class="columns"><div class="column main"><div id="customer-login-container" class="login-container mb-16 mt-16"> 1771<div class="flex flex-col md:flex-row md:divide-x divide-neutral-300"> 1772 1773<div class="md:w-1/2"> 1774 <div class="px-8"> 1775 <h2 class="text-2xl md:text-3xl font-secondary font-medium uppercase text-center mb-6 md:mb-20">Me connecter</h2> 1776 <form class="form form-login max-w-[420px] mx-auto" 1777 action="https://www.we-wall.com/customer/account/loginPost/" 1778 method="post" 1779 id="customer-login-form" 1780 x-data="initCustomerLoginForm()" 1781 @submit.prevent="submitForm()"> 1782 <input name="form_key" type="hidden" value="Re5fy3d9lYbPZkVe" /> <fieldset class="fieldset login"> 1783 <legend class="sr-only">Connexion</legend> 1784 1785 <div class="field field-inline email required" 1786 :class='{ 1787 "has-value": value_email.length > 0, 1788 "input-focus": add_email === true 1789 }' 1790 > 1791 <div class="field-wrapper"> 1792 <label class="label" for="email"><span>Email*</span></label> 1793 <div class="control"> 1794 <input x-on:focus="add_email = true" 1795 x-on:blur="add_email = false" 1796 x-model="value_email" 1797 name="login[username]" 1798 class="form-input" 1799 title="Email" 1800 value="" 1801 id="email" 1802 type="email" 1803 required> 1804 </div> 1805 </div> 1806 </div> 1807 <div class="field required field-inline password required mt-6" 1808 :class='{ 1809 "has-value": value_pass.length > 0, 1810 "input-focus": add_pass === true 1811 }'> 1812 <div class="field-wrapper"> 1813 <label class="label" 1814 for="password"><span>Mot de passe *</span></label> 1815 <div class="control control-with-btn"> 1816 <input x-on:focus="add_pass = true" 1817 x-on:blur="add_pass = false" 1818 x-model="value_pass" 1819 name="login[password]" 1820 class="form-input" 1821 title="Mot de passe" 1822 autocomplete="new-password" 1823 id="pass" 1824 type="password" 1825 :type="showPass ? 'text' : 'password'" 1826 required> 1827 <button 1828 @click="showPass = !showPass" type="button" 1829 class="btn btn-tertiary btn-icon-only btn-size-md fill-current text-neutral-700" 1830 aria-label="afficher / cacher le mot de passe"> 1831 <svg x-show="!showPass" class="w-6 h-6" xmlns="http://www.w3.org/2000/svg"
1832 viewBox="0 0 24 24" focusable="false" aria-hidden="true"> 1833 <g> 1834 <path 1835 d="M22.573 11.73C22.436 11.5 19.03 6.095 12.457 6h-.17C5.635 6 2.144 11.5 2 11.73c.145.23 3.636 5.732 10.286 5.732h.17c6.574-.086 9.98-5.501 10.125-5.723l-.008-.008Zm-10.125 4.71h-.153a11.59 11.59 0 0 1-9.052-4.7c1.03-1.363 4.147-4.803 9.197-4.71a11.555 11.555 0 0 1 8.89 4.71 11.564 11.564 0 0 1-8.882 4.7Z"/> 1836 <path 1837 d="M12.295 15.367a3.551 3.551 0 1 1 0-7.102 3.551 3.551 0 0 1 0 7.102Zm0-6.123c-.505 0-1 .193-1.42.473a2.555 2.555 0 1 0 3.975 2.124 2.556 2.556 0 0 0-2.555-2.597Z"/> 1838 </g> 1839 </svg> 1840 <svg x-show="showPass" class="w-6 h-6" xmlns="http://www.w3.org/2000/svg" 1841 viewBox="0 0 24 24" focusable="false" aria-hidden="true"> 1842 <path 1843 d="M12.41 6.28h-.18c-6.88 0-10.49 5.69-10.64 5.93.06.11.89 1.41 2.44 2.76l.98-.54c-1.01-.84-1.73-1.67-2.14-2.21 1.07-1.41 4.29-4.97 9.52-4.87 1.47.02 2.79.33 3.92.78l1.15-.64a11.83 11.83 0 0 0-5.06-1.2l.01-.01Zm10.47 5.92c-.07-.11-.9-1.41-2.45-2.75l-.98.55c1.02.84 1.74 1.68 2.14 2.21-1.05 1.38-4.15 4.8-9.19 4.87h-.16c-1.54 0-2.91-.31-4.09-.78L7 16.93c1.45.71 3.21 1.21 5.24 1.21h.18c6.76-.09 10.32-5.68 10.47-5.92l-.01-.02Z"/> 1844 <path 1845 d="m15.91 11.98-1.08.6a2.606 2.606 0 0 1-3.68 2.05l-1.07.59c.61.44 1.35.71 2.16.71 2.03 0 3.68-1.65 3.68-3.68v-.27h-.01Zm-3.67-3.4c-2.03 0-3.68 1.65-3.68 3.68v.19l1.08-.6c.19-1.25 1.28-2.2 2.58-2.2.36 0 .7.07 1.01.2l1.08-.61c-.59-.41-1.31-.65-2.09-.65l.02-.01Zm10.89-1.84-3.58 2-1.02.57-2.87 1.6-.93.52-4.49 2.5-.93.52-2.33 1.3-1.07.6-4.07 2.26-.51-.92 3.6-2.01 1.01-.56 2.86-1.6.93-.52 4.47-2.49.93-.52 2.36-1.32 1.07-.59 4.06-2.26.51.92Z"/> 1846 </svg> 1847 </button> 1848 </div> 1849 </div> 1850 </div> 1851 1852 <div class="text-right mt-6"> 1853 <a class="btn btn-tertiary btn-icon-right btn-link underline text-sm" 1854 href="https://www.we-wall.com/customer/account/forgotpassword/"> 1855 <span>Mot de passe oublié ?</span> 1856 <svg focusable="false" aria-hidden="true" class="w-5 h-5 ml-1" fill="currentColor" 1857 xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"> 1858 <path d="m9.65 17.88-.84-.85L13.88 12 8.81 6.97l.84-.85L15.58 12l-5.93 5.88Z"/> 1859 </svg> 1860 </a> 1861 </div> 1862 1863 1864 <div class="actions-toolbar text-center mt-12"> 1865 <button type="submit" 1866 class="btn btn-secondary md:btn-primary btn-size-lg w-full max-w-xs justify-center" 1867 name="send"> 1868 <span>Connexion</span> 1869 </button> 1870 </div> 1871 1872 <div> 1873 <template x-if="displayErrorMessage"> 1874 <p class="text-red flex items-center"> 1875 <span class="inline-block w-8 h-8 mr-3"> 1876 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" 1877 stroke="currentColor"> 1878 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" 1879 d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/> 1880 </svg> 1881 </span> 1882 <template x-for="errorMessage in errorMessages"> 1883 <span x-html="errorMessage"></span> 1884 </template> 1885 </p> 1886 </template> 1887 </div> 1888 1889 <div class="text-center"> 1890 <p class="text-xs text-neutral-600 text-center mt-2">* Champs requis</p> 1891 </div> 1892 1893 </fieldset> 1894 </form> 1895 </div> 1896 1897 <div class="w-full"> 1898 </div> 1899 1900 1901</div> 1902 1903 1904 1905 1906 <div class="md:w-1/2 order-first md:order-none mb-8 md:mb-0 pb-8 md:pb-0 border-b border-neutral-300 md:border-0"> 1907 <div class="px-8 xl:px-36"> 1908 <h2 class="text-2xl md:text-3xl font-secondary font-medium uppercase text-center mb-6 md:mb-20"> 1909 Nouveaux clients </h2> 1910 <div class="text-center hidden md:block"> 1911 <p> 1912 La création dâun compte a de nombreux avantages : consultation rapide, sauvegarder plusieurs adresses, suivre les commandes, et bien plus encore. </p> 1913 </div> 1914 <div class="text-center md:mt-28"> 1915 <a class="btn btn-primary md:btn-secondary btn-size-lg w-full max-w-xs justify-center" href="https://www.we-wall.com/customer/account/create/"> 1916 Créer un compte </a> 1917 </div> 1918 </div> 1919 </div> 1920</div> 1921</div><style> 1922 .product-slider .m-logo { 1923 display: none; 1924 } 1925 1926 .m-logo { 1927 display: inline-block; 1928 } 1929 1930 .m-logo .m-brand-tooltip { 1931 position: relative; 1932 float: left; 1933 margin-right: 10px; 1934 } 1935 1936 .m-logo .m-brand-tooltip .mst_tooltip { 1937 position: absolute; 1938 width: 350px; 1939 padding: 10px; 1940 border: 1px solid #ccc; 1941 bottom: 100%; 1942 margin-bottom: 20px; 1943 left: 10%; 1944 opacity: 1; 1945 text-align: justify; 1946 z-index: 1000; 1947 } 1948 1949 .catalog-product-view .m-logo .m-brand-tooltip .mst_tooltip { 1950 left: 27%; 1951 } 1952 1953 .m-logo .m-brand-tooltip .mst_tooltip img { 1954 width: 100px; 1955 margin: auto; 1956 padding: 0; 1957 } 1958 1959 .m-logo .m-brand-tooltip .mst_tooltip .mst_tooltip__pointer { 1960 position: absolute; 1961 width: 15px; 1962 height: 15px; 1963 border-left: 1px solid #ccc; 1964 border-bottom: 1px solid #ccc; 1965 bottom: -8px; 1966 left: 10px; 1967 transform: rotate(-0.125turn); 1968 } 1969 1970 .m-logo .m-brand-tooltip:hover .mst_tooltip { 1971 display: block; 1972 1973 -webkit-animation: fadeInFromNone 0.5s ease-in-out; 1974 -moz-animation: fadeInFromNone 0.5s ease-in-out; 1975 -o-animation: fadeInFromNone 0.5s ease-in-out; 1976 animation: fadeInFromNone 0.5s ease-in-out; 1977 } 1978 1979 @-webkit-keyframes fadeInFromNone { 1980 0% { 1981 display: none; 1982 opacity: 0; 1983 } 1984 1985 1% { 1986 display: block; 1987 opacity: 0; 1988 } 1989 1990 100% { 1991 display: block; 1992 opacity: 1; 1993 } 1994 } 1995 1996 @-moz-keyframes fadeInFromNone { 1997 0% { 1998 display: none; 1999 opacity: 0; 2000 } 2001 2002 1% { 2003 display: block; 2004 opacity: 0; 2005 } 2006 2007 100% { 2008 display: block; 2009 opacity: 1; 2010 } 2011 } 2012 2013 @-o-keyframes fadeInFromNone { 2014 0% { 2015 display: none; 2016 opacity: 0; 2017 } 2018 2019 1% { 2020 display: block; 2021 opacity: 0; 2022 } 2023 2024 100% { 2025 display: block; 2026 opacity: 1; 2027 } 2028 } 2029
2030 @keyframes fadeInFromNone { 2031 0% { 2032 display: none; 2033 opacity: 0; 2034 } 2035 2036 1% { 2037 display: block; 2038 opacity: 0; 2039 } 2040 2041 100% { 2042 display: block; 2043 opacity: 1; 2044 } 2045 } 2046</style> 2047 2048</div></div></main><footer class="page-footer bg-white"><div class="footer content"> 2049 <a x-data="{showButton : false }" 2050 @scroll.window="showButton = (window.pageYOffset > 800) ? true : false" 2051 :class="showButton ? 'opacity-100' : 'opacity-0'" 2052 class="btn btn-icon-only transition duration-100 bg-neutral-900 text-white rounded-full p-0 w-12 md:w-18 h-12 md:h-18 fixed z-100 right-6 bottom-8 opacity-0" 2053 href="#html-body" aria-label="Retour en haut de page"> 2054 <svg class="w-6 rotate-90 md:w-10 h-6 md:h-10 fill-current" aria-hidden="true" focusable="false" 2055 xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"> 2056 <path d="M3 11.84 6.886 14v-1.529H21V11.21H6.886V9.68L3 11.84Z"/> 2057 </svg> 2058 </a> 2059 2060 2061<div class="bg-primary-500 py-10 pb-0 lg:py-12"> 2062 <div class="container flex justify-center font-medium"> 2063 <div class="hidden lg:block lg:order-1 text-center max-w-sm w-full"> 2064 <img class="w-10 h-10 inline-block" src="https://www.we-wall.com/static/version1786625269/frontend/Texdecor/default/fr_FR/images/homepage/magasin.svg" 2065 alt="" width="48" height="48"> 2066 <p class="mt-3 lg:mt-6 uppercase text-11 lg:text-sm"> 2067 <span>Retrait gratuit en magasin</span> 2068 </p> 2069 </div> 2070 <div class="order-3 lg:order-2 text-center max-w-sm w-full"> 2071 <img class="w-10 h-10 inline-block" src="https://www.we-wall.com/static/version1786625269/frontend/Texdecor/default/fr_FR/images/footer/echantillon.svg" 2072 alt="" width="48" height="48"> 2073 <p class="mt-3 lg:mt-6 uppercase text-11 lg:text-sm"> 2074 <span>Commande d'échantillons</span> 2075 </p> 2076 </div> 2077 <div class="order-2 lg:order-3 text-center max-w-sm w-full"> 2078 <img class="w-10 h-10 inline-block" src="https://www.we-wall.com/static/version1786625269/frontend/Texdecor/default/fr_FR/images/footer/paiement-securise.svg" 2079 alt="" width="48" height="48"> 2080 <p class="mt-3 lg:mt-6 uppercase text-11 lg:text-sm"> 2081 <span>Paiement 100% sécurisé</span> 2082 </p> 2083 </div> 2084 <div class="order-1 lg:order-4 text-center max-w-sm w-full"> 2085 <img class="w-10 h-10 inline-block" src="https://www.we-wall.com/static/version1786625269/frontend/Texdecor/default/fr_FR/images/homepage/livraison.svg" 2086 alt="" width="48" height="48"> 2087 <p class="mt-3 lg:mt-6 uppercase text-11 lg:text-sm"> 2088 <span class="hidden lg:block">Livraison sous 72H</span> 2089 <span class="lg:hidden">Retrait gratuit en magasin</span> 2090 </p> 2091 </div> 2092</div> 2093 2094<div class="container flex flex-col w-[calc(100%-2rem)] mx-4 lg:mx-auto lg:flex-row mt-10 lg:mt-14 gap-6 max-w-6xl"> 2095 <div 2096 class="flex justify-between items-center lg:w-full lg:max-w-344 leading-3 bg-neutral-900 lg:rounded-full p-4 pl-6 lg:pl-10 -mx-4 lg:mx-0"> 2097 <span class="text-white"> 2098 <span class="text-13">Une question ? <br>Notre équipe vous répond</span> 2099 <span class="block mt-2 font-medium">03 74 02 81 82</span> 2100 </span> 2101 <a href="tel:03 74 02 81 82" id="select_phone" 2102 title="Une question ? Notre équipe vous répond" 2103 class="ml-6 flex items-center justify-center w-14 lg:w-16 h-14 lg:h-16 rounded-full bg-white hover:bg-neutral-100"> 2104 <svg class="w-8 h-8" focusable="false" aria-hidden="true" xmlns="http://www.w3.org/2000/svg"
2105 viewBox="0 0 24 24"> 2106 <path 2107 d="m16.73 23-.247-.051c-2.437-.537-7.054-2.121-10.598-6.654-3.101-3.97-3.757-8.22-3.868-10.393L2 5.646 6.481 2l4.038 4.609-2.922 2.488c.154.851.69 3.084 2.386 5.052 1.576 1.84 3.475 2.675 4.6 3.032l3.007-2.42 3.706 4.337L16.73 23ZM3.048 6.106c.145 2.122.835 5.964 3.638 9.559 3.228 4.132 7.403 5.665 9.763 6.227l3.399-2.905-2.403-2.802-2.65 2.13-.255-.069c-1.192-.34-3.475-1.235-5.35-3.424-2.061-2.403-2.556-5.086-2.666-5.853l-.034-.281 2.564-2.181-2.7-3.093-3.306 2.692Z"/> 2108 </svg> 2109 </a> 2110 </div> 2111 2112 2113<form 2114 class="form subscribe lg:w-full lg:flex lg:items-center bg-white lg:rounded-full py-6 px-4 lg:p-4 lg:pl-10 -mx-4 lg:mx-0" 2115 action="https://www.we-wall.com/newsletter/subscriber/new/" 2116 method="post" 2117 x-data="initNewsletterForm()" 2118 @submit.prevent="submitForm()" 2119 id="newsletter-validate-detail"> 2120 <p class="w-56 lg:w-36 pl-2 lg:pl-0 text-sm lg:text-13 flex-shrink-0"> 2121 Soyez informés des dernières tendances papier peint </p> 2122 <div class="flex flex-grow items-center mt-4 lg:mt-0"> 2123 <div class="w-full"> 2124 <div class="field required field-inline email w-full pl-4" :class="{'has-value': email.length > 0 }"> 2125 <div class="field-wrapper"> 2126 <label class="label" 2127 for="newsletter-subscribe"><span>Votre e-mail*</span></label> 2128 <div class="control "> 2129 <input id="newsletter-subscribe" 2130 name="email" 2131 type="email" 2132 class="form-input" 2133 required 2134 value="" 2135 autocomplete="off" 2136 x-model="email"> 2137 <input name="form_key" type="hidden" value="Re5fy3d9lYbPZkVe" /> </div> 2138 </div> 2139 <div class="mt-2"> 2140 <input type="checkbox" class="checkbox mr-2" name="allow" value="1" id="newsletter_allow" required> 2141 <label for="newsletter_allow" class="text-sm"> 2142 J'autorise We Wall à m'envoyer des informations </label> 2143 </div> 2144 </div> 2145 </div> 2146 <button class="btn btn-primary w-14 lg:w-16 h-14 lg:h-16 btn-icon-only p-0 rounded-full ml-4" 2147 aria-label="S'abonner à la newsletter"> 2148 <svg class="w-8 h-8" focusable="false" aria-hidden="true" xmlns="http://www.w3.org/2000/svg"
2149 viewBox="0 0 24 24"> 2150 <path d="m21 12.48-3.886-2.16v1.529H3v1.262h14.114v1.53L21 12.48Z"/> 2151 </svg> 2152 </button> 2153 <div class="control"> 2154 <input type="hidden" 2155 value="" 2156 class="form-input" 2157 name="g-recaptcha-response" 2158 /> 2159</div> 2160 </div> 2161 <div> 2162 <template x-if="displayErrorMessage"> 2163 <p class="flex items-center text-red"> 2164 <span class="inline-block w-8 h-8 mr-3"> 2165 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" 2166 stroke="currentColor"> 2167 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" 2168 d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/> 2169 </svg> 2170 </span> 2171 <template x-for="errorMessage in errorMessages"> 2172 <span x-html="errorMessage"></span> 2173 </template> 2174 </p> 2175 </template> 2176 </div> 2177 <div> 2178 <p class="my-4 text-sm text-gray-900 hidden"> 2179Ce formulaire est protégé par reCAPTCHA. Les <a class="underline" href="https://policies.google.com/privacy">règles de confidentialité</a> et les <a class="underline" href="https://policies.google.com/terms">conditions d'</a> utilisation de <a class="underline" href="https://policies.google.com/privacy">Google</a> s'appliquent.</p> 2180 </div> 2181</form> 2182 2183 2184</div> 2185<p class="lg:hidden text-11 text-center py-3 px-4">*chez un partenaire déco</p> 2186</div> 2187<div class="container flex flex-wrap lg:flex-nowrap flex-row justify-around mt-12"> 2188<div class="mb-6 lg:mb-0 w-1/2 lg:w-auto"> 2189<p class="font-medium uppercase text-xs md:text-sm">Nos produits</p> 2190<ul class="mt-2 md:mt-5"> 2191<li class="mb-1 md:mb-4"><a class="btn btn-tertiary btn-link text-xs md:text-sm" href="/papier-peint.html" title="Papier peint"> Papier peint tendance</a></li> 2192<li class="mb-1 md:mb-4"><a class="btn btn-tertiary btn-link text-xs md:text-sm" href="/panoramique.html" title="Papier peint panoramique"> Papier peint panoramique</a></li> 2193<li class="mb-1 md:mb-4"><a class="btn btn-tertiary btn-link text-xs md:text-sm" href="/conseils" title="Conseils papier peint">Conseils déco papier peint</a></li> 2194<li class="mb-1 md:mb-4"><a class="btn btn-tertiary btn-link text-xs md:text-sm" href="https://www.we-wall.com/conseils/echantillons-de-papier-peint" title="Echantillons de papier peint">Echantillons papier peint</a></li> 2195<li class="mb-1 md:mb-4"><a class="btn btn-tertiary btn-link text-xs md:text-sm" href="/fin-de-serie.html" title="Papiers peints fins de série">Papiers peints fins de série</a></li> 2196<li class="mb-1 md:mb-4"><a class="btn btn-tertiary btn-link text-xs md:text-sm" href="/soldes.html" title="Papiers peints en soldes">Papiers peints en soldes</a></li> 2197<li class="mb-1 md:mb-4"><a class="btn btn-tertiary btn-link text-xs md:text-sm" href="/conseils/papier-peint-tendance-2025" title="Tendances Papier Peint 2025">Tendances Papier Peint 2025</a></li> 2198<li class="mb-1 md:mb-4"><a class="btn btn-tertiary btn-link text-xs md:text-sm" href="/conseils/black-friday" title="Black Friday WE WALL 2025">Black Friday WE WALL 2025</a></li> 2199</ul> 2200</div> 2201<div class="mb-6 lg:mb-0 w-1/2 lg:w-auto"> 2202<p class="font-medium uppercase text-xs md:text-sm">Nos spécialistes déco</p> 2203<ul class="mt-2 md:mt-5"> 2204<li class="mb-1 md:mb-4"><a class="btn btn-tertiary btn-link text-xs md:text-sm" href="/magasin-papier-peint" title="Trouver un magasin de papier peint">Trouver un magasin de papier peint</a></li> 2205<li class="mb-1 md:mb-4"><a class="btn btn-tertiary btn-link text-xs md:text-sm" href="/retailer/account/login"> Espace partenaire déco</a></li> 2206<li class="mb-1 md:mb-4"><a class="btn btn-tertiary btn-link text-xs md:text-sm" href="/magasin-papier-peint-lille" title="Magasin Papier Peint Lille">Magasin Papier Peint Lille</a></li> 2207</ul> 2208</div> 2209<div class="mb-6 lg:mb-0 w-1/2 lg:w-auto"> 2210<p class="font-medium uppercase text-xs md:text-sm">Nous découvrir</p> 2211<ul class="mt-2 md:mt-5"> 2212<li class="mb-1 md:mb-4"><a class="btn btn-tertiary btn-link text-xs md:text-sm" href="https://www.we-wall.com/notre-concept">Qui sommes-nous ?</a></li> 2213<li class="mb-1 md:mb-4"><a class="btn btn-tertiary btn-link text-xs md:text-sm" href="/nos-services"> Nos services</a></li> 2214<li class="mb-1 md:mb-4"><a class="btn btn-tertiary btn-link text-xs md:text-sm" href="/nos-marques"> Nos marques</a></li> 2215<li class="mb-1 md:mb-4"><a class="btn btn-tertiary btn-link text-xs md:text-sm" href="vos-realisations"> Vos réalisations avec nos papiers peints</a></li> 2216</ul> 2217</div> 2218<div class="mb-6 lg:mb-0 w-1/2 lg:w-auto"> 2219<p class="font-medium uppercase text-xs md:text-sm">Une question ?</p> 2220<ul class="mt-2 md:mt-5"> 2221<li class="mb-1 md:mb-4"><a class="btn btn-tertiary btn-link text-xs md:text-sm" href="/faq"> FAQ</a></li> 2222<li class="mb-1 md:mb-4"><a class="btn btn-tertiary btn-link text-xs md:text-sm" href="/contact"> Nous contacter</a></li> 2223</ul> 2224</div> 2225</div><div class="container text-center lg:mt-16 pb-4"> 2226<p class="mt-4 lg:mt-12"><span style="font-size: 14px;"> 2227<ul class="flex justify-center gap-6"> 2228 <li> 2229 <a class="btn btn-tertiary btn-icon-only btn-size-md" 2230 href="https://www.instagram.com/wewall_official" 2231 aria-label="Instagram"> 2232 <img src="https://www.we-wall.com/static/version1786625269/frontend/Texdecor/default/fr_FR/images/footer/instagram.svg" alt="Instagram" width="24" height="24"> 2233 </a> 2234 </li> 2235 2236 <li> 2237 <a class="btn btn-tertiary btn-icon-only btn-size-md" 2238 href="https://www.pinterest.fr/wewall_official" 2239 aria-label="Pinterest"> 2240 <img src="https://www.we-wall.com/static/version1786625269/frontend/Texdecor/default/fr_FR/images/footer/pinterest.svg" alt="Pinterest" width="24" height="24"> 2241 </a> 2242 </li> 2243 2244 </ul> 2245</span></p> 2246<p class="mt-4 lg:mt-12" style="font-size: 14px;"><span class="obfuscated" title="Conditions Générales de Vente" data-o="L2NvbmRpdGlvbnMtZ2VuZXJhbGVzLWRlLXZlbnRl">CGV</span> - <span class="btn btn-tertiary btn-link text-neutral-700 text-sm obfuscated" title="Mentions légales" data-o="L21lbnRpb25zLWxlZ2FsZXM,">Mentions légales</span> - <span class="btn btn-tertiary btn-link text-neutral-700 text-sm obfuscated" title="Charte des données personnelles" data-o="L2Rvbm5lZXMtcGVyc29ubmVsbGVz">Données personnelles</span></p> 2247</div></div></footer> <!-- added by Trusted Shops app: Start --> 2248 <!-- End --> 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273<style> 2274 .overview { 2275 max-height: 70px; 2276 } 2277 2278 .overview .gradient { 2279 background: linear-gradient(to bottom, rgba(255, 255, 255, 0) 5%, #FFFFFF 90%); 2280 } 2281 2282 .overview.active .gradient { 2283 display: none; 2284 } 2285</style> 2286 2287 2288 2289</div>
2290<script type="text/javascript" src="https://www.we-wall.com/static/version1786625269/_cache/merged/a9f1572fab66393af85782c6ccb5e8a7.min.js"></script>
vendor: 1 bytes, line 2290
2290
2291<script data-rocketjavascript="false"> 2292 var MagefanWebP = { 2293 2294 _canUseWebP: null, 2295 2296 getUserAgentInfo: function(){ 2297 try { 2298 var ua = navigator.userAgent, 2299 tem, 2300 M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || []; 2301 if (/trident/i.test(M[1])) { 2302 tem = /\brv[ :]+(\d+)/g.exec(ua) || []; 2303 return ['IE', (tem[1] || '')]; 2304 } 2305 if (M[1] === 'Chrome') { 2306 tem = ua.match(/\b(OPR|Edge)\/(\d+)/); 2307 if (tem != null) { 2308 tem = tem.slice(1); 2309 tem[0] = tem[0].replace('OPR', 'Opera'); 2310 return tem; 2311 } 2312 } 2313 M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?']; 2314 if ((tem = ua.match(/version\/(\d+)/i)) != null) M.splice(1, 1, tem[1]); 2315 return M; 2316 } catch (e) { 2317 return ['', 0]; 2318 } 2319 }, 2320 2321 canUseWebP: function(){ 2322 2323 this._canUseWebP = false; 2324 2325 if (null !== this._canUseWebP){ 2326 return this._canUseWebP; 2327 } 2328 2329 try { 2330 var elem = document.createElement('canvas'); 2331 if (!!(elem.getContext && elem.getContext('2d'))) { 2332 var r = (elem.toDataURL('image/webp').indexOf('data:image/webp') == 0); 2333 if (!r) { 2334 var ua = this.getUserAgentInfo(); 2335 if (ua && ua.length > 1) { 2336 ua[0] = ua[0].toLowerCase(); 2337 if ('firefox' == ua[0] && parseInt(ua[1]) >= 65) { 2338 this._canUseWebP = true; 2339 return this._canUseWebP; 2340 } 2341 if ('edge' == ua[0] && parseInt(ua[1]) >= 18) { 2342 this._canUseWebP = true; 2343 return this._canUseWebP; 2344 } 2345 if ('safari' == ua[0]) { 2346 if (navigator.platform.includes('Mac')) { 2347 if (parseInt(ua[1]) >= 16) { 2348 this._canUseWebP = true; 2349 } 2350 } else { 2351 if (parseInt(ua[1]) >= 15) { 2352 this._canUseWebP = true; 2353 } 2354 } 2355 2356 return this._canUseWebP; 2357 } 2358 } 2359 } 2360 2361 this._canUseWebP = r; 2362 return this._canUseWebP; 2363 } 2364 this._canUseWebP = false; 2365 return this._canUseWebP; 2366 } catch (e) { 2367 console.log(e); 2368 this._canUseWebP = false; 2369 return this._canUseWebP; 2370 } 2371 }, 2372 2373 getOriginWebPImage: function(src) { 2374 if (src.indexOf('mf_webp') == -1) { 2375 return src; 2376 } 2377 2378 var $array = src.split('/'); 2379 var $imageFormat = ''; 2380 2381 for (var i = 0; i < $array.length; i++) { 2382 if ($array[i] == "mf_webp") { 2383 $imageFormat = $array[i + 1]; 2384 $array.splice(i, 3); 2385 break; 2386 } 2387 } 2388 src = $array.join('/'); 2389 return src.replace('.webp', '.' + $imageFormat); 2390 }, 2391 2392 getWebUrl: function (imageUrl) { 2393 /* @var string */ 2394 imageUrl = imageUrl.trim(); 2395 var baseUrl = 'https://www.we-wall.com/'; 2396 var imageFormat = imageUrl.split('.').pop(); 2397 2398 if ('webp' === imageFormat) { 2399 return imageUrl; 2400 } 2401 2402 var mediaBaseUrl = 'https://www.we-wall.com/media/'; 2403 var staticBaseUrl = 'https://www.we-wall.com/static/'; 2404 2405 if (imageUrl.indexOf(mediaBaseUrl) == -1 && imageUrl.indexOf(staticBaseUrl) == -1) { 2406 return false;
2407 } 2408 2409 var imagePath = imageUrl; 2410 imagePath = imagePath.replace(mediaBaseUrl, 'media/'); 2411 imagePath = imagePath.replace(staticBaseUrl, 'static/'); 2412 imagePath = imagePath.replace(baseUrl + 'pub/media/', 'media/'); 2413 imagePath = imagePath.replace(baseUrl + 'pub/static/', 'static/'); 2414 imagePath = imagePath.replace(/\.(jpg|jpeg|png|JPG|JPEG|PNG|gif|GIF)/i, '.webp'); 2415 imagePath = mediaBaseUrl + 'mf_webp/' + imageFormat + '/' + imagePath; 2416 imagePath = imagePath.replace('%20', ' '); 2417 imagePath = imagePath.replace(/version\d{10}\//g, ''); 2418 return imagePath; 2419 } 2420 }; 2421 2422 /* MagicToolboxContainer Fix */ 2423 function MagefanWebPMagicToolboxContainerFix() 2424 { 2425 if (!MagefanWebP.canUseWebP()) { 2426 (function(){ 2427 var i; 2428 var els = document.querySelectorAll(".MagicToolboxContainer a, .MagicToolboxContainer img"); 2429 if (!els) return; 2430 var el; 2431 for (i=0; i<els.length; i++) { 2432 el = els[i]; 2433 if (el.href) { 2434 el.href = MagefanWebP.getOriginWebPImage(el.href); 2435 } 2436 2437 if (el.getAttribute('webpimg')) { 2438 el.src = MagefanWebP.getOriginWebPImage(el.getAttribute('webpimg')); 2439 } else { 2440 if (el.src) { 2441 el.src = MagefanWebP.getOriginWebPImage(el.src); 2442 } 2443 } 2444 2445 if (el.dataset && el.dataset.image) { 2446 el.dataset.image = MagefanWebP.getOriginWebPImage(el.dataset.image); 2447 } 2448 2449 } 2450 })(); 2451 } else { 2452 replacePixelMagicToolbox(); 2453 checkIfPixelReplaced(); 2454 } 2455 } 2456 2457 function replacePixelMagicToolbox() { 2458 (function() { 2459 var i, els = document.querySelectorAll(".MagicToolboxContainer img"); 2460 2461 if (!els) return; 2462 var el; 2463 2464 for (i=0; i<els.length; i++) { 2465 el = els[i]; 2466 2467 if (el.getAttribute('webpimg')) { 2468 el.src = el.getAttribute('webpimg'); 2469 } 2470 } 2471 })(); 2472 } 2473 2474 function checkIfPixelReplaced() { 2475 var intervalCounter = 0, 2476 waitForMagicToolbox = setInterval(function() { 2477 if (document.querySelectorAll('figure img[src$="/p.jpg"]').length) { 2478 replacePixelMagicToolbox(); 2479 clearInterval(waitForMagicToolbox); 2480 } 2481 2482 if (intervalCounter > 10) { 2483 clearInterval(waitForMagicToolbox); 2484 } 2485 2486 intervalCounter++; 2487 }, 500); 2488 } 2489 2490 document.addEventListener("DOMContentLoaded", function(){ 2491 if (!MagefanWebP.canUseWebP()) { 2492 document.body.className += ' no-webp '; 2493 2494 (function(){ 2495 var i; 2496 var els = document.querySelectorAll('a[href$=".webp"]'); 2497 if (!els) return; 2498 var el; 2499 for (i=0; i<els.length; i++) { 2500 el = els[i]; 2501 if (el.href) { 2502 el.href = MagefanWebP.getOriginWebPImage(el.href); 2503 } 2504 } 2505 })(); 2506 2507 } else { 2508 document.body.className += ' webp-supported '; 2509 } 2510 }); 2511</script>
vendor: 1 bytes, line 2511
2511
2512<script> 2513 document.addEventListener("DOMContentLoaded", function(e){ 2514 if (!MagefanWebP.canUseWebP()) { 2515 /* Replace some custom webp images with original one if webp is not supported */ 2516 /* Can add <a> tag in future as well */ 2517 setInterval(function(){ 2518 document.querySelectorAll("img[src$='.webp']:not(.no-origin-webp-img)").forEach(function(el){ 2519 var scr = el.getAttribute('src'); 2520 var newScr = MagefanWebP.getOriginWebPImage(scr); 2521 2522 if (scr != newScr) { 2523 el.setAttribute('src', newScr); 2524 } else { 2525 el.classList.add('no-origin-webp-img'); 2526 } 2527 }); 2528 2529 }, 1000); 2530 } 2531 2532 function processLazyPictureImg(img) 2533 { 2534 var src = img.getAttribute('src'); 2535 var keys = ['original', 'src', 'lazyload']; 2536 var original, _original; 2537 for (var i=0;i<keys.length;i++) { 2538 _original = img.getAttribute('data-' + keys[i]); 2539 if (_original) { 2540 original = _original; 2541 break; 2542 } 2543 } 2544 if (original == src) { 2545 2546 if (img.getAttribute('data-mf-lazy-picture-img')) return; 2547 img.setAttribute('data-mf-lazy-picture-img', 1); 2548 2549 2550 img.parentElement.querySelectorAll('source').forEach(function(el){ 2551 var srcset = el.getAttribute('srcset'); 2552 var originalset = el.getAttribute('data-originalset'); 2553 if (originalset && (originalset != srcset)) { 2554 el.setAttribute('srcset', originalset); 2555 el.classList.remove('lazyload'); 2556 } 2557 }); 2558 2559 var lazyLoader = img.closest('.lazy-loader'); 2560 if (lazyLoader) { 2561 lazyLoader.classList.remove('lazy-loader'); 2562 } 2563 2564 document.querySelectorAll("picture img[src='"+src+"']").forEach(function(img){ 2565 processLazyPictureImg(img); 2566 }); 2567 2568 } 2569 } 2570 2571 document.querySelectorAll('picture img[data-original],picture img[data-src],picture img[data-lazyload]').forEach(function(el){ 2572 el.addEventListener('load', function(e){ 2573 processLazyPictureImg(e.target); 2574 }); 2575 processLazyPictureImg(el); 2576 }); 2577 }); 2578</script>
vendor: 1 bytes, line 2578
2578
2579<script src="https://www.we-wall.com/static/version1786625269/frontend/Texdecor/default/fr_FR/Texdecor_GoogleTagManager/js/gtm_helper_js.min.js"></script>
vendor: 1 bytes, line 2579
2579
2580<script> 2581 'use strict'; 2582 (function( hyva, undefined ) { 2583 2584 function lifetimeToExpires(options, defaults) { 2585 2586 var lifetime = options.lifetime || defaults.lifetime; 2587 2588 if (lifetime) { 2589 var date = new Date; 2590 date.setTime(date.getTime() + lifetime * 1000); 2591 return date; 2592 } 2593 2594 return null; 2595 } 2596 2597 function generateRandomString() { 2598 2599 const allowedCharacters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', 2600 length = 16; 2601 2602 let formKey = '', 2603 charactersLength = allowedCharacters.length; 2604 2605 for (var i = 0; i < length; i++) { 2606 formKey += allowedCharacters[Math.round(Math.random() * (charactersLength - 1))] 2607 } 2608 2609 return formKey; 2610 } 2611 2612 const cookieTempStorage = {}; 2613 2614 const internalCookie = { 2615 get(name) { 2616 const v = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)'); 2617 return v ? v[2] : null; 2618 }, 2619 set(name, value, days, skipSetDomain) { 2620 let expires, 2621 path, 2622 domain, 2623 secure, 2624 samesite; 2625 2626 const defaultCookieConfig = { 2627 expires: null, 2628 path: '/', 2629 domain: null, 2630 secure: false, 2631 lifetime: null, 2632 samesite: 'lax' 2633 }; 2634 2635 const cookieConfig = window.COOKIE_CONFIG || {}; 2636 2637 expires = days 2638 ? lifetimeToExpires({lifetime: 24 * 60 * 60 * days, expires: null}, defaultCookieConfig) 2639 : lifetimeToExpires(window.COOKIE_CONFIG, defaultCookieConfig) || defaultCookieConfig.expires; 2640 2641 path = cookieConfig.path || defaultCookieConfig.path; 2642 domain = !skipSetDomain && (cookieConfig.domain || defaultCookieConfig.domain); 2643 secure = cookieConfig.secure || defaultCookieConfig.secure; 2644 samesite = cookieConfig.samesite || defaultCookieConfig.samesite; 2645 2646 document.cookie = name + "=" + encodeURIComponent(value) + 2647 (expires ? '; expires=' + expires.toGMTString() : '') + 2648 (path ? '; path=' + path : '') + 2649 (domain ? '; domain=' + domain : '') + 2650 (secure ? '; secure' : '') + 2651 (samesite ? '; samesite=' + samesite : 'lax'); 2652 }, 2653 isWebsiteAllowedToSaveCookie() { 2654 const allowedCookies = this.get('user_allowed_save_cookie'); 2655 if (allowedCookies) { 2656 const allowedWebsites = JSON.parse(unescape(allowedCookies)); 2657 2658 return allowedWebsites[CURRENT_WEBSITE_ID] === 1; 2659 } 2660 return false; 2661 }, 2662 getGroupByCookieName(name) { 2663 const cookieConsentConfig = window.cookie_consent_config || {}; 2664 let group = null; 2665 for (let prop in cookieConsentConfig) { 2666 if (!cookieConsentConfig.hasOwnProperty(prop)) continue; 2667 if (cookieConsentConfig[prop].includes(name)) { 2668 group = prop; 2669 break; 2670 } 2671 } 2672 return group; 2673 }, 2674 isCookieAllowed(name) { 2675 const cookieGroup = this.getGroupByCookieName(name); 2676 return cookieGroup 2677 ? window.cookie_consent_groups[cookieGroup] 2678 : this.isWebsiteAllowedToSaveCookie(); 2679 }, 2680 saveTempStorageCookies() { 2681 for (const [name, data] of Object.entries(cookieTempStorage)) { 2682 if (this.isCookieAllowed(name)) { 2683 this.set(name, data['value'], data['days'], data['skipSetDomain']); 2684 delete cookieTempStorage[name]; 2685 } 2686 } 2687 } 2688 }; 2689 2690 hyva.getCookie = (name) => { 2691 const cookieConfig = window.COOKIE_CONFIG || {}; 2692 2693 if (cookieConfig.cookie_restriction_enabled && ! internalCookie.isCookieAllowed(name)) { 2694 return cookieTempStorage[name] ? cookieTempStorage[name]['value'] : null; 2695 } 2696 2697 return internalCookie.get(name); 2698 } 2699 2700 hyva.setCookie = (name, value, days, skipSetDomain) => { 2701 const cookieConfig = window.COOKIE_CONFIG || {}; 2702 2703 if (cookieConfig.cookie_restriction_enabled && ! internalCookie.isCookieAllowed(name)) { 2704 cookieTempStorage[name] = {value, days, skipSetDomain}; 2705 return; 2706 } 2707 return internalCookie.set(name, value, days, skipSetDomain); 2708 } 2709 2710 hyva.getBrowserStorage = () => { 2711 const browserStorage = window.localStorage || window.sessionStorage; 2712 if (!browserStorage) { 2713 console.warn('Browser Storage is unavailable'); 2714 return false;
2715 } 2716 try { 2717 browserStorage.setItem('storage_test', 1); 2718 browserStorage.removeItem('storage_test'); 2719 } catch (error) { 2720 console.warn('Browser Storage is not accessible', error); 2721 return false; 2722 } 2723 return browserStorage; 2724 } 2725 2726 hyva.postForm = (postParams) => { 2727 const form = document.createElement("form"); 2728 2729 let data = postParams.data; 2730 2731 if (!data.uenc) { 2732 data.uenc = btoa(window.location.href); 2733 } 2734 form.method = "POST"; 2735 form.action = postParams.action; 2736 2737 Object.keys(postParams.data).map(key => { 2738 const field = document.createElement("input"); 2739 field.type = 'hidden' 2740 field.value = postParams.data[key]; 2741 field.name = key; 2742 form.appendChild(field); 2743 }); 2744 2745 const form_key = document.createElement("input"); 2746 form_key.type = 'hidden'; 2747 form_key.value = hyva.getFormKey(); 2748 form_key.name="form_key"; 2749 form.appendChild(form_key); 2750 2751 document.body.appendChild(form); 2752 2753 form.submit(); 2754 } 2755 2756 hyva.getFormKey = function () { 2757 let formKey = hyva.getCookie('form_key'); 2758 2759 if (!formKey) { 2760 formKey = generateRandomString(); 2761 hyva.setCookie('form_key', formKey); 2762 } 2763 2764 return formKey; 2765 } 2766 2767 hyva.formatPrice = (value, showSign) => { 2768 var formatter = new Intl.NumberFormat( 2769 'fr\u002DFR', 2770 { 2771 style: 'currency', 2772 currency: 'EUR', 2773 signDisplay: showSign ? "always" : "auto" 2774 } 2775 ); 2776 return (typeof Intl.NumberFormat.prototype.formatToParts === 'function') ? 2777 formatter.formatToParts(value).map(({type, value}) => { 2778 switch (type) { 2779 case 'currency': 2780 return 'â¬' || value; 2781 case 'minusSign': 2782 return '- '; 2783 case 'plusSign': 2784 return '+ '; 2785 default : 2786 return value; 2787 } 2788 }).reduce((string, part) => string + part) : 2789 formatter.format(value); 2790 } 2791 2792 /** 2793 * Replace positional parameters like %0 with the additional argument in the matching position. 2794 * The first additional argument replaces %0, the second %1 and so on. 2795 * 2796 * Example: hyva.srtf('%1 %0 %2', 'a', 'b', 'c') => "b a c" 2797 * 2798 * To insert a literal % symbol followed by a number, duplicate the %, for example %%2 is returned as %2. 2799 */ 2800 hyva.strf = function (string) { 2801 // According to caniuse.com rest arguments support isn't at 97% yet at the time of writing 2802 const args = Array.from(arguments).slice(1); 2803 2804 return string.replaceAll(/(%?%)[0-9]+/g, (m, p) => { 2805 return '%%' === p 2806 ? m.substr(1) 2807 : args[m.substr(1)] ?? m; 2808 }) 2809 } 2810 2811 2812 /** 2813 * Take a html string as `content` parameter and 2814 * extract an element from the DOM to replace in 2815 * the current page under the same selector, 2816 * defined by `targetSelector` 2817 */ 2818 hyva.replaceDomElement = (targetSelector, content) => { 2819 2820 // Parse the content and extract the DOM node using the `targetSelector` 2821 const parser = new DOMParser(); 2822 const doc = parser.parseFromString(content, 'text/html'); 2823 const contentNode = doc.querySelector(targetSelector); 2824 2825 // Bail if content can't be found 2826 if (!contentNode) { 2827 return; 2828 } 2829 2830 // Extract all the script tags from the new content. 2831 // Script tags won't execute when inserted into a dom-element directly, 2832 // therefore we need to inject them to the head of the document. 2833 const tmpScripts = contentNode.getElementsByTagName('script'); 2834 2835 if (tmpScripts.length > 0) { 2836 // Push all script tags into an array 2837 // (to prevent dom manipulation while iterating over dom nodes) 2838 const scripts = []; 2839 for (let i = 0; i < tmpScripts.length; i++) { 2840 scripts.push(tmpScripts[i]); 2841 } 2842 2843 // Iterate over all script tags and duplicate+inject each into the head 2844 for (let i = 0; i < scripts.length; i++) { 2845 let script = document.createElement('script'); 2846 script.innerHTML = scripts[i].innerHTML; 2847 2848 document.head.appendChild(script); 2849 2850 // Remove the original (non-executing) node from the page 2851 scripts[i].parentNode.removeChild(scripts[i]); 2852 } 2853 } 2854 2855 // Replace the old DOM node with the new content
2856 document.querySelector(targetSelector).replaceWith(contentNode); 2857 2858 // Reload customerSectionData and display cookie-messages if present 2859 window.dispatchEvent(new CustomEvent("reload-customer-section-data")); 2860 hyva.initMessages(); 2861 } 2862 2863 window.addEventListener('user-allowed-save-cookie', () => internalCookie.saveTempStorageCookies()) 2864 2865 }( window.hyva = window.hyva || {} )); 2866</script>
vendor: 1 bytes, line 2866
2866
2867<script> 2868 2869 function initGa() { 2870 let f, 2871 j, 2872 dl; 2873 2874 window.dataLayer = window.dataLayer || []; 2875 2876 (function (w, d, s, l, i) { 2877 w[l] = w[l] || []; 2878 w[l].push({ 2879 'gtm.start': new Date().getTime(), 2880 event: 'gtm.js' 2881 }); 2882 f = d.getElementsByTagName(s)[0]; 2883 j = d.createElement(s); 2884 dl = l != 'dataLayer' ? '&l=' + l : ''; 2885 j.async = true; 2886 j.src = 'https://www.googletagmanager.com/gtm.js?id=' + i + dl; 2887 f.parentNode.insertBefore(j, f); 2888 })(window, document, 'script', 'dataLayer', 'GTM-TBK2B7B'); 2889 2890 window.dlCurrencyCode = "EUR"; 2891 2892 const event = new CustomEvent("ga:inited", {}); 2893 document.dispatchEvent(event); 2894 } 2895 2896 document.addEventListener('DOMContentLoaded', function () { 2897 initGa(); 2898 }); 2899 2900 2901</script>
vendor: 1 bytes, line 2901
2901
2902<script> 2903 function notifyDlLoad() { 2904 let elem = document.getElementById("breadcrumbs_gtm"); 2905 let content_breadcrumb = ''; 2906 let typeUser = ''; 2907 if (elem && elem.dataset && elem.dataset.value) { 2908 content_breadcrumb = elem.dataset.value; 2909 } 2910 2911 if (hyva.getCookie('GTM_COOKIE_TYPE_USER')) { 2912 typeUser = hyva.getCookie('GTM_COOKIE_TYPE_USER'); 2913 } 2914 2915 window.dataLayer = window.dataLayer || [] 2916 window.dataLayer.push({ 2917 'content_type': formatString('My\u0020account'), 2918 'content_group': formatString(''), 2919 'content_breadcrumb': formatString(content_breadcrumb), 2920 'user_type': formatString(typeUser), 2921 'event': 'dl_load' 2922 }); 2923 } 2924 2925 window.dataLayer ? 2926 notifyDlLoad() : 2927 document.addEventListener("ga:inited", function () { 2928 notifyDlLoad() 2929 }); 2930</script>
vendor: 1 bytes, line 2930
2930
2931<script> 2932 function notifyPhone() { 2933 window.dataLayer.push({ 2934 'event': 'select_phone', 2935 'type': 'call-center' 2936 }) 2937 } 2938 2939 const get = document.getElementById('select_phone'); 2940 get.addEventListener('click', e => { 2941 window.dataLayer ? 2942 notifyPhone() : 2943 document.addEventListener("ga:inited", function () { 2944 notifyPhone() 2945 }); 2946 }); 2947 2948</script>
vendor: 1 bytes, line 2948
2948
2949<script> 2950 function notifyNewsletter() { 2951 if (hyva.getCookie('GTM_COOKIE_NEWSLETTER_SIGNUP') && 2952 hyva.getCookie('GTM_COOKIE_NEWSLETTER_SIGNUP') === '1') { 2953 window.dataLayer.push({ 2954 'event': 'newsletter_signup', 2955 'type': 'footer' 2956 }); 2957 let cookieExpires = 31536000 / 60 / 60 / 24; 2958 hyva.setCookie('GTM_COOKIE_NEWSLETTER_SIGNUP', 0, cookieExpires); 2959 } 2960 } 2961 2962 window.dataLayer ? 2963 notifyNewsletter() : 2964 document.addEventListener("ga:inited", function () { 2965 notifyNewsletter() 2966 }); 2967</script>
vendor: 1 bytes, line 2967
2967
2968<script> 2969 function notifyAddWishlist() { 2970 if (hyva.getCookie('GTM_COOKIE_WISHLIST_ADD') && 2971 hyva.getCookie('GTM_COOKIE_WISHLIST_ADD') !== '') { 2972 let cookieValue = hyva.getCookie('GTM_COOKIE_WISHLIST_ADD'); 2973 cookieValue = decodeURIComponent(cookieValue); 2974 cookieValue = JSON.parse(cookieValue); 2975 2976 let i = 0, product, 2977 dlUpdate = { 2978 'event': 'add_to_wishlist', 2979 'ecommerce': { 2980 'currency': "EUR", 2981 'value': cookieValue.value, 2982 'items': [] 2983 } 2984 }; 2985 2986 for (i; i < cookieValue.items.length; i++) { 2987 product = cookieValue.items[i]; 2988 2989 let index = ''; 2990 if (product.item_list_name !== ''){ 2991 index = product.index; 2992 } 2993 2994 dlUpdate.ecommerce.items.push({ 2995 'item_id': formatString(product.item_id), 2996 'item_name': formatString(product.item_name), 2997 'item_brand': formatString(product.item_brand), 2998 'item_category': formatString(product.item_category), 2999 'item_category2': formatString(product.item_category2), 3000 'item_category3': formatString(product.item_category3), 3001 'item_category4': formatString(product.item_category4), 3002 'item_variant': formatString(product.item_variant), 3003 'item_category5': formatString(product.item_category5), 3004 'price': formatString(product.price), 3005 'currency': formatString(product.currency), 3006 'quantity': formatString(product.quantity), 3007 'item_list_name': formatString(product.item_list_name), 3008 'index': formatString(index) 3009 }); 3010 } 3011 3012 window.dataLayer.push({ecommerce: null}); 3013 window.dataLayer.push(dlUpdate); 3014 3015 let cookieExpires = 31536000 / 60 / 60 / 24; 3016 hyva.setCookie('GTM_COOKIE_WISHLIST_ADD', '', cookieExpires); 3017 } 3018 } 3019 3020 window.dataLayer ? 3021 notifyAddWishlist() : 3022 document.addEventListener("ga:inited", function () { 3023 notifyAddWishlist() 3024 }); 3025 </script>
vendor: 1 bytes, line 3025
3025
3026<script> 3027 function notifyAddToCart() { 3028 if (hyva.getCookie('GTM_COOKIE_ADD_TO_CART') && 3029 hyva.getCookie('GTM_COOKIE_ADD_TO_CART') !== '') { 3030 let cookieValue = hyva.getCookie('GTM_COOKIE_ADD_TO_CART'); 3031 cookieValue = decodeURIComponent(cookieValue); 3032 cookieValue = JSON.parse(cookieValue); 3033 3034 let i = 0, product, 3035 dlUpdate = { 3036 'event': 'add_to_cart', 3037 'ecommerce': { 3038 'currency': formatString("EUR"), 3039 'value': formatString(cookieValue.value), 3040 'items': [] 3041 } 3042 }; 3043 3044 for (i; i < cookieValue.items.length; i++) { 3045 product = cookieValue.items[i]; 3046 dlUpdate.ecommerce.items.push({ 3047 'item_id': formatString(product.item_id), 3048 'item_name': formatString(product.item_name), 3049 'item_brand': formatString(product.item_brand), 3050 'item_category': formatString(product.item_category), 3051 'item_category2': formatString(product.item_category2), 3052 'item_category3': formatString(product.item_category3), 3053 'item_category4': formatString(product.item_category4), 3054 'item_variant': formatString(product.item_variant), 3055 'item_category5': formatString(product.item_category5), 3056 'price': formatString(product.price), 3057 'currency': formatString(product.currency), 3058 'quantity': formatString(product.quantity), 3059 'item_list_name': formatString('listing'), 3060 'index': formatString('') 3061 }); 3062 } 3063 3064 window.dataLayer.push({ecommerce: null}); 3065 window.dataLayer.push(dlUpdate); 3066 3067 let cookieExpires = 31536000 / 60 / 60 / 24; 3068 hyva.setCookie('GTM_COOKIE_ADD_TO_CART', '', cookieExpires); 3069 } 3070 } 3071 3072 window.dataLayer ? 3073 notifyAddToCart() : 3074 document.addEventListener("ga:inited", function () { 3075 notifyAddToCart() 3076 }); 3077 </script>
vendor: 1 bytes, line 3077
3077
3078<script> 3079 function notifyLogin() { 3080 if (hyva.getCookie('GTM_COOKIE_LOGIN') && 3081 hyva.getCookie('GTM_COOKIE_LOGIN') === '1') { 3082 3083 window.dataLayer.push({ 3084 'event': 'login' 3085 }); 3086 3087 let cookieExpires = 31536000 / 60 / 60 / 24; 3088 hyva.setCookie('GTM_COOKIE_LOGIN', 0, cookieExpires); 3089 } 3090 } 3091 3092 window.dataLayer ? 3093 notifyLogin() : 3094 document.addEventListener("ga:inited", function () { 3095 notifyLogin() 3096 }); 3097 </script>
vendor: 1 bytes, line 3097
3097
3098<script> 3099 function notifySignUp() { 3100 if (hyva.getCookie('GTM_COOKIE_CUSTOMER_CREATE') && 3101 hyva.getCookie('GTM_COOKIE_CUSTOMER_CREATE') !== '0') { 3102 window.dataLayer.push({ 3103 'event': 'sign_up', 3104 'type': hyva.getCookie('GTM_COOKIE_CUSTOMER_CREATE') 3105 }); 3106 3107 let cookieExpires = 31536000 / 60 / 60 / 24; 3108 hyva.setCookie('GTM_COOKIE_CUSTOMER_CREATE', 0, cookieExpires); 3109 } 3110 } 3111 3112 window.dataLayer ? 3113 notifySignUp() : 3114 document.addEventListener("ga:inited", function () { 3115 notifySignUp() 3116 }); 3117 </script>
vendor: 1 bytes, line 3117
3117
3118<script src="https://integrations.etrusted.com/applications/widget.js/v2" async defer></script>
vendor: 1 bytes, line 3118
3118
3119<script> 3120 (function(w, k) {w[k] = window[k] || function () { (window[k].q = window[k].q || []).push(arguments) }})(window, "doofinderApp") 3121 3122 doofinderApp("config", "language", "fr") 3123 doofinderApp("config", "currency", "EUR") 3124 </script>
vendor: 1 bytes, line 3124
3124
3125<script src="https://eu1-config.doofinder.com/2.x/05b8d3b1-4968-45bb-82e1-a98044d1f35d.js" async></script>
vendor: 1 bytes, line 3125
3125
3126<script> 3127 var BASE_URL = 'https://www.we-wall.com/'; 3128 var THEME_PATH = 'https://www.we-wall.com/static/version1786625269/frontend/Texdecor/default/fr_FR'; 3129 var COOKIE_CONFIG = { 3130 "expires": null, 3131 "path": "\u002F", 3132 "domain": ".www.we\u002Dwall.com", 3133 "secure": false, 3134 "lifetime": "3600", 3135 "cookie_restriction_enabled": false }; 3136 var CURRENT_STORE_CODE = 'default'; 3137 var CURRENT_WEBSITE_ID = '1'; 3138 3139 window.hyva = window.hyva || {} 3140 3141 window.cookie_consent_groups = window.cookie_consent_groups || {} 3142 window.cookie_consent_groups['necessary'] = true; 3143 3144 window.cookie_consent_config = window.cookie_consent_config || {}; 3145 window.cookie_consent_config['necessary'] = [].concat( 3146 window.cookie_consent_config['necessary'] || [], 3147 [ 3148 'user_allowed_save_cookie', 3149 'form_key', 3150 'mage-messages', 3151 'private_content_version', 3152 'mage-cache-sessid', 3153 'last_visited_store', 3154 'section_data_ids' 3155 ] 3156 ); 3157</script>
vendor: 1 bytes, line 3157
3157
3158<script type="application/javascript" async 3159 src=https://static.klaviyo.com/onsite/js/XFvTTk/klaviyo.js ></script>
vendor: 1 bytes, line 3159
3159
3160<script type="text/x-magento-init"> 3161 { 3162 "*": { 3163 "KlaviyoCustomerData": {} 3164 } 3165 } 3166 </script>
vendor: 1 bytes, line 3166
3166
3167<script> 3168 function initHeader () { 3169 return { 3170 searchOpen: false, 3171 cart: {}, 3172 isMobile: window.innerWidth < 1200, 3173 subMenuOpen: [], 3174 navMobile: false, 3175 getBackgroundImage(url) { 3176 return (this.isMobile && url !== '') ? `background-image: url(${url})` : ''; 3177 }, 3178 openSubMenu(id) { 3179 if (this.isMobile) { 3180 this.navMobile = true; 3181 } 3182 3183 for (let i = 1; i <= 100000; i++) { 3184 if (parseInt(id) === i) { 3185 this.subMenuOpen[id] = this.subMenuOpen[id] !== true; 3186 } else { 3187 this.subMenuOpen[i] = false; 3188 } 3189 } 3190 }, 3191 getData(data) { 3192 if (data.cart) { this.cart = data.cart } 3193 }, 3194 toggleSearch() { 3195 if (this.searchOpen) { 3196 return this.closeSearch() 3197 } 3198 this.$refs.buttonSearch.focus(); 3199 this.searchOpen = true 3200 }, 3201 closeSearch(focusAfter) { 3202 if (! this.searchOpen) return 3203 this.searchOpen = false 3204 focusAfter && focusAfter.focus() 3205 }, 3206 getSubmenuLink(url) { 3207 return (this.isMobile) ? '#' : url; 3208 }, 3209 scroll() { 3210 let header = document.getElementById('header-container'); 3211 let preHeader = document.getElementById('pre-header-links'); 3212 let searchContent = document.getElementById('search-content'); 3213 3214 if (window.scrollY > 0) { 3215 header.classList.add('fixed', 'w-full', 'top-0', 'z-50', 'border-solid', 'border-b', 'border-black'); 3216 preHeader.classList.remove('xlg:flex'); 3217 searchContent.classList.remove('top-[94px]'); 3218 searchContent.classList.add('top-[68px]'); 3219 } else { 3220 header.classList.remove('fixed', 'w-full', 'top-0', 'z-50', 'border-solid', 'border-b', 'border-black'); 3221 preHeader.classList.add('xlg:flex'); 3222 searchContent.classList.remove('top-[68px]'); 3223 searchContent.classList.add('top-[94px]'); 3224 } 3225 }, 3226 closeNav() { 3227 let nav = document.getElementById('menu-links') 3228 nav.classList.add('xlg:flex') 3229 nav.classList.remove('xlg:hidden') 3230 } 3231 } 3232 } 3233 function initCompareHeader() { 3234 return { 3235 compareProducts: null, 3236 itemCount: 0, 3237 receiveCompareData(data) { 3238 if (data['compare-products']) { 3239 this.compareProducts = data['compare-products']; 3240 this.itemCount = this.compareProducts.count; 3241 } 3242 } 3243 } 3244 } 3245</script>
vendor: 1 bytes, line 3245
3245
3246<script> 3247 (function(c,l,a,r,i,t,y){ 3248 c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)}; 3249 t=l.createElement(r);t.async=1;t.src="https://www.clarity.ms/tag/"+i; 3250 y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y); 3251 })(window, document, "clarity", "script", "pbbi0x7ola"); 3252</script>
vendor: 1 bytes, line 3252
3252
3253<script> 3254 'use strict'; 3255 function initCustomerPopin() { 3256 return { 3257 open: false, 3258 toggle() { 3259 if (this.open) { 3260 return this.close() 3261 } 3262 3263 this.$refs.button.focus() 3264 this.open = true 3265 }, 3266 close(focusAfter) { 3267 if (! this.open) return 3268 this.open = false 3269 focusAfter && focusAfter.focus() 3270 } 3271 } 3272 } 3273</script>
vendor: 1 bytes, line 3273
3273
3274<script> 3275 'use strict'; 3276 3277 function initMiniSearch() { 3278 return { 3279 isLoading: false, 3280 minSearchLength: 3, 3281 resultProductId: [], 3282 suggestions: [], 3283 products: [], 3284 categories: [], 3285 makeSearch: false, 3286 value: '', 3287 wishlist: '', 3288 suggest() { 3289 this.suggestions = []; 3290 this.products = []; 3291 this.categories = []; 3292 3293 const search = this.$refs.searchInput; 3294 if (search.value.length >= this.minSearchLength) { 3295 search.setCustomValidity(''); 3296 search.reportValidity(); 3297 this.fetchSuggestions(search.value); 3298 } 3299 }, 3300 setCurrentWishlist(data) { 3301 if (data.wishlist) { 3302 let wishlistItems = data.wishlist.items; 3303 for (let i = 0; i < wishlistItems.length; i++) { 3304 let json = JSON.stringify(wishlistItems[i]); 3305 let itemsData = JSON.parse(json); 3306 this.resultProductId[parseInt(itemsData.product_id)] = true; 3307 } 3308 } 3309 }, 3310 clearValues() { 3311 this.value = ''; 3312 this.products = []; 3313 this.suggestions = []; 3314 this.categories = []; 3315 }, 3316 fetchSuggestions(term) { 3317 let self = this; 3318 3319 self.isLoading = true; 3320 3321 fetch( 3322 window.BASE_URL + 'catalogsearch/ajax/suggest?' + new URLSearchParams({q: term}), 3323 { 3324 headers: { 3325 'X-Requested-With': 'XMLHttpRequest' 3326 } 3327 } 3328 ).then(response => response.json()) 3329 .then(function (response) { 3330 self.isLoading = false; 3331 self.suggestions = response.suggestions; 3332 self.products = response.products; 3333 self.categories = response.categories; 3334 }); 3335 }, 3336 search(term) { 3337 const search = this.$refs.searchInput; 3338 term = term || search.value; 3339 if (term.length < this.minSearchLength) { 3340 search.setCustomValidity('La\u0020longueur\u0020minimale\u0020de\u0020la\u0020requ\u00EAte\u0020de\u0020recherche\u0020est\u0020de\u00203'); 3341 search.reportValidity(); 3342 } else { 3343 search.setCustomValidity(''); 3344 search.value = term; 3345 this.$refs.form.submit(); 3346 } 3347 }, 3348 focusElement(element) { 3349 if (element && element.nodeName === "DIV") { 3350 element.focus(); 3351 return true; 3352 } else { 3353 return false; 3354 } 3355 }, 3356 getDataPriceBox(id) { 3357 return 'product-id-' + id; 3358 }, 3359 addToWishlist(productId, position = '', listName = '') { 3360 const formKey = hyva.getFormKey(); 3361 fetch(BASE_URL + "wishlist/index/add/", { 3362 "headers": { 3363 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 3364 }, 3365 "body": "form_key=" + formKey + "&product=" + productId + "&position=" + position + "&listName=" + listName + "&uenc=" + btoa(window.location.href), 3366 "method": "POST", 3367 "mode": "cors", 3368 "credentials": "include" 3369 }).then(function (response) { 3370 if (response.redirected) { 3371 window.location.href = response.url; 3372 } else if (response.ok) { 3373 return response.json(); 3374 } else { 3375 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 3376 [{ 3377 type: "warning", 3378 text: "Impossible d'ajouter un article à la liste de souhaits." 3379 }], 5000 3380 ); 3381 } 3382 }).then(function (response) { 3383 if (!response) { 3384 return 3385 } 3386 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 3387 [{ 3388 type: (response.success) ? "success" : "error", 3389 text: (response.success) 3390 ? "Produit a été ajouté à votre liste dâenvies" 3391 : response.error_message 3392 }], 5000 3393 ); 3394 const reloadCustomerDataEvent = new CustomEvent("reload-customer-section-data"); 3395 window.dispatchEvent(reloadCustomerDataEvent); 3396 }).catch(function (error) { 3397 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 3398 [{ 3399 type: "error", 3400 text: error 3401 }], 5000 3402 ); 3403 }); 3404 } 3405 } 3406 } 3407</script>
vendor: 1 bytes, line 3407
3407
3408<script> 3409 function initMessages() { 3410 "use strict"; 3411 return { 3412 messages: window.mageMessages || [], 3413 isEmpty() { 3414 return this.messages.reduce( 3415 function (isEmpty, message) { 3416 return isEmpty && message === undefined 3417 }, true 3418 ) 3419 }, 3420 removeMessage(messageIndex) { 3421 this.messages[messageIndex] = undefined; 3422 }, 3423 addMessages(messages, hideAfter) { 3424 messages.map((message) => { 3425 this.messages = this.messages.concat(message); 3426 if (hideAfter) { 3427 this.setHideTimeOut(this.messages.length - 1, hideAfter); 3428 } 3429 }); 3430 }, 3431 setHideTimeOut(messageIndex, hideAfter) { 3432 setTimeout((messageIndex) => { 3433 this.removeMessage(messageIndex); 3434 }, hideAfter, messageIndex); 3435 }, 3436 eventListeners: { 3437 ['@messages-loaded.window']() { 3438 this.addMessages(event.detail.messages, event.detail.hideAfter) 3439 }, 3440 ['@private-content-loaded.window'](event) { 3441 const data = event.detail.data; 3442 if ( 3443 data.messages && 3444 data.messages.messages && 3445 data.messages.messages.length 3446 ) { 3447 this.addMessages(data.messages.messages); 3448 } 3449 }, 3450 ['@clear-messages.window']() { 3451 this.messages = []; 3452 } 3453 } 3454 } 3455 } 3456</script>
vendor: 1 bytes, line 3456
3456
3457<script> 3458 function initCustomerLoginForm() { 3459 return { 3460 errors: 0, 3461 hasCaptchaToken: 0, 3462 displayErrorMessage: false, 3463 errorMessages: [], 3464 value_email: "", 3465 value_pass: "", 3466 add_email: false, 3467 add_pass: false, 3468 showPass: false, 3469 setErrorMessages(messages) { 3470 this.errorMessages = [messages] 3471 this.displayErrorMessage = this.errorMessages.length 3472 }, 3473 submitForm() { 3474 // do not rename $form - it is the expected name in the child block output 3475 const $form = document.querySelector('#customer-login-form'); 3476 3477 if (this.errors === 0) { 3478 $form.submit(); 3479 } 3480 } 3481 } 3482 } 3483 </script>
vendor: 1 bytes, line 3483
3483
3484<script> 3485 function initNewsletterForm() { 3486 return { 3487 errors: 0, 3488 hasCaptchaToken: 0, 3489 displayErrorMessage: false, 3490 errorMessages: [], 3491 email: '', 3492 setErrorMessages(messages) { 3493 this.errorMessages = [messages] 3494 this.displayErrorMessage = this.errorMessages.length 3495 }, 3496 submitForm() { 3497 // Do not rename $form, the variable is expected to be declared in the child block output 3498 const $form = document.querySelector('#newsletter-validate-detail'); 3499 if (!this.hasCaptchaToken) { 3500 this.errors = 1; 3501 3502 const recaptchaUrl = "https://www.google.com/recaptcha/api.js?render=6LenPrkkAAAAAOMjxfi6JD5WHrJXaKBVMiZFqrxA"; 3503 3504 const executeGreCaptcha = () => { 3505 grecaptcha.ready(() => { 3506 grecaptcha.execute( 3507 '6LenPrkkAAAAAOMjxfi6JD5WHrJXaKBVMiZFqrxA', 3508 {action: 'submit'} 3509 ).then((token) => { 3510 const recaptchaResponseInput = $form.querySelector('input[name="g-recaptcha-response"]'); 3511 if (recaptchaResponseInput != null) { 3512 recaptchaResponseInput.value = token; 3513 this.errors = 0; 3514 this.hasCaptchaToken = 1; 3515 this.submitForm(); 3516 } else { 3517 this.errors = 1; 3518 if (this.setErrorMessages) { 3519 this.setErrorMessages(['Your form does not have the required fields for recaptcha to work.']) 3520 this.displayErrorMessage = true; 3521 } 3522 } 3523 }); 3524 }) 3525 } 3526 3527 if (typeof window.grecaptcha !== 'undefined') { 3528 executeGreCaptcha(); 3529 } else { 3530 let script = document.createElement('script'); 3531 script.setAttribute('type', 'text/javascript'); 3532 script.setAttribute('src', recaptchaUrl); 3533 document.head.appendChild(script); 3534 3535 script.addEventListener("load", executeGreCaptcha, false); 3536 } 3537 } 3538 3539 if (this.errors === 0) { 3540 $form.submit(); 3541 } 3542 } 3543 } 3544 } 3545</script>
vendor: 1 bytes, line 3545
3545
3546<script async data-desktop-y-offset="0" data-mobile-y-offset="50" data-desktop-disable-reviews="false" data-desktop-enable-custom="false" data-desktop-position="right" data-desktop-custom-width="156" data-desktop-enable-fadeout="false" data-disable-mobile="false" data-disable-trustbadge="false" data-mobile-custom-width="156" data-mobile-disable-reviews="false" data-mobile-enable-custom="false" data-mobile-position="left" data-color-scheme="os-default" charset="UTF-8" src="//widgets.trustedshops.com/js/XD90044C6A29CC081EE43A5F76B0C9473.js" ></script>
vendor: 1 bytes, line 3546
3546
3547<script src="https://www.we-wall.com/static/version1786625269/frontend/Texdecor/default/fr_FR/Adexos_TarteAuCitron/js/lang/tarteaucitron.fr.min.js"></script>
vendor: 1 bytes, line 3547
3547
3548<script> 3549 tarteaucitron.init({ 3550 "privacyUrl": "https://www.we-wall.com/donnees-personnelles", /* Privacy policy url */ 3551 "hashtag": "#tarteaucitron", /* Open the panel with this hashtag */ 3552 "cookieName": "tarteaucitron", /* Cookie name */ 3553 "orientation": "middle", /* Banner position (top - bottom - middle - popup) */ 3554 "groupServices": false, /* Group services by category */ 3555 "showAlertSmall": false, /* Show the small banner on bottom right */ 3556 "cookieslist": false, /* Show the cookie list */ 3557 "showIcon": true, /* Show cookie icon to manage cookies */ 3558 // "iconSrc": "", /* Optionnal: URL or base64 encoded image */ 3559 "iconPosition": "BottomRight", /* Position of the icon between BottomRight, BottomLeft, TopRight and TopLeft */ 3560 "adblocker": false, /* Show a Warning if an adblocker is detected */ 3561 "DenyAllCta" : true, /* Show the deny all button */ 3562 "AcceptAllCta" : true, /* Show the accept all button when highPrivacy on */ 3563 "highPrivacy": true, /* HIGHLY RECOMMANDED Disable auto consent */ 3564 "handleBrowserDNTRequest": false, /* If Do Not Track == 1, disallow all */ 3565 "removeCredit": false, /* Remove credit link */ 3566 "moreInfoLink": true, /* Show more info link */ 3567 "useExternalCss": true, /* If false, the tarteaucitron.css file will be loaded */ 3568 "useExternalJs": true, /* If false, the tarteaucitron.js file will be loaded */ 3569 //"cookieDomain": ".my-multisite-domaine.fr", /* Shared cookie for subdomain website */ 3570 "readmoreLink": "", /* Change the default readmore link pointing to tarteaucitron.io */ 3571 "mandatory": true /* Show a message about mandatory cookies */ 3572 }); 3573</script>
vendor: 1 bytes, line 3573
3573
3574<script> 3575 (function () { 3576 "use strict"; 3577 3578 const DIRECTIVE = "intersect"; 3579 const X_ATTR_RE = /^x-([a-z-]*)\b/i; 3580 3581 function parseHtmlAttribute(reference) { 3582 const name = reference.name; 3583 const value = reference.value; 3584 3585 const typeMatch = name.match(X_ATTR_RE); 3586 const valueMatch = name.match(/:([a-zA-Z0-9\-:]+)/); 3587 const modifiers = name.match(/\.[^.\]]+(?=[^\]]*$)/g) || []; 3588 3589 return { 3590 type: typeMatch ? typeMatch[1] : null, 3591 value: valueMatch ? valueMatch[1] : null, 3592 modifiers: modifiers.map((i) => i.replace(".", "")), 3593 expression: value, 3594 }; 3595 } 3596 3597 function getXDirectives(el) { 3598 return Array.from(el.attributes) 3599 .filter(function (attr) { 3600 return X_ATTR_RE.test(attr.name); 3601 }) 3602 .map(parseHtmlAttribute); 3603 } 3604 3605 if (window.Alpine) { 3606 console.error("Intersect plugin must be included before AlpineJs, x-intersect will not work."); 3607 } 3608 3609 const getLengthValue = (rawValue) => { 3610 // Supported: -10px, -20 (implied px), 30 (implied px), 40px, 50% 3611 let match = rawValue.match(/^(-?[0-9]+)(px|%)?$/) 3612 return match ? match[1] + (match[2] || 'px') : undefined 3613 } 3614 3615 const getRootMargin = (modifiers) => { 3616 const key = 'margin' 3617 const fallback = '0px 0px 0px 0px' 3618 const index = modifiers.indexOf(key) 3619 3620 // If the modifier isn't present, use the default. 3621 if (index === -1) return fallback 3622 3623 // Grab the 4 subsequent length values after it: x-intersect.margin.300px.0.50%.0 3624 let values = [] 3625 for (let i = 1; i < 5; i++) { 3626 values.push(getLengthValue(modifiers[index + i] || '')) 3627 } 3628 3629 // Filter out undefined values (not a valid length) 3630 values = values.filter((v) => v !== undefined) 3631 3632 return values.length ? values.join(' ').trim() : fallback 3633 } 3634 3635 const getThreshhold = (modifiers) => { 3636 if (modifiers.includes("full")) return 0.8; 3637 if (modifiers.includes("half")) return 0.5; 3638 3639 return 0; 3640 }; 3641 3642 const AlpineIntersectionDirective = { 3643 start: function start() { 3644 Alpine.onBeforeComponentInitialized(function (component) { 3645 const legacyResolveBoundAttributes = component.resolveBoundAttributes; 3646 3647 component.resolveBoundAttributes = function (el, initialUpdate, extraVars) { 3648 if (initialUpdate === void 0) { 3649 initialUpdate = false; 3650 } 3651 3652 if (initialUpdate) { 3653 const attrs = getXDirectives(el); 3654 attrs.forEach(function (reference) { 3655 const type = reference.type; 3656 const expression = reference.expression; 3657 const value = reference.value; 3658 const modifiers = reference.modifiers; 3659 3660 if (type === DIRECTIVE) { 3661 const options = { 3662 rootMargin: getRootMargin(modifiers), 3663 threshold: getThreshhold(modifiers), 3664 }; 3665 3666 if ("IntersectionObserver" in window) { 3667 const observer = new IntersectionObserver((elements) => { 3668 elements.forEach((element) => { 3669 // Ignore element if intersecting in leave mode, 3670 // or not intersecting in enter mode 3671 if (element.isIntersecting === (value === 'leave')) return 3672 3673 component.evaluateReturnExpression(el, expression, extraVars); 3674 3675 modifiers.includes("once") && observer.disconnect(); 3676 }); 3677 }, options); 3678 3679 observer.observe(el); 3680 } else { 3681 component.evaluateReturnExpression(el, expression, extraVars); 3682 } 3683 } 3684 }); 3685 } 3686 return legacyResolveBoundAttributes.bind(component)(el, initialUpdate, extraVars); 3687 }; 3688 }); 3689 }, 3690 }; 3691 3692 const initAlpine = window.deferLoadingAlpine || ((callback) => callback()); 3693 window.deferLoadingAlpine = (callback) => { 3694 AlpineIntersectionDirective.start(); 3695 initAlpine(callback); 3696 }; 3697 })(); 3698</script>
vendor: 1 bytes, line 3698
3698
3699<script type="module" 3700 src="https://www.we-wall.com/static/version1786625269/frontend/Texdecor/default/fr_FR/Hyva_Theme/js/alpine.min.js" 3701 defer 3702 crossorigin 3703></script>
vendor: 1 bytes, line 3703
3703
3704<script> 3705 'use strict'; 3706 function dispatchMessages(messages, hideAfter) { 3707 const messagesEvent = new CustomEvent("messages-loaded", { 3708 detail: { 3709 messages: messages, 3710 hideAfter: hideAfter 3711 } 3712 }); 3713 window.dispatchEvent(messagesEvent); 3714 } 3715 3716 if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) { 3717 console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script"); 3718 } 3719 3720 (function( hyva, undefined ) { 3721 3722 hyva.initFormKey = () => { 3723 const inputSelector = 'input[name="form_key"]', 3724 formKey = hyva.getFormKey(); 3725 3726 Array.from(document.querySelectorAll(inputSelector)).map(function (input) { 3727 input.value = formKey 3728 }); 3729 } 3730 3731 hyva.initMessages = () => { 3732 try { 3733 const messages = hyva.getCookie('mage-messages'); 3734 window.mageMessages = messages ? JSON.parse(decodeURIComponent(messages).replace(/\+/g, ' ')) : []; 3735 3736 dispatchMessages(window.mageMessages); 3737 3738 // empty `mage-messages` cookie 3739 const skipSetDomain = true; 3740 hyva.setCookie('mage-messages','', -1, skipSetDomain); 3741 3742 } catch (error) { 3743 console.warn('Error parsing Cookie Messages:', error); 3744 } 3745 } 3746 3747 window.addEventListener('DOMContentLoaded', hyva.initFormKey); 3748 window.addEventListener('load', hyva.initMessages); 3749 3750 3751 }( window.hyva = window.hyva || {} )); 3752</script>
vendor: 1 bytes, line 3752
3752
3753<script> 3754 'use strict'; 3755 { 3756 const private_content_key = 'mage-cache-storage'; 3757 const private_content_expire_key = 'mage-cache-timeout'; 3758 const private_content_version_key = 'private_content_version'; 3759 const section_data_ids_key = 'section_data_ids'; 3760 const mage_cache_session_id_key = 'mage-cache-sessid'; 3761 const last_visited_store_key = 'last_visited_store'; 3762 3763 const ttl = 3600; 3764 3765 if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) { 3766 console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script"); 3767 } 3768 3769 function loadSectionData () { 3770 const browserStorage = hyva.getBrowserStorage(); 3771 if (!browserStorage) { 3772 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 3773 [{ 3774 type: "warning", 3775 text: "Veuillez activer localStorage dans votre navigateur." 3776 }] 3777 ); 3778 return; 3779 } 3780 try { 3781 let isInvalid = false; 3782 3783 if (hyva.getCookie(last_visited_store_key) !== CURRENT_STORE_CODE) { 3784 isInvalid = true; 3785 } 3786 hyva.setCookie(last_visited_store_key, CURRENT_STORE_CODE, false, false); 3787 3788 if (!hyva.getCookie(mage_cache_session_id_key)) { 3789 isInvalid = true; 3790 const skipSetDomain = true; 3791 const days = false; 3792 hyva.setCookie(mage_cache_session_id_key, true, days, skipSetDomain) 3793 } 3794 3795 const cookieVersion = hyva.getCookie(private_content_version_key); 3796 const storageVersion = browserStorage.getItem(private_content_version_key); 3797 3798 if (cookieVersion && !storageVersion || cookieVersion !== storageVersion) { 3799 isInvalid = true; 3800 } 3801 3802 const privateContentExpires = browserStorage.getItem(private_content_expire_key); 3803 if (privateContentExpires && new Date(privateContentExpires) < new Date()) { 3804 browserStorage.removeItem(private_content_key); 3805 } 3806 3807 if (isInvalid) { 3808 fetchPrivateContent([]); 3809 } else if (cookieVersion && storageVersion && cookieVersion === storageVersion) { 3810 const privateContent = JSON.parse(browserStorage.getItem(private_content_key)); 3811 if ( 3812 privateContent && 3813 privateContentExpires && 3814 privateContent.cart && 3815 privateContent.customer 3816 ) { 3817 dispatchPrivateContent(privateContent); 3818 } else { 3819 fetchPrivateContent([]); 3820 } 3821 } else { 3822 dispatchPrivateContent({}); 3823 } 3824 3825 } catch (error) { 3826 console.warn('Error retrieving Private Content:', error); 3827 } 3828 } 3829 3830 window.addEventListener('load', loadSectionData); 3831 window.addEventListener('reload-customer-section-data', loadSectionData); 3832 3833 function dispatchPrivateContent(data) { 3834 const privateContentEvent = new CustomEvent("private-content-loaded", { 3835 detail: { 3836 data: data 3837 } 3838 }); 3839 window.dispatchEvent(privateContentEvent); 3840 } 3841 3842 function fetchPrivateContent(sections) { 3843 fetch(`${BASE_URL}customer/section/load/?sections=${encodeURIComponent(sections.join(','))}`, { 3844 method: 'GET', 3845 headers: { 3846 'Content-Type': 'application/json', 3847 'X-Requested-With': 'XMLHttpRequest' 3848 } 3849 }) 3850 .then(response => response.json()) 3851 .then( 3852 data => { 3853 if (data) { 3854 try { 3855 const browserStorage = hyva.getBrowserStorage(); 3856 3857 // merge new data preserving non-invalidated sections 3858 const oldSectionData = JSON.parse(browserStorage.getItem(private_content_key) || '{}'); 3859 const newSectionData = Object.assign(oldSectionData, data); 3860 3861 dispatchPrivateContent(newSectionData); 3862 3863 // don't persist messages, they've been dispatched already 3864 if (newSectionData.messages && newSectionData.messages.messages ) { 3865 newSectionData.messages.messages = []; 3866 } 3867 3868 browserStorage.setItem(private_content_key, JSON.stringify(newSectionData)); 3869 3870 const expiresAt = new Date(Date.now() + (ttl * 1000)).toISOString(); 3871 browserStorage.setItem(private_content_expire_key, expiresAt); 3872 3873 const newCookieVersion = hyva.getCookie(private_content_version_key); 3874 browserStorage.setItem(private_content_version_key, newCookieVersion); 3875 3876 // We don't need the section_data_ids in Hyvä, but we store them for compatibility 3877 // with Luma Fallback. Otherwise, not all sections are loaded in Luma Checkout 3878 hyva.setCookie( 3879 section_data_ids_key, 3880 JSON.stringify( 3881 Object.keys(data).reduce((sectionDataIds, sectionKey) => { 3882 sectionDataIds[sectionKey] = data[sectionKey]['data_id']; 3883 return sectionDataIds; 3884 }, {}) 3885 ), 3886 false, 3887 true 3888 ); 3889 } catch (error) { 3890 console.warn("Couldn't store privateContent", error); 3891 } 3892 } 3893 } 3894 ); 3895 } 3896 } 3897</script>
vendor: 1 bytes, line 3897
3897
3898<script> 3899 function initCompareOnProductList() { 3900 return { 3901 addToCompare(productId) { 3902 const formKey = document.querySelector('input[name=form_key]').value; 3903 const postUrl = BASE_URL + 'catalog/product_compare/add/'; 3904 3905 fetch(postUrl, { 3906 "headers": { 3907 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 3908 }, 3909 "body": "form_key="+ formKey + "&product="+productId+"&uenc="+btoa(window.location.href), 3910 "method": "POST", 3911 "mode": "cors", 3912 "credentials": "include" 3913 }).then(function (response) { 3914 if (response.redirected) { 3915 window.location.href = response.url; 3916 } 3917 }).catch(function (error) { 3918 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 3919 [{ 3920 type: "error", 3921 text: error 3922 }], 5000 3923 ); 3924 }); 3925 } 3926 }; 3927 } 3928</script>
vendor: 1 bytes, line 3928
3928
3929<script> 3930 function initWishlist() { 3931 return { 3932 isInWishlistList: false, 3933 deleteItemParam: '', 3934 resultProductId: [], 3935 resultdeleteParamProductId: [], 3936 receiveWishlistListData(productId, data) { 3937 if (typeof this.resultProductId[productId] === 'undefined') { 3938 this.resultProductId[productId] = false; 3939 3940 if (data['wishlist']) { 3941 let wishlistItems = data['wishlist'].items; 3942 for (let i = 0; i < wishlistItems.length; i++) { 3943 let json = JSON.stringify(wishlistItems[i]); 3944 let itemsData = JSON.parse(json); 3945 if (parseInt(itemsData.product_id) === productId) { 3946 this.resultProductId[productId] = true; 3947 this.resultdeleteParamProductId[productId] = JSON.parse(itemsData.delete_item_params); 3948 break; 3949 } 3950 } 3951 } 3952 } 3953 3954 this.deleteItemParam = this.resultdeleteParamProductId[productId]; 3955 this.isInWishlistList = this.resultProductId[productId]; 3956 }, 3957 addToWishlist(productId, position = '', listName = '') { 3958 const formKey = hyva.getFormKey(); 3959 fetch(BASE_URL + "wishlist/index/add/", { 3960 "headers": { 3961 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 3962 }, 3963 "body": "form_key=" + formKey + "&product=" + productId + "&position=" + position + "&listName=" + listName + "&uenc=" + btoa(window.location.href), 3964 "method": "POST", 3965 "mode": "cors", 3966 "credentials": "include" 3967 }).then(function (response) { 3968 if (response.redirected) { 3969 window.location.href = response.url; 3970 } else if (response.ok) { 3971 return response.json(); 3972 } else { 3973 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 3974 [{ 3975 type: "warning", 3976 text: "Impossible d'ajouter un article à la liste de souhaits." 3977 }], 5000 3978 ); 3979 } 3980 }).then(function (response) { 3981 if (!response) { 3982 return 3983 } 3984 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 3985 [{ 3986 type: (response.success) ? "success" : "error", 3987 text: (response.success) 3988 ? "Produit a été ajouté à votre liste dâenvies" 3989 : response.error_message 3990 }], 5000 3991 ); 3992 const reloadCustomerDataEvent = new CustomEvent("reload-customer-section-data"); 3993 window.dispatchEvent(reloadCustomerDataEvent); 3994 }).catch(function (error) { 3995 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 3996 [{ 3997 type: "error", 3998 text: error 3999 }], 5000 4000 ); 4001 }); 4002 }, 4003 productIsInWishlist(productId) { 4004 } 4005 } 4006 } 4007 </script>
vendor: 1 bytes, line 4007
4007
4008<script> 4009 function initSwatchOptions(swatchConfig) { 4010 return { 4011 swatchConfig, 4012 swatchPopin: false, 4013 setSwatchTextVisibility(optionId, value) { 4014 let swatchText = document.getElementsByClassName('swatch-text-' + optionId); 4015 for (let i = 0; i < swatchText.length; i++) { 4016 if (value) { 4017 swatchText[i].style.display = '' 4018 } else { 4019 swatchText[i].style.display = 'none'; 4020 } 4021 } 4022 }, 4023 openSwatchPopin() { 4024 let showPopin = window.location.href.split('showPopin=')[1] 4025 4026 if (showPopin > 0) { 4027 this.swatchPopin = true; 4028 } 4029 }, 4030 getAttributeSwatchData(attributeId) { 4031 const swatchConfig = Object.assign({}, this.swatchConfig[attributeId]); 4032 swatchConfig['details'] = JSON.parse(swatchConfig['additional_data']); 4033 4034 return swatchConfig; 4035 }, 4036 getAllAttributeOptions(attributeId) { 4037 return ( 4038 this.optionConfig.attributes[attributeId] && 4039 this.optionConfig.attributes[attributeId].options 4040 ) || [] 4041 }, 4042 optionIsActive(attributeId, optionId) { 4043 // return true if a product with this option is in stock 4044 return !!this.getAllowedAttributeOptions(attributeId).find( 4045 option => option.id === optionId 4046 ) 4047 }, 4048 countSalableOptions(attributeId) { 4049 let count = 0; 4050 let options = this.optionConfig.attributes[attributeId].options; 4051 4052 for (var i = 0; i < options.length; i++) { 4053 if (options[i].products.length) { 4054 count++; 4055 } 4056 } 4057 4058 return count; 4059 }, 4060 optionIsEnabled(attributeId, optionId) { 4061 // return true if a product with this option is enabled 4062 for (const productId in this.optionConfig.index) { 4063 if (this.optionConfig.index[productId][attributeId] === optionId) { 4064 return true; 4065 } 4066 } 4067 return false; 4068 }, 4069 mapSwatchTypeNumberToTypeCode(typeNumber) { 4070 switch ("" + typeNumber) { 4071 case "1": 4072 return "color" 4073 case "2": 4074 return "image" 4075 case "3": 4076 return "empty" 4077 case "0": 4078 default: 4079 return "text" 4080 } 4081 }, 4082 getTypeOfFirstOption(attributeId) { 4083 for (const optionId in this.swatchConfig[attributeId]) { 4084 const option = this.swatchConfig[attributeId][optionId]; 4085 if (typeof option.type !== 'undefined') { 4086 return this.mapSwatchTypeNumberToTypeCode(option.type); 4087 } 4088 } 4089 }, 4090 getVisualSwatchType(attributeId, targetOptionId) { 4091 // If a type configuration is present for the given option id, use it 4092 const config = this.swatchConfig[attributeId]; 4093 if (config[targetOptionId] && typeof config[targetOptionId].type !== 'undefined') { 4094 return this.mapSwatchTypeNumberToTypeCode(config[targetOptionId].type); 4095 } 4096 4097 // Otherwise - if no config is present for the target option - use the type of the first option 4098 // with a type property from the attribute, thus assuming its the same type as the target option. 4099 // (This edge case condition can occur on single swatch products if some options are not salable) 4100 return this.getTypeOfFirstOption(attributeId); 4101 }, 4102 getSwatchType(attributeId, optionId) { 4103 // Deserialize the attribute details the first time they are used 4104 if (this.swatchConfig[attributeId] && !this.swatchConfig[attributeId].details) { 4105 this.swatchConfig[attributeId] = this.getAttributeSwatchData(attributeId); 4106 } 4107 const type = this.swatchConfig[attributeId] && 4108 this.swatchConfig[attributeId].details && 4109 this.swatchConfig[attributeId].details.swatch_input_type || 4110 "empty"; 4111 return type === 'visual' ? this.getVisualSwatchType(attributeId, optionId) : type; 4112 }, 4113 isTextSwatch(attributeId, optionId) {
4114 return this.getSwatchType(attributeId, optionId) === 'text'; 4115 }, 4116 isVisualSwatch(attributeId, optionId) { 4117 const type = this.getSwatchType(attributeId, optionId); 4118 4119 return ['image', 'color'].includes(type); 4120 }, 4121 getSwatchBackgroundStyle(attributeId, optionId) { 4122 const config = this.getSwatchConfig(attributeId, optionId); 4123 const type = this.getSwatchType(attributeId, optionId); 4124 4125 if (type === "color") { 4126 return 'background-color:' + config.value; 4127 } else if (type === "image") { 4128 return "background: #ffffff url('" + config.value + "') no-repeat center"; 4129 } 4130 4131 return ''; 4132 }, 4133 getSwatchColor(attributeId, optionId) { 4134 const config = this.getSwatchConfig(attributeId, optionId); 4135 const type = this.getSwatchType(attributeId, optionId); 4136 4137 if (type === "color") { 4138 return config.value; 4139 } 4140 4141 return ''; 4142 }, 4143 getSwatchText(attributeId, optionId) { 4144 const config = this.getSwatchConfig(attributeId, optionId); 4145 4146 return config.label || config.value || this.getOptionLabelFromOptionConfig(attributeId, optionId); 4147 }, 4148 getOptionLabelFromOptionConfig(attributeId, optionId) { 4149 // Fallback if no value is present in swatchConfig data 4150 // Reference issue https://gitlab.hyva.io/hyva-themes/magento2-default-theme/-/issues/190 4151 const option = this.getAllAttributeOptions(attributeId).filter(option => option.id === optionId); 4152 return option && option[0] && option[0].label || ''; 4153 }, 4154 getSwatchConfig(attributeId, optionId) { 4155 return this.swatchConfig[attributeId] && this.swatchConfig[attributeId][optionId] 4156 ? this.swatchConfig[attributeId][optionId] 4157 : false; 4158 }, 4159 activeTooltipItem: false, 4160 tooltipPositionElement: false, 4161 isTooltipVisible() { 4162 return this.activeTooltipItem &&
4163 this.getSwatchConfig( 4164 this.activeTooltipItem.attribute, 4165 this.activeTooltipItem.item 4166 ); 4167 }, 4168 getTooltipImageStyle(attributeId, optionId) { 4169 const config = this.getSwatchConfig(attributeId, optionId); 4170 const type = this.getSwatchType(attributeId, optionId); 4171 4172 if (type === "color") { 4173 return 'background-color:' + config.value + '; width: 110px; height: 90px;'; 4174 } else if (type === "image") { 4175 return "background: #ffffff url('" + config.thumb + 4176 "') center center no-repeat; width: 110px; height: 90px;"; 4177 } else { 4178 return 'display:none'; 4179 } 4180 }, 4181 getTooltipPosition() { 4182 return this.tooltipPositionElement ? 4183 `top: ${this.tooltipPositionElement.offsetTop}px;` + 4184 `left: ${ 4185 this.tooltipPositionElement.offsetLeft - ( 4186 this.tooltipPositionElement.closest('.snap') && 4187 this.tooltipPositionElement.closest('.snap').scrollLeft || 4188 0 4189 ) 4190 }px;` : '' 4191 }, 4192 getTooltipLabel() { 4193 return this.getSwatchConfig(this.activeTooltipItem.attribute, this.activeTooltipItem.item).label 4194 }, 4195 focusedLabel: false, 4196 focusLabel(optionId) { 4197 this.focusedLabel = optionId; 4198 }, 4199 blurLabel() { 4200 this.focusedLabel = false; 4201 }, 4202 showSwatches: false, 4203 initShowSwatchesIntersect() { 4204 if ('IntersectionObserver' in window && !window.scrollY) { 4205 const io = new IntersectionObserver( 4206 entries => { 4207 entries.map(entry => { 4208 if (entry.isIntersecting) { 4209 this.showSwatches = true; 4210 io.unobserve(this.$el); 4211 } 4212 }) 4213 } 4214 ); 4215 io.observe(this.$el); 4216 } else { 4217 this.showSwatches = true 4218 } 4219 }, 4220 selectDefaultSwatch() { 4221 setTimeout(function () { 4222 let ajaxcart = document.getElementById('ajaxcart-modal'); 4223 if (ajaxcart.style.display !== 'none') { 4224 return; 4225 } 4226 4227 let hash = window.location.hash; 4228 if (!hash || hash === '#description' || hash === '#') { 4229 let swatchs = document.getElementsByClassName('swatch-option'); 4230 if (swatchs.length) { 4231 swatchs[0].click(); 4232 } 4233 } 4234 }, 250); 4235 }, 4236 } 4237 } 4238</script>
vendor: 1 bytes, line 4238
4238
4239<script> 4240 function initConfigurableOptions(productId, optionConfig) { 4241 4242 function findPathParam(key) { 4243 // get all path pairs after BASE_URL/front_name/action_path/action 4244 const baseUrl = (BASE_URL.substr(0, 2) === '//' ? 'http:' : '') + BASE_URL; 4245 const baseUrlParts = (new URL(baseUrl)).pathname.replace(/\/$/, '').split('/'); 4246 const pathParts = window.location.pathname.split('/').slice(baseUrlParts.length + 3); 4247 4248 for (let i = 0; i < pathParts.length; i += 2) { 4249 if (pathParts[i] === key && pathParts.length > i) { 4250 return pathParts[i + 1]; 4251 } 4252 } 4253 } 4254 4255 return { 4256 optionConfig, 4257 productId, 4258 itemId: (new URLSearchParams(window.location.search)).get('id') || findPathParam('id'), 4259 allowedAttributeOptions: [], 4260 selectedValues: [], 4261 isLoading: false, 4262 viewItemSend: false, 4263 childs: [], 4264 init() { 4265 this.findAllowedAttributeOptions(); 4266 this.$nextTick(() => { 4267 if (typeof this.optionConfig.defaultValues === 'object') { 4268 for (const [optionId, value] of Object.entries(this.optionConfig.defaultValues)) { 4269 this.changeOption(optionId, value + ''); 4270 } 4271 } 4272 }); 4273 }, 4274 findSimpleIndex() { 4275 // a better method name would be `updateSelectedSimpleIndex` but keeping for bc 4276 this.productIndex = this.calculateSimpleIndexForFullSelection(this.selectedValues); 4277 }, 4278 calculateSimpleIndexForFullSelection(selectedValues) { 4279 const productIndexes = this.optionConfig.index; 4280 return Object.keys(productIndexes).find(productIndex => { 4281 const productCandidateOptions = productIndexes[productIndex]; 4282 4283 for (const productOption in productCandidateOptions) { 4284 if ( 4285 ! selectedValues[productOption] || 4286 selectedValues[productOption] !== productCandidateOptions[productOption] 4287 ) { 4288 return false; 4289 } 4290 } 4291 return productIndex; 4292 }); 4293 }, 4294 productIndex: 0, 4295 findAllowedAttributeOptions() { 4296 // a better method name would be `updateAllowedAttributeOptions` but keeping for bc 4297 this.allowedAttributeOptions = this.calculateAllowedAttributeOptions(this.selectedValues); 4298 }, 4299 calculateAllowedAttributeOptions(selectedValues) { 4300 const allAttributes = this.optionConfig.attributes; 4301 const allAttributesSorted = Object.values(allAttributes).sort((a,b) => { 4302 return a.position - b.position 4303 }); 4304 const productIndexes = this.optionConfig.index; 4305 let previousOption = false; 4306 let availableIndexes = Object.keys(productIndexes); 4307 4308 const newAllowedAttributeOptions = []; 4309 4310 allAttributesSorted.forEach(attribute => { 4311 if (previousOption && selectedValues[previousOption]) { 4312 availableIndexes = availableIndexes.filter(availableIndex => { 4313 return productIndexes[availableIndex][previousOption] === 4314 selectedValues[previousOption] 4315 }) 4316 } 4317 newAllowedAttributeOptions[attribute.id] = 4318 allAttributes[attribute.id].options.filter(option => { 4319 return !!option.products.find(product => { 4320 return availableIndexes.includes(product); 4321 }) 4322 }); 4323 previousOption = attribute.id; 4324 }); 4325 return newAllowedAttributeOptions; 4326 }, 4327 findAttributeByOptionId(optionId) { 4328 for (const attributeId in this.optionConfig.attributes) { 4329 const attributeOptions = this.optionConfig.attributes[attributeId].options || []; 4330 if (attributeOptions.find(option => option.id === optionId)) { 4331 return attributeId; 4332 } 4333 } 4334 }, 4335 getAllowedAttributeOptions(attributeId) { 4336 return this.allowedAttributeOptions[attributeId] || [] 4337 }, 4338 getProductIdsForOption(option) { 4339 const attributeId = this.findAttributeByOptionId(option.id); 4340 const allOptions = this.optionConfig.attributes[attributeId]; 4341 const opt = (allOptions && allOptions.options || []).find(o => o.id === option.id); 4342 return opt && opt.products 4343 ? opt.products 4344 : []; 4345 }, 4346 findProductIdsForPartialSelection(optionSelection) { 4347 const candidateProducts = Object.values(optionSelection).reduce((candidates, optionId) => { 4348 const newCandidates = this.getProductIdsForOption({id: optionId}); 4349 return candidates === null 4350 ? newCandidates 4351 : candidates.filter(productId => newCandidates.includes(productId)); 4352 }, null); 4353 return candidateProducts || []; 4354 },
4355 findCheapestProductForPartialSelection(optionSelection) { 4356 const candidateProducts = this.findProductIdsForPartialSelection(optionSelection); 4357 return candidateProducts.reduce((cheapest, simpleIdx) => { 4358 // in the first iteration we start with simpleIdx as the currently cheapest product 4359 if (! this.optionConfig.optionPrices[cheapest]) return simpleIdx; 4360 const knownCheapestPrice = this.optionConfig.optionPrices[cheapest].finalPrice.amount; 4361 return knownCheapestPrice > this.optionConfig.optionPrices[simpleIdx].finalPrice.amount 4362 ? simpleIdx 4363 : cheapest; 4364 }, 0) 4365 }, 4366 findProductIdToUseForOptionPrice(option) { 4367 // try to find a product for a complete selection 4368 const attributeId = this.findAttributeByOptionId(option.id); 4369 const optionSelection = Object.assign({}, this.selectedValues, {[attributeId]: option.id}); 4370 const matchingSimpleIndex = this.calculateSimpleIndexForFullSelection(optionSelection); 4371 // if there is no complete selection, use the cheapest product for the option 4372 return matchingSimpleIndex || this.findCheapestProductForPartialSelection(optionSelection); 4373 }, 4374 getAttributeOptionLabel(option) { 4375 const optionProduct = this.findProductIdToUseForOptionPrice(option); 4376 if ((! optionProduct) || (optionProduct === this.productIndex)) { 4377 return option.label; 4378 } 4379 4380 const currentPrice = this.getOptionPriceAdjustmentBasePrice(); 4381 4382 if (this.optionConfig.optionPrices[optionProduct]) { 4383 const optionPrice = this.optionConfig.optionPrices[optionProduct].finalPrice.amount; 4384 if (optionPrice !== currentPrice){ 4385 return option.label + ' (' + hyva.formatPrice(optionPrice - currentPrice, true) + ')'; 4386 } 4387 } 4388 return option.label; 4389 }, 4390 getOptionPriceAdjustmentBasePrice() { 4391 if (this.optionConfig.optionPrices[this.productIndex]) { 4392 return this.optionConfig.optionPrices[this.productIndex].finalPrice.amount 4393 } 4394 const cheapestForSelection = this.findCheapestProductForPartialSelection(this.selectedValues); 4395 return this.optionConfig.optionPrices[cheapestForSelection] 4396 ? this.optionConfig.optionPrices[cheapestForSelection].finalPrice.amount 4397 : this.optionConfig.prices.finalPrice.amount; // default price if no option selection 4398 }, 4399 changeOption(optionId, value) { 4400 this.selectedValues[optionId] = value; 4401 this.findSimpleIndex(); 4402 this.findAllowedAttributeOptions(); 4403 this.updatePrices(); 4404 this.updateGallery(); 4405 this.updateProductInfoMain(); 4406 this.updateStock(); 4407 this.updateDot(value); 4408 this.updateReturnUrl(value); 4409 this.notifyViewItemAction(); 4410 this.updateSize(); 4411 window.dispatchEvent( 4412 new CustomEvent( 4413 'configurable-selection-changed', 4414 { 4415 detail: { 4416 productId: this.productId, 4417 optionId: this.optionId, 4418 value: this.value, 4419 productIndex: this.productIndex, 4420 selectedValues: this.selectedValues 4421 } 4422 } 4423 ) 4424 ); 4425 }, 4426 notifyViewItemAction() { 4427 let self = this; 4428 window.dataLayer ? 4429 self.notifyViewItem() : 4430 document.addEventListener("ga:inited", function () { 4431 self.notifyViewItem() 4432 }); 4433 }, 4434 notifyViewItem() { 4435 let product, 4436 dlUpdate = { 4437 'event': 'view_item', 4438 'ecommerce': { 4439 'items': [] 4440 } 4441 } 4442 4443 if (this.childs[this.productIndex] && !this.viewItemSend) { 4444 product = this.childs[this.productIndex]; 4445 dlUpdate.ecommerce.items.push({ 4446 'item_id': formatString(product.item_id), 4447 'item_name': formatString(product.item_name), 4448 'item_brand': formatString(product.item_brand), 4449 'item_category': formatString(product.item_category), 4450 'item_category2': formatString(product.item_category2), 4451 'item_category3': formatString(product.item_category3), 4452 'item_category4': formatString(product.item_category4), 4453 'item_variant': formatString(product.item_variant), 4454 'item_category5': formatString(product.item_category5), 4455 'price': formatString(product.price), 4456 'currency': formatString(product.currency), 4457 'quantity': formatString(product.quantity), 4458 'item_list_name': formatString(product.item_list_name), 4459 'index': formatString('') 4460 }); 4461 4462 window.dataLayer.push({ecommerce: null});
4463 window.dataLayer.push(dlUpdate); 4464 this.viewItemSend = true; 4465 } 4466 }, 4467 calculateIsMinimalPrice() { 4468 return ( 4469 this.selectedValues.filter(value => !!value).length < 4470 Object.keys(this.optionConfig.attributes).length 4471 ); 4472 }, 4473 updatePrices() { 4474 const value = this.productIndex ? 4475 this.optionConfig.optionPrices[this.productIndex] : 4476 this.optionConfig.prices; 4477 window.dispatchEvent( 4478 new CustomEvent( 4479 "update-prices-" + this.productId, 4480 { 4481 detail: Object.assign( 4482 value, 4483 { isMinimalPrice: this.calculateIsMinimalPrice() } 4484 ) 4485 } 4486 ) 4487 ); 4488 }, 4489 convertStringToHTML(str, id) { 4490 let parser = new DOMParser(); 4491 let doc = parser.parseFromString(str, 'text/html'); 4492 return doc.getElementById(id); 4493 }, 4494 updateDot(itemId) { 4495 setTimeout(function () { 4496 if (document.getElementsByClassName('swatch-dot-' + itemId).length) { 4497 let swatchColor = document.getElementById('swatch-color'); 4498 4499 let swatchDots = document.getElementsByClassName('swatch-dot'); 4500 for (let i = 0; i < swatchDots.length; i++) { 4501 swatchDots[i].style.display = 'none'; 4502 4503 if (swatchColor) { 4504 swatchColor.textContent = ''; 4505 } 4506 } 4507 4508 let swatchChildDots = document.getElementsByClassName('swatch-dot-' + itemId); 4509 for (let i = 0; i < swatchChildDots.length; i++) { 4510 swatchChildDots[i].style.display = ''; 4511 4512 if (swatchColor && swatchChildDots[i].getAttribute('title')) { 4513 swatchColor.textContent = swatchChildDots[i].getAttribute('title'); 4514 } 4515 } 4516 } 4517 }, 750); 4518 }, 4519 updateReturnUrl(value) { 4520 let url = window.location.href; 4521 let split = url.split('='); 4522 if (split[1] && value) { 4523 if (document.getElementById('return_url_with_message')) { 4524 document.getElementById('return_url_with_message').value = split[0] + '=' + value; 4525 } 4526 } 4527 }, 4528 updateInputHidden() { 4529 if (document.getElementById('selected_simple_product')) { 4530 document.getElementById('selected_simple_product').value = this.productIndex; 4531 } 4532 }, 4533 updateStock() { 4534 let stockStatuses = document.getElementsByClassName('stock-status'); 4535 for (let i = 0; i < stockStatuses.length; i++) { 4536 stockStatuses[i].style.display = 'none'; 4537 } 4538 4539 let stockStatusId = 'stock-status-' + this.productIndex; 4540 if (document.getElementById(stockStatusId)) { 4541 document.getElementById(stockStatusId).style.display = ''; 4542 } 4543 }, 4544 updateProductInfoMain() { 4545 if (this.productIndex === undefined) { 4546 return; 4547 } 4548 4549 this.isLoading = true; 4550 4551 fetch('/texdecor_catalog/ajax/getproductinfomain', { 4552 method: "POST", 4553 mode: "cors", 4554 credentials: "include", 4555 headers: { 4556 contentType: "application/x-www-form-urlencoded; charset=UTF-8", 4557 }, 4558 body: new URLSearchParams({ 4559 form_key: hyva.getFormKey(), 4560 params: this.productIndex, 4561 uenc: btoa(window.location.href) 4562 }) 4563 }) 4564 .then((response) => { 4565 if (response.ok) { 4566 return response.json(); 4567 } else { 4568 console.warn("La requête POST a échoué", response); 4569 } 4570 }) 4571 .then(data => { 4572 this.isLoading = false;
4573 4574 if (data) { 4575 if (data.error) { 4576 console.error(data.message); 4577 } else { 4578 let descriptionBlock = document.getElementById('product-description-child'); 4579 if (descriptionBlock) { 4580 descriptionBlock.replaceWith(this.convertStringToHTML(data.description, 'product-description-child')); 4581 } 4582 4583 let attributesBlock = document.getElementById('product-attributes-child'); 4584 if (attributesBlock) { 4585 attributesBlock.replaceWith(this.convertStringToHTML(data.attributes, 'product-attributes-child')); 4586 } 4587 4588 let blockTsTitle = document.getElementById('trustedshops.product.title'); 4589 if (blockTsTitle) { 4590 blockTsTitle.innerHTML = data.blockTsTitle; 4591 } 4592 4593 let blockTsTab = document.getElementById('contain.trustedshops.review.tab'); 4594 if (blockTsTab) { 4595 blockTsTab.innerHTML = data.blockTsTab; 4596 } 4597 4598 let collection = document.getElementById('collection_name'); 4599 if (collection && data.collection && data.collection !== '') { 4600 collection.innerText = data.collection; 4601 } 4602 } 4603 } 4604 }) 4605 .catch((error) => { 4606 console.error(error); 4607 }); 4608 }, 4609 updateGallery () { 4610 const value = this.productIndex ? 4611 this.optionConfig.images[this.productIndex] : 4612 Object.values(this.optionConfig.images)[0]; 4613 4614 const isNew = this.productIndex 4615 ? this.optionConfig.isNew[this.productIndex] 4616 : false; 4617 4618 const isEndOfSeries = this.productIndex 4619 ? this.optionConfig.isEndOfSeries[this.productIndex] 4620 : false; 4621 4622 const isSales = this.productIndex 4623 ? this.optionConfig.isSales[this.productIndex] 4624 : false; 4625 4626 if (value) { 4627 value.sort(function (a, b) { 4628 return (a.position > b.position) ? 1 : ((b.position > a.position) ? -1 : 0); 4629 }); 4630 4631 window.dispatchEvent( 4632 new CustomEvent( 4633 "update-gallery", 4634 { detail: value } 4635 ) 4636 ); 4637 } 4638 4639 window.dispatchEvent( 4640 new CustomEvent( 4641 "update-is-new", 4642 { detail: isNew } 4643 ) 4644 ); 4645 4646 window.dispatchEvent( 4647 new CustomEvent( 4648 "update-is-end-of-series", 4649 { detail: isEndOfSeries } 4650 ) 4651 ); 4652 4653 window.dispatchEvent( 4654 new CustomEvent( 4655 "update-is-sales", 4656 { detail: isSales } 4657 ) 4658 ); 4659 }, 4660 onGetCartData(data) { 4661 this.preselectCartItems(data); 4662 this.preselectQuerystringItems(); 4663 this.preselectLocationHashItems(); 4664 }, 4665 preselectCartItems(data) { 4666 // pre-select options based on cart data for current (quote) itemId 4667 const cart = data && data.cart; 4668 if (cart && cart.items) { 4669 const cartItem = cart.items.find((item) => { 4670 return ( 4671 item.item_id === this.itemId 4672 && item.product_id === this.productId 4673 ) 4674 }); 4675 if (cartItem && cartItem.options && cartItem.options.length) { 4676 cartItem.options.map(option => { 4677 this.changeOption(option.option_id, option.option_value); 4678 }) 4679 } 4680 } 4681 }, 4682 preselectQuerystringItems() { 4683 // pre-select option like ?size=167 4684 const urlQueryParams = new URLSearchParams(window.location.search.replace('?','')); 4685 Object.values(this.optionConfig.attributes).map(attribute => { 4686 urlQueryParams.get(attribute.code) && 4687 this.changeOption(attribute.id, urlQueryParams.get(attribute.code)); 4688 }); 4689 }, 4690 preselectLocationHashItems() { 4691 // pre-select option like #144=167 4692 const urlHashParams = new URLSearchParams(window.location.hash.replace('#','')); 4693 Object.values(this.optionConfig.attributes).map(attribute => { 4694 urlHashParams.get(attribute.id) && 4695 this.changeOption(attribute.id, urlHashParams.get(attribute.id)); 4696 }); 4697 }, 4698 updateSize() { 4699 const productSize = this.productIndex 4700 ? this.optionConfig.size[this.productIndex] 4701 : null; 4702 4703 window.dispatchEvent( 4704 new CustomEvent( 4705 "update-product-size", 4706 { detail: productSize } 4707 ) 4708 ) 4709 } 4710 } 4711 } 4712 4713</script>
vendor: 1 bytes, line 4713
4713
4714<script> 4715 'use strict'; 4716 4717 (() => { 4718 const equalizeButtonWidths = (buttons) => { 4719 const buttonList = buttons.querySelectorAll('[data-element="link"], [data-element="empty_link"]'); 4720 let buttonMinWidth = 0; 4721 4722 buttonList.forEach(button => { 4723 const buttonWidth = button.offsetWidth; 4724 4725 if (buttonWidth > buttonMinWidth) { 4726 buttonMinWidth = buttonWidth; 4727 } 4728 }); 4729 4730 buttonList.forEach(button => { 4731 button.style.minWidth = `${buttonMinWidth}px`; 4732 }); 4733 }; 4734 4735 window.addEventListener('DOMContentLoaded', () => { 4736 document.querySelectorAll('[data-content-type="buttons"][data-same-width="true"]').forEach(buttons => { 4737 equalizeButtonWidths(buttons); 4738 }); 4739 }); 4740 })(); 4741</script>
vendor: 1 bytes, line 4741
4741
4742<script> 4743 'use strict'; 4744 4745 (() => { 4746 const initCarousels = (elements) => { 4747 if (!Glider) { 4748 return; 4749 } 4750 4751 const initProductCarousel = (carousel) => { 4752 const gliderElement = carousel.querySelector('[data-role="glider-content"]'); 4753 4754 if (!gliderElement) { 4755 return; 4756 } 4757 4758 const gliderDots = carousel.querySelector('.glider-dots'); 4759 const gliderPrev = carousel.querySelector('.glider-prev'); 4760 const gliderNext = carousel.querySelector('.glider-next'); 4761 4762 const glider = new Glider(gliderElement, { 4763 slidesToShow: 2, 4764 slidesToScroll: 2, 4765 scrollLock: true, 4766 draggable: true, 4767 dragVelocity: 2.5, 4768 dots: gliderDots, 4769 arrows: { 4770 prev: gliderPrev, 4771 next: gliderNext, 4772 }, 4773 responsive: [ 4774 { 4775 breakpoint: 768, 4776 settings: { 4777 slidesToShow: 3, 4778 slidesToScroll: 3, 4779 } 4780 }, 4781 { 4782 breakpoint: 1024, 4783 settings: { 4784 slidesToShow: 4, 4785 slidesToScroll: 4, 4786 } 4787 }, 4788 ], 4789 }); 4790 4791 carousel.classList.remove('overflow-x-scroll'); 4792 gliderPrev.classList.remove('hidden'); 4793 gliderNext.classList.remove('hidden'); 4794 4795 if (carousel.dataset.autoplay !== 'false') { 4796 gliderAutoplay( 4797 glider, 4798 carousel.dataset.autoplaySpeed, 4799 carousel.dataset.infiniteLoop 4800 ); 4801 } 4802 }; 4803 4804 const initSliderCarousel = (slider) => { 4805 slider.innerHTML = `<div data-role="glider-content">${slider.innerHTML}</div>`; 4806 slider.classList.add('glider-contain'); 4807 4808 slider.insertAdjacentHTML( 4809 'beforeend', 4810 '\u000A\u003Cdiv\u0020class\u003D\u0022carousel\u002Dnav\u0020flex\u0020items\u002Dcenter\u0020justify\u002Dcenter\u0020flex\u002D1\u0020p\u002D4\u0022\u003E\u000A\u0020\u0020\u0020\u0020\u003Cbutton\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020aria\u002Dlabel\u003D\u0022Pr\u00E9c\u00E9dent\u0022\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020class\u003D\u0022glider\u002Dprev\u0020w\u002D8\u0020h\u002D8\u0020mr\u002D1\u0020text\u002Dblack\u0020rounded\u002Dfull\u0020outline\u002Dnone\u0020focus\u003Aoutline\u002Dnone\u0020hidden\u0022\u003E\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u003Csvg\u0020viewBox\u003D\u00220\u00200\u00201024\u00201024\u0022\u003E\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u003Cpath\u0020class\u003D\u0022path1\u0022\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020d\u003D\u0022M716.8\u00201024c6.552\u00200\u002013.102\u002D2.499\u002018.101\u002D7.499\u00209.998\u002D9.997\u00209.998\u002D26.206\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u00200\u002D36.203l\u002D442.698\u002D442.698\u0020442.698\u002D442.699c9.998\u002D9.997\u00209.998\u002D26.206\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u00200\u002D36.203s\u002D26.206\u002D9.998\u002D36.203\u00200l\u002D460.8\u0020460.8c\u002D9.998\u00209.997\u002D9.998\u002026.206\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u00200\u002036.203l460.8\u0020460.8c5\u00205\u002011.55\u00207.499\u
4810002018.102\u00207.499z\u0022\u003E\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u003C\u002Fpath\u003E\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u003C\u002Fsvg\u003E\u000A\u0020\u0020\u0020\u0020\u003C\u002Fbutton\u003E\u000A\u0020\u0020\u0020\u0020\u003Cdiv\u0020role\u003D\u0022tablist\u0022\u0020class\u003D\u0022glider\u002Ddots\u0020select\u002Dnone\u0020flex\u0020flex\u002Dwrap\u0020mx\u002D1\u0020justify\u002Dcenter\u0020p\u002D0\u0020focus\u003Aoutline\u002Dnone\u0022\u003E\u003C\u002Fdiv\u003E\u000A\u0020\u0020\u0020\u0020\u003Cbutton\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020aria\u002Dlabel\u003D\u0022Continuer\u0022\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020class\u003D\u0022glider\u002Dnext\u0020w\u002D8\u0020h\u002D8\u0020ml\u002D1\u0020text\u002Dblack\u0020rounded\u002Dfull\u0020outline\u002Dnone\u0020focus\u003Aoutline\u002Dnone\u0020hidden\u0022\u003E\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u003Csvg\u0020viewBox\u003D\u00220\u00200\u00201024\u00201024\u0022\u003E\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u003Cpath\u0020class\u003D\u0022path1\u0022\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020d\u003D\u0022M256\u00201024c\u002D6.552\u00200\u002D13.102\u002D2.499\u002D18.101\u002D7.499\u002D9.998\u002D9.997\u002D9.998\u002D26.206\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u00200\u002D36.203l442.698\u002D442.698\u002D442.698\u002D442.699c\u002D9.998\u002D9.997\u002D9.998\u002D26.206\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u00200\u002D36.203s26.206\u002D9.998\u002036.203\u00200l460.8\u0020460.8c9.998\u00209.997\u00209.998\u002026.206\u00200\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u002036.203l\u002D460.8\u0020460.8c\u002D5\u00205\u002D11.55\u00207.499\u002D18.102\u00207.499z\u0022\u003E\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u003C\u002Fpath\u003E\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u003C\u002Fsvg\u003E\u000A\u0020\u0020\u0020\u0020\u003C\u002Fbutton\u003E\u000A\u003C\u002Fdiv\u003E\u000A' 4811 ); 4812 4813 const gliderElement = slider.querySelector('[data-role="glider-content"]'); 4814 const gliderDots = slider.querySelector('.glider-dots'); 4815 const gliderPrev = slider.querySelector('.glider-prev'); 4816 const gliderNext = slider.querySelector('.glider-next'); 4817 4818 const glider = new Glider(gliderElement, { 4819 slidesToShow: 1, 4820 slidesToScroll: 1, 4821 scrollLock: true, 4822 scrollLockDelay: 250, 4823 draggable: true, 4824 dragVelocity: 2.5, 4825 dots: gliderDots, 4826 arrows: { 4827 prev: gliderPrev, 4828 next: gliderNext, 4829 }, 4830 }); 4831 4832 slider.classList.add('glider-initialized'); 4833 if (slider.dataset.showArrows === 'true') { 4834 gliderPrev.classList.remove('hidden'); 4835 gliderNext.classList.remove('hidden'); 4836 } 4837 4838 if (slider.dataset.autoplay !== 'false') { 4839 gliderAutoplay( 4840 glider, 4841 slider.dataset.autoplaySpeed, 4842 slider.dataset.infiniteLoop 4843 ); 4844 } 4845 }; 4846 4847 const gliderAutoplay = (glider, milliseconds, loop) => { 4848 const pagesCount = glider.track.childElementCount; 4849 let slideTimeout = null; 4850 let nextIndex = 1; 4851 let paused = false; 4852 4853 const slide = () => { 4854 slideTimeout = setTimeout( 4855 () => { 4856 if (loop && nextIndex >= pagesCount) { 4857 nextIndex = 0; 4858 } 4859 glider.scrollItem(nextIndex); 4860 }, 4861 parseInt(milliseconds) 4862 ); 4863 }; 4864 4865 glider.ele.addEventListener('glider-animated', () => { 4866 nextIndex = glider.slide + glider.opt.slidesToScroll; 4867 window.clearInterval(slideTimeout); 4868 if (!paused && (loop || nextIndex < pagesCount)) { 4869 slide(); 4870 } 4871 }); 4872 4873 const pause = () => { 4874 if (!paused) { 4875 clearInterval(slideTimeout); 4876 paused = true; 4877 } 4878 }; 4879 4880 const unpause = () => { 4881 if (paused) { 4882 slide(); 4883 paused = false;
4884 } 4885 }; 4886 4887 glider.ele.parentElement.addEventListener('mouseover', pause, {passive: true}); 4888 glider.ele.parentElement.addEventListener('touchstart', pause, {passive: true}); 4889 glider.ele.parentElement.addEventListener('mouseout', unpause, {passive: true}); 4890 glider.ele.parentElement.addEventListener('touchend', unpause, {passive: true}); 4891 4892 slide(); 4893 }; 4894 4895 elements.forEach(element => { 4896 if (element.dataset.contentType === 'products') { 4897 initProductCarousel(element); 4898 } 4899 if (element.dataset.contentType === 'slider') { 4900 initSliderCarousel(element); 4901 } 4902 }); 4903 }; 4904 4905 window.addEventListener('DOMContentLoaded', () => { 4906 const carouselElements = document.querySelectorAll( 4907 `[data-content-type="products"][data-appearance="carousel"], 4908 [data-content-type="slider"]` 4909 ); 4910 4911 if (carouselElements.length > 0) { 4912 const script = document.createElement('script'); 4913 script.type = 'text/javascript'; 4914 4915 script.addEventListener('load', () => { 4916 initCarousels(carouselElements); 4917 }); 4918 4919 script.src = 'https\u003A\u002F\u002Fwww.we\u002Dwall.com\u002Fstatic\u002Fversion1786625269\u002Ffrontend\u002FTexdecor\u002Fdefault\u002Ffr_FR\u002FMagento_PageBuilder\u002Fjs\u002Fglider.min.js'; 4920 document.head.appendChild(script); 4921 } 4922 }); 4923 })(); 4924</script>
vendor: 1 bytes, line 4924
4924
4925<script> 4926 'use strict'; 4927 4928 (() => { 4929 const initMaps = (elements) => { 4930 const renderMap = (element) => { 4931 const dataLocations = element.dataset.locations; 4932 4933 // Hide map if no locations set 4934 if (!dataLocations || dataLocations === '[]') { 4935 element.classList.add('hidden'); 4936 return; 4937 } 4938 4939 const map = new google.maps.Map( 4940 element, 4941 getMapOptions( 4942 element.dataset.showControls !== 'true', 4943 element.dataset.showControls === 'true' 4944 ) 4945 ); 4946 const locations = JSON.parse(dataLocations); 4947 const latitudeLongitudeBounds = new google.maps.LatLngBounds(); 4948 const bounds = []; 4949 4950 locations.forEach(location => { 4951 const position = { 4952 lat: parseFloat(location.position.latitude), 4953 lng: parseFloat(location.position.longitude), 4954 }; 4955 bounds.push(position); 4956 4957 const infowindow = new google.maps.InfoWindow({ 4958 content: getInfoWindowContent(location), 4959 }); 4960 const marker = new google.maps.Marker({ 4961 position: position, 4962 map, 4963 title: location.location_name, 4964 }); 4965 4966 marker.addListener('click', () => { 4967 infowindow.open(map, marker); 4968 }); 4969 }); 4970 4971 // Set bounds if multiple locations 4972 if (bounds.length > 1) { 4973 bounds.forEach(function (bound) { 4974 latitudeLongitudeBounds.extend(bound); 4975 }); 4976 map.fitBounds(latitudeLongitudeBounds); 4977 } 4978 4979 // Center if single location 4980 if (bounds.length === 1) { 4981 map.setCenter(bounds[0]); 4982 } 4983 }; 4984 4985 const getMapOptions = (disableDefaultUI, mapTypeControl) => { 4986 const style = ''; 4987 return { 4988 zoom: 8, 4989 scrollwheel: false, 4990 disableDoubleClickZoom: false, 4991 mapTypeControlOptions: { 4992 style: google.maps.MapTypeControlStyle.DEFAULT, 4993 }, 4994 styles: style ? JSON.parse(style) : [], 4995 disableDefaultUI: disableDefaultUI, 4996 mapTypeControl: mapTypeControl, 4997 }; 4998 }; 4999 5000 const getInfoWindowContent = (location) => { 5001 const title = location.location_name ? 5002 `<h3 class="text-2xl font-medium text-gray-900 title-font">${location.location_name}</h3>` : ''; 5003 const comment = location.comment ? `<p class="px-1 pt-3 text-primary">${location.comment}</p>` : ''; 5004 const phone = location.phone ? `<p class="px-1 pt-3 text-primary">Phone: ${location.phone}</p>` : ''; 5005 const street = location.address ? `${location.address}<br/>` : ''; 5006 const city = location.city ? `${location.city}<br/>` : ''; 5007 const state = location.state ? `${location.state}<br/>` : ''; 5008 const zipCode = location.zipcode ? `${location.zipcode}<br/>` : ''; 5009 const country = location.country ? location.country : ''; 5010 5011 return `<div> 5012 ${title} 5013 ${comment} 5014 ${phone} 5015 <p class="px-1 pt-3 text-primary"> 5016 ${street} 5017 ${city} 5018 ${state} 5019 ${zipCode} 5020 ${country} 5021 </p> 5022 </div>`; 5023 }; 5024 5025 const hideAllMaps = () => { 5026 document.querySelectorAll('[data-content-type="map"]').forEach(element => { 5027 element.classList.add('hidden'); 5028 }); 5029 }; 5030 5031 window.gm_authFailure = () => { 5032 hideAllMaps(); 5033 }; 5034 5035 if (typeof google.maps === 'undefined') { 5036 hideAllMaps(); 5037 return; 5038 } 5039
5040 elements.forEach(element => { 5041 if (element.dataset.contentType === 'map') { 5042 renderMap(element); 5043 } 5044 }); 5045 }; 5046 5047 window.addEventListener('DOMContentLoaded', () => { 5048 const mapElements = document.querySelectorAll('[data-content-type="map"]'); 5049 5050 if (mapElements.length > 0) { 5051 const script = document.createElement('script'); 5052 script.type = 'text/javascript'; 5053 5054 script.addEventListener('load', () => { 5055 initMaps(mapElements); 5056 }); 5057 5058 script.src = 'https\u003A\u002F\u002Fmaps.googleapis.com\u002Fmaps\u002Fapi\u002Fjs\u003Fv\u003D3\u0026key\u003D'; 5059 document.head.appendChild(script); 5060 } 5061 }); 5062 })(); 5063</script>
vendor: 1 bytes, line 5063
5063
5064<script> 5065 'use strict'; 5066 5067 (() => { 5068 const initParallaxImage = (element) => { 5069 if (!window.jarallax) { 5070 return; 5071 } 5072 5073 element.classList.add('jarallax'); 5074 element.dataset.jarallax = ''; 5075 const parallaxSpeed = parseFloat(element.dataset.parallaxSpeed) || 0.5; 5076 const elementStyle = window.getComputedStyle(element); 5077 5078 window.jarallax(element, { 5079 imgPosition: elementStyle.backgroundPosition || '50% 50%', 5080 imgRepeat: elementStyle.backgroundRepeat || 'no-repeat', 5081 imgSize: elementStyle.backgroundSize || 'cover', 5082 speed: parallaxSpeed, 5083 }); 5084 }; 5085 5086 const initVideoBackground = (element) => { 5087 if (!window.jarallax) { 5088 return; 5089 } 5090 5091 let slider = null; 5092 5093 if (element.classList.contains('pagebuilder-slide-wrapper')) { 5094 const viewportElement = document.createElement('div'); 5095 slider = element.closest('[data-content-type=slider]'); 5096 viewportElement.classList.add('jarallax-viewport-element'); 5097 element.dataset.elementInViewport = '.jarallax-viewport-element'; 5098 element.appendChild(viewportElement); 5099 } 5100 5101 element.classList.add('jarallax'); 5102 element.dataset.jarallax = ''; 5103 const parallaxSpeed = parseFloat(element.dataset.parallaxSpeed) || 0.5; 5104 5105 window.jarallax(element, { 5106 imgSrc: element.dataset.videoFallbackSrc, 5107 speed: parallaxSpeed, 5108 videoLoop: element.dataset.videoLoop, 5109 videoPlayOnlyVisible: element.dataset.videoPlayOnlyVisible, 5110 videoLazyLoading: element.dataset.videoLazyLoad, 5111 disableVideo: false, 5112 elementInViewport: element.dataset.elementInViewport && 5113 element.querySelector(element.dataset.elementInViewport), 5114 }); 5115 5116 if (slider) { 5117 if (slider.dataset.afterChangeIsSet) { 5118 return; 5119 } 5120 5121 slider.addEventListener('glider-loaded', () => { 5122 slider.querySelectorAll('.jarallax').forEach(videoSlide => { 5123 videoSlide.jarallax && videoSlide.jarallax.onScroll(); 5124 }); 5125 }); 5126 5127 slider.addEventListener('glider-animated', () => { 5128 slider.querySelectorAll('.jarallax').forEach(videoSlide => { 5129 videoSlide.jarallax && videoSlide.jarallax.onScroll(); 5130 }); 5131 }); 5132 5133 slider.dataset.afterChangeIsSet = true; 5134 } 5135 }; 5136 5137 window.addEventListener('DOMContentLoaded', () => { 5138 const parallaxImageElements = document.querySelectorAll( 5139 `[data-content-type="row"][data-background-type="image"][data-enable-parallax="1"], 5140 [data-content-type="row"] > [data-background-type="image"][data-enable-parallax="1"]` 5141 ); 5142 5143 const videoBackgroundsElements = document.querySelectorAll( 5144 `[data-content-type="row"][data-background-type="video"][data-enable-parallax="1"], 5145 [data-content-type="row"] > [data-background-type="video"][data-enable-parallax="1"], 5146 [data-content-type="banner"] [data-background-type="video"], 5147 [data-content-type="slide"] [data-background-type="video"]` 5148 ); 5149 5150 if (parallaxImageElements.length > 0 || videoBackgroundsElements.length > 0) { 5151 const jarallaxScript = document.createElement('script'); 5152 jarallaxScript.type = 'text/javascript'; 5153 5154 jarallaxScript.addEventListener('load', () => { 5155 parallaxImageElements.forEach(row => { 5156 initParallaxImage(row); 5157 }); 5158 5159 const jarallaxVideoScript = document.createElement('script'); 5160 jarallaxVideoScript.type = 'text/javascript'; 5161 5162 jarallaxVideoScript.addEventListener('load', () => {
5163 videoBackgroundsElements.forEach(element => { 5164 initVideoBackground(element); 5165 }); 5166 }); 5167 5168 jarallaxVideoScript.src = 'https\u003A\u002F\u002Fwww.we\u002Dwall.com\u002Fstatic\u002Fversion1786625269\u002Ffrontend\u002FTexdecor\u002Fdefault\u002Ffr_FR\u002FMagento_PageBuilder\u002Fjs\u002Fjarallax\u002Dvideo.min.js'; 5169 document.head.appendChild(jarallaxVideoScript); 5170 }); 5171 5172 jarallaxScript.src = 'https\u003A\u002F\u002Fwww.we\u002Dwall.com\u002Fstatic\u002Fversion1786625269\u002Ffrontend\u002FTexdecor\u002Fdefault\u002Ffr_FR\u002FMagento_PageBuilder\u002Fjs\u002Fjarallax.min.js'; 5173 document.head.appendChild(jarallaxScript); 5174 } 5175 }); 5176 })(); 5177</script>
vendor: 1 bytes, line 5177
5177
5178<script> 5179 'use strict'; 5180 5181 (() => { 5182 const applyShowOnHover = (element) => { 5183 const showOverlayOnHover = (element) => { 5184 const overlay = element.querySelector('.pagebuilder-overlay'); 5185 const color = overlay.dataset.overlayColor; 5186 5187 element.addEventListener('mouseover', () => { 5188 overlay.style.backgroundColor = color; 5189 }); 5190 element.addEventListener('mouseout', () => { 5191 overlay.style.backgroundColor = 'transparent'; 5192 }); 5193 }; 5194 5195 const showButtonOnHover = (element) => { 5196 const button = element.querySelector('.pagebuilder-banner-button'); 5197 5198 element.addEventListener('mouseover', () => { 5199 button.style.opacity = '1'; 5200 button.style.visibility = 'visible'; 5201 }); 5202 element.addEventListener('mouseout', () => { 5203 button.style.opacity = '0'; 5204 button.style.visibility = 'hidden'; 5205 }); 5206 }; 5207 5208 if (element.dataset.showOverlay === 'hover') { 5209 showOverlayOnHover(element); 5210 } 5211 if (element.dataset.showButton === 'hover') { 5212 showButtonOnHover(element); 5213 } 5214 }; 5215 5216 window.addEventListener('DOMContentLoaded', () => { 5217 document.querySelectorAll('[data-content-type="banner"],[data-content-type="slider"]').forEach(element => { 5218 applyShowOnHover(element); 5219 }); 5220 }); 5221 })(); 5222</script>
vendor: 1 bytes, line 5222
5222
5223<script> 5224 'use strict'; 5225 5226 (() => { 5227 document.querySelectorAll('[data-content-type="tab-item"]').forEach(tabItem => { 5228 tabItem.setAttribute('x-show', `tab === '${tabItem.id}'`); 5229 }); 5230 5231 document.querySelectorAll('[data-content-type="tabs"]').forEach(tab => { 5232 const defaultActiveTab = parseInt(tab.dataset.activeTab) || 0; 5233 5234 tab.querySelectorAll('.tab-header').forEach((tabHeader, index) => { 5235 const tabLink = tabHeader.querySelector('a'); 5236 const tabId = tabLink.getAttribute('href').replace('#', ''); 5237 5238 tabHeader.setAttribute(':class', `{ 'active': tab === '${tabId}' }`); 5239 tabLink.setAttribute('x-on:click.prevent', `tab = '${tabId}'`); 5240 5241 if (index === defaultActiveTab) { 5242 tab.setAttribute('x-data', `{ tab: '${tabId}' }`); 5243 } 5244 }); 5245 }); 5246 })(); 5247</script>
vendor: 1 bytes, line 5247
5247
5248<script> 5249 function showMore(e) { 5250 let target = e.target; 5251 let parent = target.parentNode; 5252 let overview = parent.querySelectorAll('.overview')[0]; 5253 let content = parent.querySelectorAll('.overview-content')[0]; 5254 5255 let height = content.getBoundingClientRect().height + 'px'; 5256 let maxHeight = '70px'; 5257 5258 if (overview.classList.contains('active')) { 5259 overview.style.maxHeight = maxHeight; 5260 } else { 5261 overview.style.maxHeight = height; 5262 } 5263 5264 overview.classList.toggle('active'); 5265 target.classList.toggle('active'); 5266 5267 if (target.classList.contains('active')) { 5268 target.textContent = 'Voir moins'; 5269 } else { 5270 target.textContent = 'Lire la suite'; 5271 } 5272 } 5273</script>
vendor: 1 bytes, line 5273
5273
5274<script> 5275 tarteaucitron.user.gtagUa = 'GTM-TBK2B7B'; 5276 tarteaucitron.user.gtagMore = function () { /* add here your optionnal gtag() */ }; 5277 (tarteaucitron.job = tarteaucitron.job || []).push('gtag'); 5278</script>
5278 5279</body> 5280</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.