1<!DOCTYPE html> 2<html lang="en"> 3 4<head> 5<!-- ============================================================ 6 COPYWRITER BY SEO FEBRYPARKER 7============================================================ --> 8 <title>Rill HONDATOTO : Pusat Globalisasi Bandar Toto Slot Resmi Dengan Ratusan Permainan Slot Gacor</title> 9 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 10 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 11 <meta charset="utf-8"> 12 <meta name="viewport" content="width=device-width, initial-scale=1"> 13 <meta name="description" content="Rill HONDATOTO menjadi simpul global permainan digital dengan khazanah ratusan slot lintas provider, antarmuka adaptif, serta pilihan hiburan bandar toto yang terus diperbarui."> 14 <meta name="robots" content="index, follow, nosnippet"> 15 <meta property="og:url" content="https://www.eder.info/"> 16 <meta property="og:title" content="Rill HONDATOTO : Pusat Globalisasi Bandar Toto Slot Resmi Dengan Ratusan Permainan Slot Gacor"> 17 <meta property="og:description" content="Rill HONDATOTO menjadi simpul global permainan digital dengan khazanah ratusan slot lintas provider, antarmuka adaptif, serta pilihan hiburan bandar toto yang terus diperbarui."> 18 <meta property="og:site_name" content="HONDATOTO"> 19 <meta property="og:image" content="https://veldrive.com/LTWfp312/BANNER-HONDATOTO/Pusat%20Globalisasi%20Bandar%20Toto%20Slot%20Resmi%20Dengan%20Ratusan%20Permainan%20Slot%20Gacor.png?updatedAt=1779457881125"> 20 <link rel="shortcut icon" type="image/x-icon" media="all" href="https://veldrive.com/dPH2zzXU/FAVICON%209999/hondatoto-favicon.avif?updatedAt=1777017834099" /> 21 <link rel="canonical" href="https://www.eder.info/" /> 22 <link rel="amphtml" href="https://ronaakar.hondapamixe.surf" /> 23 <link rel="alternate" media="only screen and (max-width: 640px)" href="https://www.eder.info/" /> 24 <link rel="alternate" href="https://ronaakar.hondapamixe.surf"> 25 <link rel="alternate" href="https://ronaakar.hondapamixe.surf" hreflang="id"> 26 <link rel="alternate" href="https://ronaakar.hondapamixe.surf" hreflang="en"> 27 <link rel="alternate" href="https://ronaakar.hondapamixe.surf" hreflang="en"> 28 <link rel="alternate" href="https://ronaakar.hondapamixe.surf" hreflang="x-default"> 29 <link rel="alternate" hreflang="id-ID" href="https://ronaakar.hondapamixe.surf" /> 30 <link rel="alternate" hreflang="en-US" href="https://ronaakar.hondapamixe.surf" /> 31 <link rel="alternate" hreflang="en-SG" href="https://ronaakar.hondapamixe.surf" /> 32 <!-- GOOGLE CODE VERIFICATION--> 33 34
34<script type="application/ld+json"> 35 { 36 "@context" : "http://schema.org", 37 "@type" : "Product", 38 "brand" : "HONDATOTO", 39 "description" : "Rill HONDATOTO menjadi simpul global permainan digital dengan khazanah ratusan slot lintas provider, antarmuka adaptif, serta pilihan hiburan bandar toto yang terus diperbarui.", 40 "image" : "https://veldrive.com/dPH2zzXU/FAVICON%209999/hondatoto-favicon.avif?updatedAt=1777017834099", 41 "name" : "Rill HONDATOTO : Pusat Globalisasi Bandar Toto Slot Resmi Dengan Ratusan Permainan Slot Gacor", 42 "category" : "/doors-joinery/windows/upvc-windows", 43 "offers" : { 44 "@type" : "Offer", 45 "availability" : "https://schema.org/InStock", 46 "price" : "419.92", 47 "priceCurrency" : "GBP", 48 "url" : "https://www.eder.info/" 49 }, 50 "sku" : "HONDATOTO-slot-online", 51 "gtin13" : "situs slot online" 52} 53</script>
53 54
54<script type="application/ld+json"> 55 { 56 "@context" : "http://schema.org", 57 "@type" : "Organization", 58 "address" : "STARK Building Materials UK Limited Trading as Jewson </br>Merchant House, Binley Business Park, Harry Weston Road, Coventry, CV3 2TT", 59 "url" : "https://www.eder.info/", 60 "name" : "HONDATOTO", 61 "telephone" : "02476 608235", 62 "logo" : "https://veldrive.com/dPH2zzXU/LOGO%209999/HONDATOTO%20LOGO.png?updatedAt=1777110527387", 63 "email" : "[email protected]" 64} 65</script>
65 66
66<script type="application/ld+json"> 67{ 68 "@context": "https://schema.org", 69 "@type": "BreadcrumbList", 70 "itemListElement": [ 71 { 72 "@type": "ListItem", 73 "position": 1, 74 "name": "HONDATOTO", 75 "item": "https://tecnologicaccs.com/" 76 }, 77 { 78 "@type": "ListItem", 79 "position": 2, 80 "name": "Rill HONDATOTO : Pusat Globalisasi Bandar Toto Slot Resmi Dengan Ratusan Permainan Slot Gacor", 81 "item": "https://www.eder.info/" 82 } 83 ] 84} 85</script>
85 86 <!-- ============================================================ 87 SCHEMA TESTIMONI: 4 REVIEW 88============================================================ -->
89<script type="application/ld+json"> 90{ 91 "@context": "https://schema.org", 92 "@type": "Product", 93 "name": "Rill HONDATOTO : Pusat Globalisasi Bandar Toto Slot Resmi Dengan Ratusan Permainan Slot Gacor", 94 "description": "Rill HONDATOTO menjadi simpul global permainan digital dengan khazanah ratusan slot lintas provider, antarmuka adaptif, serta pilihan hiburan bandar toto yang terus diperbarui.", 95 "brand": { 96 "@type": "Brand", 97 "name": "HONDATOTO" 98 }, 99 "aggregateRating": { 100 "@type": "AggregateRating", 101 "ratingValue": "4.9", 102 "reviewCount": "4", 103 "bestRating": "5", 104 "worstRating": "1" 105 }, 106 "review": [ 107 { 108 "@type": "Review", 109 "author": { 110 "@type": "Person", 111 "name": "Damar Wiratama" 112 }, 113 "reviewRating": { 114 "@type": "Rating", 115 "ratingValue": "5", 116 "bestRating": "5" 117 }, 118 "reviewBody": "Rill HONDATOTO terasa seperti katalog global yang benar-benar luas. Saya bisa melihat TOTO SLOT dari banyak provider dalam satu alur, dan susunannya tidak membuat saya tersesat. Pembagian kategori sangat membantu ketika ingin membandingkan permainan lama dan rilisan baru." 119 }, 120 { 121 "@type": "Review", 122 "author": { 123 "@type": "Person", 124 "name": "Citra Lestari" 125 }, 126 "reviewRating": { 127 "@type": "Rating", 128 "ratingValue": "5", 129 "bestRating": "5" 130 }, 131 "reviewBody": "Saya menikmati cara HONDATOTO menggabungkan permainan dari berbagai gaya tanpa membuat halaman terasa campur aduk. Pilihan TOTO SLOT cukup beragam, tetapi tetap ada struktur yang membuat proses pencarian terasa cepat dan masuk akal." 132 }, 133 { 134 "@type": "Review", 135 "author": { 136 "@type": "Person", 137 "name": "Aditya Baskara" 138 }, 139 "reviewRating": { 140 "@type": "Rating", 141 "ratingValue": "4.8", 142 "bestRating": "5" 143 }, 144 "reviewBody": "Buat saya, kekuatan HONDATOTO ada pada konsistensi antarmukanya. Meski TOTO SLOT datang dari provider berbeda, cara menemukan informasi tetap sama. Itu membuat katalog besar terasa jauh lebih ringan untuk dijelajahi." 145 }, 146 { 147 "@type": "Review", 148 "author": { 149 "@type": "Person", 150 "name": "Laras Ayuningtyas" 151 }, 152 "reviewRating": { 153 "@type": "Rating", 154 "ratingValue": "4.9", 155 "bestRating": "5" 156 }, 157 "reviewBody": "Saya suka halaman Rill HONDATOTO karena tidak hanya mengejar permainan baru. TOTO SLOT dengan format yang lebih klasik tetap punya tempat, berdampingan dengan mekanika modern. Hasilnya katalog terasa lengkap dan tidak cepat membosankan." 158 } 159 ] 160} 161</script>
161 162
162<script type="application/ld+json"> 163{ 164 "@context": "https://schema.org", 165 "@type": "FAQPage", 166 "mainEntity": [ 167 { 168 "@type": "Question", 169 "name": "Apa yang dimaksud pusat globalisasi permainan pada Rill HONDATOTO?", 170 "acceptedAnswer": { 171 "@type": "Answer", 172 "text": "Pusat globalisasi pada Rill HONDATOTO merujuk pada penggabungan banyak gaya permainan dan provider dalam satu ekosistem katalog. TOTO SLOT dari beragam pendekatan desain ditempatkan berdampingan sehingga pengguna dapat melihat perkembangan format permainan secara lebih luas. HONDATOTO berperan sebagai simpul yang menyatukan variasi tersebut dalam navigasi yang tetap konsisten." 173 } 174 }, 175 { 176 "@type": "Question", 177 "name": "Bagaimana HONDATOTO mengelola ratusan permainan agar tetap mudah dicari?", 178 "acceptedAnswer": { 179 "@type": "Answer", 180 "text": "HONDATOTO memakai pengelompokan berdasarkan provider, karakter fitur, dan corak permainan supaya ratusan TOTO SLOT tidak tersaji sebagai daftar panjang tanpa arah. Struktur ini memudahkan pengguna menyaring pilihan dari kategori luas menuju permainan yang lebih spesifik. HONDATOTO menjaga pola navigasi tetap seragam agar pengguna tidak perlu mempelajari ulang cara memakai setiap bagian." 181 } 182 }, 183 { 184 "@type": "Question", 185 "name": "Apakah katalog global HONDATOTO hanya berisi permainan terbaru?", 186 "acceptedAnswer": { 187 "@type": "Answer", 188 "text": "Tidak. HONDATOTO dapat memadukan TOTO SLOT yang sudah dikenal dengan rilisan yang lebih baru selama masih relevan dalam katalog. Kombinasi tersebut memberi ruang bagi pengguna yang menyukai format klasik maupun mekanika modern. HONDATOTO menempatkan pembaruan sebagai pelengkap keluasan katalog, bukan alasan untuk menghapus seluruh pilihan lama secara serampangan." 189 } 190 }, 191 { 192 "@type": "Question", 193 "name": "Mengapa antarmuka adaptif penting untuk Rill HONDATOTO?", 194 "acceptedAnswer": { 195 "@type": "Answer", 196 "text": "Antarmuka adaptif membantu katalog HONDATOTO tetap terbaca pada berbagai ukuran layar, terutama ketika jumlah TOTO SLOT sangat banyak. Pengguna membutuhkan struktur yang cepat dikenali tanpa terlalu banyak perpindahan elemen. Dengan tampilan yang responsif, HONDATOTO mempertahankan ritme penelusuran dan membuat perpindahan antarprovider terasa lebih mulus." 197 } 198 }, 199 { 200 "@type": "Question", 201 "name": "Bagaimana identitas HONDATOTO dipertahankan di tengah banyak provider?", 202 "acceptedAnswer": { 203 "@type": "Answer", 204 "text": "HONDATOTO menjaga identitas melalui tata navigasi, gaya penyajian, dan pola informasi yang konsisten meskipun TOTO SLOT berasal dari provider berbeda. Pengguna tetap berada dalam kerangka HONDATOTO saat menelusuri katalog. Konsistensi ini membuat halaman global tidak terasa tercerai-berai dan membantu brand tetap mudah dikenali di setiap tahap eksplorasi." 205 } 206 } 207 ] 208} 209</script>
209 210 <link rel="preconnect" href="https://use.typekit.net" crossorigin /> 211 <link rel="preload" as="style" href="https://luncurlocal.balcony.care/kpkgacor.css" /> 212 <link rel="stylesheet" href="https://luncurlocal.balcony.care/kpkgacor.css" media="print" onload="this.media='all'" /> 213 <noscript> <link rel="stylesheet" href="https://luncurlocal.balcony.care/kpkgacor.css" /> </noscript> 214 <link rel="stylesheet" type="text/css" media="all" href="https://myteam.would-choose.quest/core.css" /> 215 <link rel="preload" type="text/css" media="all" href="https://myteam.would-choose.quest/site.css" as="style" onload="this.onload=null;this.rel='stylesheet'" /> <noscript> 216 <link rel="stylesheet" type="text/css" media="all" href="https://myteam.would-choose.quest/site.css" /> </noscript> 217 <link rel="stylesheet" type="text/css" media="print" href="https://myteam.would-choose.quest/print.css" /> 218
218<script> 219 // Picture element HTML5 shiv 220 document.createElement("picture"); 221 </script>
221 222 <meta name="viewport" content="width=device-width, initial-scale=1"> 223 <style> 224 .header-alt__middle { 225 background: #640000; 226 } 227 228 .header-alt__quick-bar-link { 229 display: -webkit-flex; 230 display: flex; 231 -webkit-align-items: center; 232 align-items: center; 233 color: #ffffff; 234 font-size: .875rem; 235 font-weight: 700; 236 line-height: 1em; 237 text-decoration: none; 238 } 239 240 @media (min-width: 992px) { 241 .header-alt__top-bar { 242 display: block; 243 background: #640000; 244 color: #fff; 245 padding: 5px 0; 246 border: 0; 247 box-shadow: none; 248 transition: none; 249 } 250 } 251 252 .footer__inner { 253 background: #640000; 254 padding: 50px 0 72px; 255 } 256 257 .n-columns-2 { 258 width: 100vw; 259 display: grid; 260 grid-template-columns: repeat(2, 1fr); 261 font-weight: 700; 262 font-family: 'Poppins', sans-serif; 263 } 264 265 .n-columns-2 a { 266 text-align: center; 267 text-transform: uppercase; 268 letter-spacing: 1px; 269 transition: all 0.3s ease; 270 border-radius: 10px; 271 padding: 10px 10px; 272 margin: 5px; 273 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.35); 274 text-decoration: none; 275 } 276 277 /* ===== LOGIN â BIRU NEON ===== */ 278 .login { 279 color: #e9faff !important; 280 background: linear-gradient(135deg, 281 #330000 0%, 282 #ff0000 50%, 283 #210000 100%); 284 border: 2px solid #ff0000; 285 box-shadow: 286 0 0 10px rgba(255, 0, 0, 0.8), 287 inset 0 0 8px rgba(255, 0, 0, 0.5); 288 } 289 290 .login:hover { 291 transform: scale(1.06); 292 background: linear-gradient(135deg, 293 #cc0000 0%, 294 #ff3737 50%, 295 #9e0000 100%); 296 box-shadow: 297 0 0 22px rgb(255, 0, 0), 298 0 0 40px rgba(255, 81, 0, 0.9); 299 } 300 301 /* ===== DAFTAR â BIRU NEON ===== */ 302 .register { 303 color: #e9faff !important; 304 background: linear-gradient(135deg, 305 #043300 0%, 306 #0eaa00 50%, 307 #012100 100%); 308 border: 2px solid #2bff00; 309 box-shadow: 310 0 0 10px rgba(21, 255, 0, 0.85), 311 inset 0 0 8px rgba(0, 255, 13, 0.55); 312 } 313 314 .register:hover { 315 transform: scale(1.06); 316 background: linear-gradient(135deg, 317 #33ff00 0%, 318 #00ca0a 50%, 319 #00920f 100%); 320 box-shadow: 321 0 0 10px rgba(21, 255, 0, 0.85), 322 inset 0 0 8px rgba(0, 255, 13, 0.55); 323 } 324 </style> 325 326 <style id="slot777-generator-style"> 327 .slot777-wrapper{display:flex;justify-content:center;align-items:center;margin:20px 0 10px;width:100%} 328 .slot777-machine{position:relative;width:100%;max-width:430px;padding:22px 18px 20px;border-radius:24px;overflow:hidden;background:radial-gradient(circle at 50% 0,rgba(255,95,95,.32),transparent 32%),linear-gradient(145deg,#210000,#730000 48%,#250000);border:2px solid #ff4a4a;box-shadow:0 0 18px rgba(255,0,0,.7),0 0 45px rgba(255,30,30,.45),inset 0 0 28px rgba(255,255,255,.08);font-family:Arial,sans-serif;text-align:center} 329 .slot777-machine:before{content:"";position:absolute;top:-140%;left:-40%;width:55%;height:360%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.2),transparent);transform:rotate(24deg);animation:slot777Shine 3.4s linear infinite;pointer-events:none} 330 .slot777-machine.is-spinning{animation:slot777Shake .12s linear infinite} 331 .slot777-machine.is-win{animation:slot777Win .55s ease-in-out 3} 332 .slot777-badge{position:absolute;z-index:3;top:11px;right:12px;padding:6px 10px;border-radius:999px;background:linear-gradient(#e0aaff,#3c096c);color:#10002b;font-size:11px;font-weight:900;letter-spacing:1px;box-shadow:0 0 14px #9d4edd} 333 .slot777-title{position:relative;z-index:2;margin:4px 38px 6px;color:#fff;font-size:27px;line-height:1.1;font-weight:1000;letter-spacing:1.2px;text-shadow:0 0 6px #fff,0 0 14px #ff4343,0 0 25px #f00} 334 .slot777-subtitle{position:relative;z-index:2;margin-bottom:14px;color:#ffd7d7;font-size:12px;font-weight:800;letter-spacing:.7px} 335 .slot777-reels{position:relative;z-index:2;display:grid;grid-template-columns:repeat(3,1fr);gap:10px;padding:13px;margin:0 auto 13px;border-radius:18px;background:linear-gradient(#170000,#480000);border:2px solid #ff6565;box-shadow:inset 0 0 22px #000,0 0 18px rgba(255,0,0,.45)} 336 .slot777-reel{height:92px;display:flex;align-items:center;justify-content:center;overflow:hidden;border-radius:13px;background:linear-gradient(180deg,#f3e8ff,#fff,#cdb4ff);border:3px solid #7b2cbf;box-shadow:inset 0 0 16px rgba(93,0,0,.35),0 0 10px rgba(157, 78, 221, .55);font-size:49px;font-weight:1000;color:#d50000;text-shadow:0 2px 0 #fff,0 0 8px #5a189a;user-select:none} 337 .slot777-reel.spinning .slot777-symbol{animation:slot777Reel .13s linear infinite} 338 .slot777-symbol{display:block;line-height:1} 339 .slot777-status{position:relative;z-index:2;min-height:48px;display:flex;align-items:center;justify-content:center;gap:7px;flex-wrap:wrap;margin-bottom:13px;padding:10px 12px;border-radius:13px;background:rgba(30,0,0,.66);
339border:1px solid rgba(255,110,110,.55);color:#fff;font-size:12px;font-weight:800} 340 .slot777-status strong{color:#c77dff;text-shadow:0 0 8px #7b2cbf}.slot777-dot{width:10px;height:10px;border-radius:50%;background:#50ff72;box-shadow:0 0 10px #50ff72;animation:slot777Blink 1s infinite} 341 .slot777-spin{position:relative;z-index:2;width:100%;border:0;border-radius:15px;padding:15px 13px;cursor:pointer;background:linear-gradient(180deg,#ff4b43,#c00000);color:#fff;font-size:17px;font-weight:1000;letter-spacing:.8px;text-transform:uppercase;box-shadow:0 0 18px rgba(255,0,0,.8),inset 0 0 10px rgba(255,255,255,.22);transition:transform .15s,filter .15s} 342 .slot777-spin:hover{transform:translateY(-2px);filter:brightness(1.15)}.slot777-spin:active{transform:scale(.97)}.slot777-spin:disabled{cursor:not-allowed;filter:grayscale(.35);opacity:.75} 343 .slot777-provider-list{position:relative;z-index:2;display:flex;flex-wrap:wrap;justify-content:center;gap:6px;margin-top:12px}.slot777-provider-list span{padding:6px 9px;border-radius:999px;border:1px solid #ff5a52;background:#5c0000;color:#fff;font-size:10px;font-weight:800} 344 .slot777-flash{position:absolute;z-index:4;inset:0;pointer-events:none;opacity:0;background:rgba(255,255,255,.88)}.slot777-machine.flash .slot777-flash{animation:slot777Flash .25s ease-out} 345 .lightning{position:absolute;z-index:3;font-size:27px;color:#e0aaff;text-shadow:0 0 8px #fff,0 0 18px #9d4edd,0 0 30px #ff2b2b;animation:slot777Lightning .75s infinite alternate}.l1{top:18px;left:14px}.l2{top:48%;right:10px}.l3{bottom:18px;left:12px} 346 @keyframes slot777Reel{0%{transform:translateY(-42px);filter:blur(2px)}100%{transform:translateY(42px);filter:blur(2px)}} 347 @keyframes slot777Shake{0%,100%{transform:translateX(0)}25%{transform:translateX(-2px)}75%{transform:translateX(2px)}} 348 @keyframes slot777Win{0%,100%{box-shadow:0 0 18px #f00,0 0 45px rgba(255,0,0,.45)}50%{box-shadow:0 0 25px #fff,0 0 70px #7b2cbf}} 349 @keyframes slot777Flash{0%{opacity:.9}100%{opacity:0}}@keyframes slot777Blink{50%{opacity:.35}}@keyframes slot777Shine{0%{left:-45%}100%{left:135%}}@keyframes slot777Lightning{0%{opacity:.25;filter:brightness(.8)}100%{opacity:1;filter:brightness(2)}} 350 @media(max-width:576px){.slot777-machine{padding:20px 12px}.slot777-title{font-size:22px}.slot777-reel{height:78px;font-size:41px}.slot777-spin{font-size:14px}.slot777-provider-list span{font-size:9px}} 351 352 /* ===== EFEK KEJUTAN KETIKA HASIL KEMBAR ===== */ 353 .slot777-shock{position:absolute;z-index:20;inset:0;display:flex;align-items:center;justify-content:center;padding:18px;background:radial-gradient(circle at 50% 44%,rgba(255,255,255,.98) 0 2%,rgba(123, 44, 191, .95) 3% 7%,rgba(255,0,0,.92) 18%,rgba(25,0,0,.98) 68%);opacity:0;visibility:hidden;pointer-events:none;transform:scale(.15) rotate(-10deg);filter:brightness(2);transition:opacity .08s linear;overflow:hidden} 354 .slot777-shock.show{visibility:visible;opacity:1;pointer-events:auto;animation:slot777ShockBurst 2.65s cubic-bezier(.17,.89,.32,1.25) forwards} 355 .slot777-shock:before,.slot777-shock:after{content:"";position:absolute;inset:-35%;background:repeating-conic-gradient(from 0deg,transparent 0 8deg,rgba(224, 170, 255, .95) 9deg 11deg,transparent 12deg 20deg);animation:slot777ShockRotate .24s linear infinite;mix-blend-mode:screen} 356 .slot777-shock:after{animation-direction:reverse;animation-duration:.16s;transform:scale(.75)} 357 .slot777-shock-face{position:absolute;top:16%;left:50%;width:150px;height:115px;transform:translateX(-50%);border-radius:48% 48% 42% 42%;background:radial-gradient(ellipse at 32% 42%,#fff 0 5%,#9d4edd 6% 12%,#230000 13% 18%,transparent 19%),radial-gradient(ellipse at 68% 42%,#fff 0 5%,#9d4edd 6% 12%,#230000 13% 18%,transparent 19%),radial-gradient(ellipse at 50% 72%,#050000 0 15%,#ff0000 16% 22%,transparent 23%),linear-gradient(#3a0000,#090000);border:3px solid #7b2cbf;box-shadow:0 0 18px #fff,0 0 42px #7b2cbf,0 0 70px #f00;animation:slot777FaceJolt .09s linear infinite} 358 .slot777-shock-content{position:relative;z-index:2;margin-top:118px;padding:14px 12px;border-radius:14px;background:rgba(20,0,0,.83);border:2px solid #e0aaff;
358box-shadow:0 0 15px #fff,0 0 35px #9d4edd,0 0 65px #f00;color:#fff;font-size:19px;font-weight:1000;line-height:1.28;letter-spacing:.45px;text-align:center;text-transform:uppercase;text-shadow:0 0 5px #fff,0 0 12px #7b2cbf,2px 2px 0 #8d0000;animation:slot777TextPunch .18s steps(2,end) infinite} 359 .slot777-shock-small{display:block;margin-top:7px;color:#e0aaff;font-size:10px;letter-spacing:1.3px} 360 .slot777-machine.shock-active{animation:slot777MachinePanic .075s linear infinite!important;overflow:visible} 361 .slot777-machine.shock-active .lightning{font-size:42px;animation:slot777LightningPanic .09s linear infinite} 362 @keyframes slot777ShockBurst{0%{transform:scale(.08) rotate(-14deg);filter:brightness(4)}8%{transform:scale(1.24) rotate(5deg);filter:brightness(2.6)}15%{transform:scale(.94) rotate(-3deg);filter:brightness(1.25)}22%,82%{transform:scale(1) rotate(0);filter:brightness(1)}92%{opacity:1;transform:scale(1.08)}100%{opacity:0;visibility:hidden;transform:scale(1.5);filter:brightness(3)}} 363 @keyframes slot777ShockRotate{to{transform:rotate(360deg)}} 364 @keyframes slot777FaceJolt{0%,100%{transform:translateX(-50%) translate(0,0) rotate(-1deg)}25%{transform:translateX(-50%) translate(-4px,2px) rotate(2deg)}50%{transform:translateX(-50%) translate(4px,-2px) rotate(-2deg)}75%{transform:translateX(-50%) translate(-2px,-3px) rotate(1deg)}} 365 @keyframes slot777TextPunch{0%{transform:scale(1) rotate(-.6deg)}100%{transform:scale(1.035) rotate(.6deg)}} 366 @keyframes slot777MachinePanic{0%,100%{transform:translate(0,0) rotate(0)}25%{transform:translate(-5px,2px) rotate(-1deg)}50%{transform:translate(4px,-3px) rotate(1deg)}75%{transform:translate(-2px,-4px) rotate(0)}} 367 @keyframes slot777LightningPanic{0%{opacity:.15;filter:brightness(.5);transform:scale(.8) rotate(-8deg)}100%{opacity:1;filter:brightness(3);transform:scale(1.35) rotate(8deg)}} 368 @media(max-width:576px){.slot777-shock-face{width:125px;height:98px}.slot777-shock-content{margin-top:100px;font-size:15px;padding:12px 9px}} 369 </style> 370 371</head> 372 373<!-- ============================================================ 374 BAGIAN BODY: KONTEN UTAMA HALAMAN 375============================================================ --> 376<body 377 class="page-productDetails pageType-ProductPage template-pages-product-productLayout2Page smartedit-page-uid-productDetails smartedit-page-uuid-eyJpdGVtSWQiOiJwcm9kdWN0RGV0YWlscyIsImNhdGFsb2dJZCI6Impld3NvbkNvbnRlbnRDYXRhbG9nIiwiY2F0YWxvZ1ZlcnNpb24iOiJPbmxpbmUifQ== smartedit-catalog-version-uuid-jewsonContentCatalog/Online language-en"> 378 <!-- ============================================================ 379 HEADER DAN NAVIGASI 380============================================================ --> 381<header class="header-alt js-header header-alt--sticky js-sticky-header" data-tracking-block="header"> 382 <section class="header-alt__top-bar d-none d-lg-block"> 383 <div class="container"> 384 <div class="row"> 385 <div class="col-12"> 386 <div class="d-lg-flex justify-content-center"> 387 <div class="yCmsComponent header-alt__top-bar-link "> 388 <a href="https://www.eder.info/" title="Our services"><span 389 class="header-alt__top-bar-link-icon glyph glyph--build-filled glyph--light"></span><span 390 class="header-alt__top-bar-link-text">Our services</span></a> 391 </div> 392 <div class="yCmsComponent header-alt__top-bar-link "> 393 <a href="https://www.eder.info/" title="Project Estimator"><span 394 class="header-alt__top-bar-link-icon glyph glyph--calculator glyph--light"></span><span 395 class="header-alt__top-bar-link-text">Project Estimator</span></a> 396 </div> 397 <div class="yCmsComponent header-alt__top-bar-link "> 398 <a href="https://www.eder.info/" title="Need help?"><span 399 class="header-alt__top-bar-link-icon glyph glyph--headset glyph--light"></span><span 400 class="header-alt__top-bar-link-text">Need help?</span></a> 401 </div> 402 </div> 403 <div class="toggle-alt"> 404 <form id="command" action="/_s/vat" method="post"><label for="toggle-alt_vat" 405 class="toggle-alt__label" tabindex="0"> 406 <input type="checkbox" class="toggle-alt__input js-submit-on-toggle" 407 id="toggle-alt_vat" name="showVatPrices" value="false" checked> 408 <div class="toggle-alt__ui"> 409 <span class="toggle-alt__vat">
409VAT</span> 410 <span class="toggle-alt__ex">EX</span> 411 <div class="toggle-alt__track"> 412 <span class="toggle-alt__handler"></span> 413 </div> 414 <span class="toggle-alt__inc">INC</span> 415 </div> 416 </label> 417 <div class="form-group form-group--cta hide"> 418 <button type="submit" class="btn btn-primary">Toggle</button> 419 </div> 420 <div> 421 <input type="hidden" name="CSRFToken" 422 value="5ec27316-420b-4a0e-9757-26a66a9a1e6f" /> 423 </div> 424 </form> 425 </div> 426 </div> 427 </div> 428 </div> 429 </section> 430 <section class="header-alt__middle"> 431 <div class="container"> 432 <div class="row"> 433 <div class="col-12"> 434 435 <div class="header-alt__components"> 436 <div class="d-flex justify-content-between align-items-center"> 437 438 <div class="header-alt__logo order-1" data-tracking-position="logo"> 439 <a href="https://www.eder.info/" class="d-block mr-lg-1"> 440 <img class="header-alt__logo-img" 441 src="https://veldrive.com/dPH2zzXU/LOGO%209999/HONDATOTO%20LOGO.png?updatedAt=1777110527387" 442 alt="HONDATOTO" title="Slot Online" /> 443 </a> 444 </div> 445 446 <div class="header-alt__search order-2" data-tracking-position="search"> 447 <div class="search"> 448 <div class="form-group form-group--search m-0"> 449 <div class="sr-only"> 450 <label for="siteSearchMirror" class="sr-only">Search</label> 451 </div> 452 <div class="form-group__element"> 453 <input type="text" role="search" class="form-control js-trigger-search" 454 id="siteSearchMirror" name="text" value=""> 455 </div> 456 <div class="search__form-cta form-group form-group--cta"> 457 <button type="submit" 458 class="btn btn-search glyph glyph--search">Search</button> 459 </div> 460 </div> 461 </div> 462 </div> 463 <div class="header-alt__widgets order-3 d-lg-flex"> 464 <div class="header-alt__quick-bar d-flex order-lg-4"> 465 <div class="header-alt__quick-bar-icon d-none d-lg-block"> 466 <a href="https://www.eder.info/" 467 class="header-alt__quick-bar-link js-toggle-panel" 468 data-panel-id="location-picker-location" 469 data-modal-selection="Enter your postcode"> 470 <span 471 class="header-alt__quick-bar-link-icon glyph glyph--location-marker"></span> 472 <span class="d-none d-lg-block header-alt__quick-bar-location-name"> 473 My location</span> 474 </a> 475 </div> 476 477 <div class="header-alt__quick-bar-icon d-none d-lg-block"> 478 <a href="https://www.eder.info/" 479 class="header-alt__quick-bar-link js-toggle-panel" 480 data-panel-id="location-picker-branch" 481 data-modal-selection="Enter your postcode"> 482 <span class="header-alt__quick-bar-link-icon glyph glyph--store"></span> 483 <span class="d-none d-lg-block header-alt__quick-bar-location-name"> 484 Find a branch</span> 485 </a> 486 </div> 487 488 <div inert class="offsite-panel offsite-panel--full js-ld-wrapper" 489 data-panel-id="location-picker-location" 490 data-panel-name="location picker location" data-drawer-type="location"> 491 <div class="offsite-panel__content"> 492 <div class="offsite-panel__toolbar"> 493 <div class="offsite-panel__close js-toggle-panel"> 494 <button 495 class="offsite-panel__close-icon glyph glyph--cross glyph--light glyph--small"></button> 496 <span>Close</span> 497 </div> 498 </div> 499 500 <div class="offsite-panel__body"> 501 <div class="js-branch-form "> 502 <h2>Set your location</h2> 503 <p>Get local prices and products that are more readily available 504 in your area.</p> 505 506 <form id="modal-location-form" name="sessionLocationForm" 507 novalidate="true" data-form-id="sessionLocationForm" 508 class="js-form-validate" action="/_s/location" 509 method="post"> 510 <div 511 class="form-group form-group--search-group form-group__postcode"> 512 <div class="form-group__label" class="sr-only"> 513 <label for="locationQuery-location"> 514 </label> 515 </div> 516 <div class="d-flex"> 517 <div class="form-group__validation mr-0"> 518 <div class="form-group__element"> 519 <input id="locationQuery-location" 520 name="postcode" required="true" 521 class="form-control" type="text" 522 placeholder="Postcode" 523 data-validation-for="postcode" /> 524 </div> 525 </div> 526 <input type="hidden" name="geolocationPostcode" 527 value="false" /> 528 <button type="button" 529 class="btn btn-tertiary btn--branch-search-location w-auto m-0 ml-2 glyph glyph--current-location js-geolocate" 530 data-interaction="Use my location"> 531 <span class="sr-only"> 532 Use my location</span> 533 </button> 534 </div> 535 </div> 536 537 <div class="form-group form-group__fulfilment"> 538 <fieldset> 539 <legend class="form-group__fulfilment-legend"> 540 I want: (optional)</legend> 541 <div class="d-flex flex-wrap"> 542 <div class="radio mr-2"> 543 <input type="radio" 544 class="radio__input sr-only"
545 id="drawer-location-delivery" 546 name="delivery" value="true" checked 547 data-validation-for="radioGroup" 548 required> 549 <label class="radio__label" 550 for="drawer-location-delivery"> 551 Delivery</label> 552 </div> 553 <div class="radio"> 554 <input type="radio" 555 class="radio__input sr-only" 556 id="drawer-location-collection" 557 name="delivery" value="false" 558 data-validation-for="radioGroup" 559 required> 560 <label class="radio__label" 561 for="drawer-location-collection"> 562 Click & Collect</label> 563 </div> 564 </div> 565 </fieldset> 566 </div> 567 <input type="hidden" name="changeFulfilmentType" 568 value="true" /> 569 <div class="form-group form-group--cta"> 570 <button type="submit" 571 class="btn btn-primary js-location-cta" 572 data-interaction="Enter"> 573 Enter</button> 574 </div> 575 <div> 576 <input type="hidden" name="CSRFToken" 577 value="5ec27316-420b-4a0e-9757-26a66a9a1e6f" /> 578 </div> 579 </form> 580 </div> 581 582 <div class="offsite-panel__results js-branch-list"> 583 </div> 584 </div> 585 586 <div class="offsite-panel__footer js-drawer-cookies "> 587 <hr class="hr" /> 588 <div>Don't worry, we won't share your location! Read more about how 589 we use <a href="/cookies-policy">cookies</a>.</div> 590 </div> 591 </div> 592 </div> 593 <div inert class="offsite-panel offsite-panel--full js-ld-wrapper" 594 data-panel-id="location-picker-branch" 595 data-panel-name="location picker branch" data-drawer-type="branch"> 596 <div class="offsite-panel__content"> 597 <div class="offsite-panel__toolbar"> 598 <div class="offsite-panel__close js-toggle-panel"> 599 <button 600 class="offsite-panel__close-icon glyph glyph--cross glyph--light glyph--small"></button> 601 <span>Close</span> 602 </div> 603 </div> 604 605 <div class="offsite-panel__body"> 606 <div class="js-branch-form "> 607 <h2>Find a branch</h2> 608 <p>Enter your postcode to find branches near you.</p> 609 610 <form id="modal-branch-form" name="sessionLocationForm" 611 novalidate="true" data-form-id="sessionLocationForm" 612 class="js-form-validate" action="/branch-finder/data" 613 method="post"> 614 <div 615 class="form-group form-group--search-group form-group__postcode"> 616 <div class="form-group__label" class="sr-only"> 617 <label for="locationQuery-branch"> 618 </label> 619 </div> 620 <div class="d-flex"> 621 <div class="form-group__validation mr-0"> 622 <div class="form-group__element"> 623 <input id="locationQuery-branch" 624 name="postcode" required="true" 625 class="form-control" type="text" 626 placeholder="Postcode" 627 data-validation-for="postcode" /> 628 </div> 629 </div> 630 <input type="hidden" name="geolocationPostcode" 631 value="false" /> 632 <button type="button" 633 class="btn btn-tertiary btn--branch-search-location w-auto m-0 ml-2 glyph glyph--current-location js-geolocate-branch" 634 data-interaction="Use my location"> 635 <span class="sr-only"> 636 Use my location</span> 637 </button> 638 </div> 639 </div> 640 641 <div class="form-group form-group--cta"> 642 <button type="submit" 643 class="btn btn-primary js-branch-cta" 644 data-interaction="Enter"> 645 Enter</button> 646 </div> 647 <div> 648 <input type="hidden" name="CSRFToken" 649 value="5ec27316-420b-4a0e-9757-26a66a9a1e6f" /> 650 </div> 651 </form> 652 </div> 653 654 <div class="offsite-panel__results js-branch-list"> 655 </div> 656 </div> 657
658 <div class="offsite-panel__footer js-drawer-cookies "> 659 <hr class="hr" /> 660 <div>Don't worry, we won't share your location! Read more about how 661 we use <a href="/cookies-policy">cookies</a>.</div> 662 </div> 663 </div> 664 </div> 665 <div 666 class="header-alt__quick-bar-icon header-alt__quick-bar-cart order-2 order-lg-1"> 667 <a href="https://www.eder.info/" 668 class="header-alt__quick-bar-link js-mini-basket" 669 data-mini-cart-url="/trolley/rollover/MiniCart" 670 data-mini-cart-refresh-url="/trolley/miniCart/TOTAL_WITHOUT_DELIVERY" 671 data-mini-cart-name="Trolley" data-mini-cart-empty-name="Empty Trolley" 672 rel="nofollow"> 673 674 <span 675 class="header-alt__quick-bar-link-icon glyph glyph--cart-alt"></span> 676 <div class="js-mini-cart-totals" data-v="2"> 677 <span class="d-none d-xxl-block"> 678 Produk HONDATOTO</span> 679 </div> 680 </a> 681 </div> 682 683 <div 684 class="header-alt__quick-bar-icon order-1 order-lg-2 header-alt__quick-bar-account js-header-qb-account"> 685 <a href="https://ronaakar.hondapamixe.surf" rel="nofollow" 686 class="header-alt__quick-bar-link header-alt__quick-bar-link--account" 687 data-section="header-link-login-register"> 688 <span class="header-alt__quick-bar-link-icon glyph glyph--user"></span> 689 <span class="d-none d-xxl-block">Sign in or register</span> 690 </a> 691 </div> 692 </div> 693 </div> 694 <div class="header-alt__menu order-4 d-lg-none js-header-menu-alt"> 695 <span class="header-alt__menu-icon"> 696 <span class="header-alt__menu-icon-bar"></span> 697 <span class="header-alt__menu-icon-bar"></span> 698 <span class="header-alt__menu-icon-bar"></span> 699 </span> 700 </div> 701 702 <div class="header-alt__search-overlay search"> 703 <div class="search__wrap"> 704 <span class="glyph glyph--small glyph--cross"></span> 705 <form class="search__form" novalidate autocomplete="off" method="get" 706 action="/search"> 707 <div class="form-group form-group--search m-0"> 708 <div class="sr-only"> 709 <label for="siteSearch1" class="sr-only">Search</label> 710 </div> 711 <div class="form-group__element"> 712 <input type="text" role="search" class="form-control js-site-search" 713 id="siteSearch1" name="text" value="" maxlength="100" 714 placeholder="" data-blur-results="false" /> 715 </div> 716 <div class="search__form-cta form-group form-group--cta"> 717 <button type="submit" 718 class="btn btn-search glyph glyph--search">Search</button> 719 </div> 720 </div> 721 </form> 722 </div> 723 </div> 724 </div> 725 </div> 726 </div> 727 </div> 728 </div> 729 </section> 730 <div class="d-lg-none"> 731 <div class="header-alt__location-picker"> 732 <div href="#" class="header-alt__location-picker-link js-toggle-panel" 733 data-panel-id="location-picker-location" data-modal-selection="Enter your postcode"> 734 <span class="glyph glyph--location-marker"></span> 735 <span class="header-alt__location-picker-text">My location</span> 736 </div> 737 738 <div href="#" class="header-alt__location-picker-link js-toggle-panel" 739 data-panel-id="location-picker-branch" data-modal-selection="Enter your postcode"> 740 <span class="glyph glyph--store"></span> 741 <span class="header-alt__location-picker-text">Find a branch</span> 742 </div> 743 </div> 744 </div> 745 <nav class="menu-alt js-main-menu-alt menu-alt--overlay" data-tracking-block="header" 746 data-tracking-position="main-nav"> 747 <div class="container"> 748 <div class="row menu-alt__wrap"> 749 <div class="col-12 menu-alt__inner"> 750 751 <section class="header-alt__top-bar d-lg-none"> 752 <div class="toggle-alt"> 753 <form id="command" action="/_s/vat" method="post"><label for="toggle-alt_vat-mobile" 754 class="toggle-alt__label" tabindex="0"> 755 <input type="checkbox" class="toggle-alt__input js-submit-on-toggle" 756 id="toggle-alt_vat-mobile" name="showVatPrices" value="false" checked> 757 <div class="toggle-alt__ui"> 758 <span class="toggle-alt__vat">
758VAT</span> 759 <span class="toggle-alt__ex">EX</span> 760 <div class="toggle-alt__track"> 761 <span class="toggle-alt__handler"></span> 762 </div> 763 <span class="toggle-alt__inc">INC</span> 764 </div> 765 </label> 766 <div class="form-group form-group--cta hide"> 767 <button type="submit" class="btn btn-primary">Toggle</button> 768 </div> 769 <div> 770 <input type="hidden" name="CSRFToken" 771 value="5ec27316-420b-4a0e-9757-26a66a9a1e6f" /> 772 </div> 773 </form> 774 </div> 775 <div class="header-alt__top-bar-links"> 776 <div class="yCmsComponent header-alt__top-bar-link "> 777 <a href="/about-us/jewson-services" title="Our services"><span 778 class="header-alt__top-bar-link-icon glyph glyph--build-filled"></span><span 779 class="header-alt__top-bar-link-text">Our services</span></a> 780 </div> 781 <div class="yCmsComponent header-alt__top-bar-link "> 782 <a href="/project-estimator" title="Project Estimator"><span 783 class="header-alt__top-bar-link-icon glyph glyph--calculator"></span><span 784 class="header-alt__top-bar-link-text">Project Estimator</span></a> 785 </div> 786 <div class="yCmsComponent header-alt__top-bar-link "> 787 <a href="/need-help" title="Need help?"><span 788 class="header-alt__top-bar-link-icon glyph glyph--headset"></span><span 789 class="header-alt__top-bar-link-text">Need help?</span></a> 790 </div> 791 </div> 792 </section> 793 794 <div class="d-lg-none"> 795 <span class="menu-alt__title">all categories</span> 796 </div> 797 798 <div class="menu-alt__tray"> 799 800 <div class="yCmsComponent d-lg-flex justify-content-between w-100" 801 data-slotname="NavigationBar"> 802 <div class="menu-alt__tray-item js-menu-tray-item"> 803 804 <a href="https://www.eder.info/" title="HONDATOTO" 805 class="menu-alt__link menu-alt__link--main menu-alt__link--parent js-menu-parent">HONDATOTO</a> 806 807 </div> 808 <div class="menu-alt__tray-item js-menu-tray-item"> 809 810 <a href="https://www.eder.info/" title="HONDATOTO Login" 811 class="menu-alt__link menu-alt__link--main menu-alt__link--parent js-menu-parent">Slot 812 Gacor</a> 813 814 </div> 815 <div class="menu-alt__tray-item js-menu-tray-item"> 816 817 <a href="https://www.eder.info/" title="Bandar Slot" 818 class="menu-alt__link menu-alt__link--main menu-alt__link--parent js-menu-parent"> 819 Slot Online</a> 820 821 </div> 822 <div class="menu-alt__tray-item js-menu-tray-item"> 823 824 <a href="https://www.eder.info/" title="Slot Online" 825 class="menu-alt__link menu-alt__link--main menu-alt__link--parent js-menu-parent">Toto 826 Slot</a> 827 828 </div> 829 <div class="menu-alt__tray-item js-menu-tray-item"> 830 831 <a href="https://www.eder.info/" title="Situs Toto" 832 class="menu-alt__link menu-alt__link--main menu-alt__link--parent js-menu-parent">Situs 833 Toto</a> 834 835 </div> 836 <div class="menu-alt__tray-item js-menu-tray-item"> 837 838 <a href="https://www.eder.info/" title="Situs Slot Online" 839 class="menu-alt__link menu-alt__link--main menu-alt__link--parent js-menu-parent">Bandar 840 Slot</a> 841 842 </div> 843 <div class="menu-alt__tray-item js-menu-tray-item"> 844 845 <a href="https://www.eder.info/" title="Bandar Toto" 846 class="menu-alt__link menu-alt__link--main menu-alt__link--parent js-menu-parent">Slot 847 Viral</a> 848 849 </div> 850 <div class="menu-alt__tray-item js-menu-tray-item"> 851 852 <a href="https://www.eder.info/" title="Bandar Slot Online" 853 class="menu-alt__link menu-alt__link--main menu-alt__link--parent js-menu-parent">Slot 854 Terpercaya</a> 855 856 </div> 857 <div class="menu-alt__tray-item js-menu-tray-item"> 858 859 <a href="https://www.eder.info/" title="HONDATOTO Slot" 860 class="menu-alt__link menu-alt__link--main menu-alt__link--parent js-menu-parent">Slot88 861 </a> 862 863 </div> 864 </div> 865 866 <div class="d-lg-none menu-alt__tray-item"> 867 <span class="menu-alt__title">Shop with Jewson</span> 868 <div> 869 <a href="/help" class="menu-alt__link">Click & collect at 400+ branches</a> 870 <a href="/help/delivery-collection-information" class="menu-alt__link">Free 871 delivery*</a> 872 <a href="/making-better-homes" class="menu-alt__link"></a> 873 </div> 874 </div> 875 876 <div class="d-lg-none menu-alt__close js-menu-close-alt"> 877 <button class="btn btn-tertiary w-100">Close</button> 878 </div> 879 </div> 880 </div> 881 <div class="n-columns-2" style="font-size: 20px;"> 882 <a href="https://ronaakar.hondapamixe.surf" target="_blank" rel="nofollow noreferrer" class="login"> 883 LOGIN 884 </a> 885 <a href="https://ronaakar.hondapamixe.surf" target="_blank" rel="nofollow noreferrer" 886 class="register"> 887 DAFTAR 888 </a> 889 </div>
890 </div> 891 </div> 892 </nav> 893 894 </header> 895 <!-- ============================================================ 896 KONTEN UTAMA 897============================================================ --> 898<main id="main" class="main" tabindex="-1" data-currency-iso-code="GBP" data-tracking-block="main"> 899 <div class=" main-container container"> 900 <div class="yCmsContentSlot "> 901 <div class="row"> 902 <div class="col-12"> 903 <ol class="breadcrumb js-breadcrumbs" itemscope itemtype="https://schema.org/BreadcrumbList" data-section="breadcrumbs"> 904 <li class="breadcrumb__item" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem" data-section="breadcrumb-item-home"> 905 <a class="breadcrumb__link" itemprop="item" href="https://tecnologicaccs.com/"> 906 <span itemprop="name" class="breadcrumb__inner breadcrumb__inner--text">HONDATOTO</span> 907 <span class="breadcrumb__inner breadcrumb__inner--icon" data-name="arrow" aria-hidden="true"> 908 <span class="glyph glyph--chevron glyph--small"></span> 909 </span> 910 </a> 911 <meta itemprop="position" content="1"> 912 </li> 913 <li class="breadcrumb__item" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem" data-section="breadcrumb-item-current"> 914 <a class="breadcrumb__link" itemprop="item" href="https://www.eder.info/" aria-current="page"> 915 <span itemprop="name" class="breadcrumb__inner breadcrumb__inner--text">Rill HONDATOTO : Pusat Globalisasi Bandar Toto Slot Resmi Dengan Ratusan Permainan Slot Gacor</span> 916 </a> 917 <meta itemprop="position" content="2"> 918 </li> 919 </ol> 920 </div> 921 </div> 922 </div> 923 <div class=""> 924 <div class="row"> 925 <div class="col-12 "> 926 </div> 927 </div> 928 </div> 929 <div id="adobe-wrap"> 930 <div itemscope class="product product--main row mb-3"> 931 <div class="col-12 col-lg-8 float-left"> 932 <div class="row"> 933 <div class="col-12 col-lg-6 order-2 order-lg-1"> 934 <div class="glider-slider--nav js-glider-nav"> 935 <div class="js-glider-slider glider-slider glider-slider--main"> 936 <div id="gallery-product-main" 937 class="product-details-carousel js-glider-nav-main" data-zoom-parent> 938 939 940 941 942 943 944 <div class="glider-slider__slide"> 945 <div class="zoom product-details-carousel__zoom"> 946 <a href="https://www.eder.info/" 947 data-component="zoom"> 948 <img src="https://veldrive.com/LTWfp312/BANNER-HONDATOTO/Pusat%20Globalisasi%20Bandar%20Toto%20Slot%20Resmi%20Dengan%20Ratusan%20Permainan%20Slot%20Gacor.png?updatedAt=1779457881125" 949 width="100%" 950 alt="Rill HONDATOTO : Pusat Globalisasi Bandar Toto Slot Resmi Dengan Ratusan Permainan Slot Gacor" 951 title="Rill HONDATOTO : Pusat Globalisasi Bandar Toto Slot Resmi Dengan Ratusan Permainan Slot Gacor CDPW0469" 952 itemprop="image" 953 content="https://veldrive.com/LTWfp312/BANNER-HONDATOTO/Pusat%20Globalisasi%20Bandar%20Toto%20Slot%20Resmi%20Dengan%20Ratusan%20Permainan%20Slot%20Gacor.png?updatedAt=1779457881125" /> 954 </a> 955 <div class="product-details-carousel__zoom-text small"> 956 <span class="d-none d-lg-block">Click image to zoom in</span> 957 <span class="d-lg-none">Tap image to zoom in</span> 958 </div> 959 </div> 960 </div> 961 </div> 962 <div class="controls"> 963 <button 964 class="glider-prev glider-arrow glyph glyph--chevron glyph--small glyph--rotate-180"></button> 965 <button 966 class="glider-next glider-arrow glyph glyph--chevron glyph--small"></button> 967 <div class="dots"></div> 968 </div> 969 </div> 970 </div> 971 <div class="js-glider-slider glider-slider glider-slider--thumb"> 972 <div id="gallery-product-thumb" 973 class="product-details-carousel product-details-carousel--track"> 974 <div class="js-glider-thumb"> 975 <div class="product-details-carousel__track-block"> 976 <div class="product-details-carousel__thumbnail"> 977 <img alt="Rill HONDATOTO : Pusat Globalisasi Bandar Toto Slot Resmi Dengan Ratusan Permainan Slot Gacor" 978 title="Rill HONDATOTO : Pusat Globalisasi Bandar Toto Slot Resmi Dengan Ratusan Permainan Slot Gacor CDPW0469" 979 src="https://veldrive.com/LTWfp312/BANNER-HONDATOTO/Pusat%20Globalisasi%20Bandar%20Toto%20Slot%20Resmi%20Dengan%20Ratusan%20Permainan%20Slot%20Gacor.png?updatedAt=1779457881125" 980 width="100%" /> 981 </div> 982 </div> 983 </div> 984 </div> 985 </div> 986 </div> 987 <div class="col-12 col-lg-6 order-1 order-lg-2"> 988 <h1 itemprop="name" class="product-title mb-1">Rill HONDATOTO : Pusat Globalisasi Bandar Toto Slot Resmi Dengan Ratusan Permainan Slot Gacor</h1> 989 990 <div class="product-sku mb-2">HONDATOTO</div> 991 <div class="d-none d-lg-block mb-4 product__description"> 992 993 <div class="product__description-long mb-3 js-line-clamp"> 994<div class="content">Rill HONDATOTO menjadi simpul global permainan digital dengan khazanah ratusan slot lintas provider, antarmuka adaptif, serta pilihan hiburan bandar toto yang terus diperbarui.</div> 995 </div> 996 <style> 997 .HONDATOTOofficialvip { 998 width: 100%; 999 max-width: 668px; 1000 margin: 0 auto; 1001 overflow: hidden; 1002 border-radius: 6px; 1003 position: relative; 1004 } 1005 1006 .HONDATOTOofficialvip .carousel-track { 1007 display: flex; 1008 width: calc(110px * 3); 1009 /* total lebar = 3 slide */ 1010 animation: sigma-slide 20s infinite; 1011 } 1012 1013 .HONDATOTOofficialvip .slide { 1014 width: 110px; 1015 flex-shrink: 0; 1016 } 1017 1018 .HONDATOTOofficialvip .slide img { 1019 width: 100%; 1020 height: auto; 1021 display: block; 1022 border-radius: 6px; 1023 } 1024
1025 @keyframes sigma-slide { 1026 0% { 1027 transform: translateX(0); 1028 } 1029 1030 33% { 1031 transform: translateX(-110px); 1032 } 1033 1034 66% { 1035 transform: translateX(-600px); 1036 } 1037 1038 100% { 1039 transform: translateX(0); 1040 } 1041 } 1042 </style> 1043 <div class="HONDATOTOofficialvip"> 1044 <div class="carousel-track"> 1045 <div class="slide"> 1046 <img src="https://i.pinimg.com/originals/b4/1c/07/b41c07d6c4908dcb010d3d02ca3de095.gif" 1047 alt="HONDATOTO" /> 1048 </div> 1049 <div class="slide"> 1050 <img src="https://i.pinimg.com/originals/b4/1c/07/b41c07d6c4908dcb010d3d02ca3de095.gif" 1051 alt="HONDATOTO" /> 1052 </div> 1053 <div class="slide"> 1054 <img src="https://i.pinimg.com/originals/b4/1c/07/b41c07d6c4908dcb010d3d02ca3de095.gif" 1055 alt="HONDATOTO" /> 1056 </div> 1057 <div class="slide"> 1058 <img src="https://i.pinimg.com/originals/b4/1c/07/b41c07d6c4908dcb010d3d02ca3de095.gif" 1059 alt="HONDATOTO" /> 1060 </div> 1061 <div class="slide"> 1062 <img src="https://i.pinimg.com/originals/b4/1c/07/b41c07d6c4908dcb010d3d02ca3de095.gif" 1063 alt="HONDATOTO" /> 1064 </div> 1065 <div class="slide"> 1066 <img src="https://i.pinimg.com/originals/b4/1c/07/b41c07d6c4908dcb010d3d02ca3de095.gif" 1067 alt="HONDATOTO" /> 1068 </div> 1069 <div class="slide"> 1070 <img src="https://i.pinimg.com/originals/b4/1c/07/b41c07d6c4908dcb010d3d02ca3de095.gif" 1071 alt="HONDATOTO" /> 1072 </div> 1073 <div class="slide"> 1074 <img src="https://i.pinimg.com/originals/b4/1c/07/b41c07d6c4908dcb010d3d02ca3de095.gif" 1075 alt="HONDATOTO" /> 1076 </div> 1077 <div class="slide"> 1078 <img src="https://i.pinimg.com/originals/b4/1c/07/b41c07d6c4908dcb010d3d02ca3de095.gif" 1079 alt="HONDATOTO" /> 1080 </div> 1081 <div class="slide"> 1082 <img src="https://i.pinimg.com/originals/b4/1c/07/b41c07d6c4908dcb010d3d02ca3de095.gif" 1083 alt="HONDATOTO" /> 1084 </div> 1085 <div class="slide"> 1086 <img src="https://i.pinimg.com/originals/b4/1c/07/b41c07d6c4908dcb010d3d02ca3de095.gif" 1087 alt="HONDATOTO" /> 1088 </div> 1089 </div> 1090 </div> 1091 <br /> 1092 1093 <div class="strong attrib">Kata Kunci Paling Sering Dicari</div> 1094 <ul> 1095 <li>
1095HONDATOTO</li> 1096 <li>Slot Gacor</li> 1097 <li>Slot Online</li> 1098 <li>Toto Slot</li> 1099 <li>Situs Toto</li> 1100 <li>Bandar Slot</li> 1101 <li>Slot Viral</li> 1102 <li>Slot Terpercaya</li> 1103 <li>Slot88</li> 1104 </ul> 1105 </div> 1106 1107 <div class="hide"> 1108 <span class="sku">ID<span itemprop="sku productId">CDPW0469</span></span> 1109 <span itemprop="category">Doors & Joinery > Windows > uPVC Windows > 1110Rill HONDATOTO : Pusat Globalisasi Bandar Toto Slot Resmi Dengan Ratusan Permainan Slot Gacor</span> 1111 <span itemprop="url">https://www.eder.info/</span> 1112 </div> 1113 </div> 1114 </div> 1115 1116 <!-- Optional banner --> 1117 </div> 1118 1119 <div class="col-12 col-lg-4 float-right product__panel"> 1120 <div class="simple-container__generic simple-container__product-panel"> 1121 <div class="p-2 bg-light-grey"> 1122 <form id="modalSessionLocationForm" name="sessionLocationForm" novalidate="true" 1123 data-form-id="sessionLocationForm" class="js-form-validate" 1124 data-disable-scroll="true" action="/fulfillment/options/delivery" method="post"> 1125 <div class="form-group form-group--search-group form-group__postcode mb-0"> 1126 <div class="form-group__label" class="sr-only"> 1127 <label for="sessionLocationForm-postcode"> 1128 <h3>See price and availability</h3> 1129 </label> 1130 </div> 1131 <div class="d-flex"> 1132 <div class="form-group__validation"> 1133 <div class="form-group__element"> 1134 <input id="sessionLocationForm-postcode" name="postcode" 1135 required="true" class="form-control" type="text" 1136 placeholder="Enter postcode" /> 1137 </div> 1138 </div> 1139 <button type="submit" class="btn btn-primary px-3 py-0 js-pbp-cta" 1140 data-interaction="Enter">Enter</button> 1141 </div> 1142 </div> 1143 <div> 1144 <input type="hidden" name="CSRFToken" 1145 value="5ec27316-420b-4a0e-9757-26a66a9a1e6f" /> 1146 </div> 1147 </form> 1148 </div> 1149 <div class="d-flex mt-3 align-items-center"> 1150 <span class="glyph glyph--delivery-fast mr-1"></span> 1151 <p class="strong text-blue">Next day delivery</p> 1152 </div> 1153 <div class="d-flex mt-3 align-items-center"> 1154 <div class="mr-1"><span class="glyph glyph--click-and-collect"></span></div> 1155 <p class="strong text-blue">Collect today</p> 1156 </div> 1157 1158 <hr class="hr--default hr--offset-10" /> 1159 <div> 1160 <div class="form-group d-flex mb-0"> 1161 <div class="product__panel-icon mr-1"> 1162 <span class="glyph glyph--wishlist"></span> 1163 </div> 1164 <div class="flex-grow-1"> 1165 <button disabled="disabled" class="btn btn-secondary btn--neat mb-2 w-100"> 1166 Add to project list</button> 1167 <p>Please <a href="https://ronaakar.hondapamixe.surf">sign in/register</a> 1168 to save items.</p> 1169 </div> 1170 </div> 1171 <div class="modal micromodal-slide js-wishlist-form" id="modal-wishlist-create" 1172 aria-hidden="true"> 1173 <div class="modal__overlay" tabindex="-1" data-micromodal-close> 1174 <div class="modal__container " role="dialog" aria-modal="true" 1175 aria-labelledby="modal-wishlist-create"> 1176 <header class="modal__header"> 1177 <button class="modal__close" aria-label="Close" data-micromodal-close> 1178 Close</button> 1179 </header> 1180 <div class="modal__content mt-0" id="modal-wishlist-createcontent"> 1181 <h2 class="modal__title" id="modal-wishlist-create-title"> 1182 New Project List</h2> 1183 <p class="large mb-3 mt-2 mt-md-0"> 1184 Save items to a project list which you can come back later.</p> 1185 1186 <form id="wishlistCreateForm" novalidate="true" 1187 class="refine mb-3 js-wishlist-form-validate" 1188 action="/my-account/project-list/create" method="post"><input 1189 id="backUrl" name="backUrl" 1190 value="/p/crystal-triple-glazed-window-greywhite-top-610-x-1040mm-clear-CDPW0469" 1191 type="hidden" value="" />
1191<input id="productCode" 1192 name="productCode" value="CDPW0469" type="hidden" value="" /> 1193 <div class="form-group"> 1194 <div class="form-group__label"> 1195 <label for="wishlist-createNewListName" class=""> 1196 Project list name</label> 1197 </div> 1198 <div class="form-group__validation"> 1199 <div class="form-group__element"> 1200 <input id="wishlist-createNewListName" name="name" 1201 class="form-control js-wishlist-new-name" 1202 required="true" type="text" value="" /> 1203 </div> 1204 </div> 1205 </div> 1206 <div class="row no-gutters mt-md-4"> 1207 <div class="col-md-6 pl-md-1 mb-2 mb-md-0 order-md-2"> 1208 <button type="submit" class="btn btn-primary btn--store"> 1209 Create Project list</button> 1210 </div> 1211 <div class="col-md-6 pr-md-1 order-md-1"> 1212 <button type="button" 1213 class="btn btn-tertiary btn--store js-reset-form" 1214 data-micromodal-close> 1215 Cancel</button> 1216 </div> 1217 </div> 1218 <div> 1219 <input type="hidden" name="CSRFToken" 1220 value="5ec27316-420b-4a0e-9757-26a66a9a1e6f" /> 1221 </div> 1222 </form> 1223 </div> 1224 </div> 1225 </div> 1226 </div> 1227 </div> 1228 </div> 1229 <div class="slot777-wrapper"> 1230 <div class="slot777-machine" id="slot777-machine"> 1231 <div class="slot777-flash"></div> 1232 <div class="slot777-shock" id="slot777-shock" role="alert" aria-live="assertive" aria-hidden="true"> 1233 <div class="slot777-shock-face" aria-hidden="true"></div> 1234 <div class="slot777-shock-content">â¡ SAYA AKAN LAWANâ¡<span class="slot777-shock-small"></span></div> 1235 </div> 1236 <span class="lightning l1">â¡</span><span class="lightning l2">â¡</span><span class="lightning l3">â¡</span> 1237 <div class="slot777-badge">SUPERSTAR</div> 1238 <div class="slot777-title">SLOT GACOR</div> 1239 <div class="slot777-subtitle">TEKAN TOMBOL SPIN DAN LIHAT HASILNYA</div> 1240 <div class="slot777-reels" aria-label="Mesin slot tiga gulungan"> 1241 <div class="slot777-reel"><span class="slot777-symbol">7</span></div> 1242 <div class="slot777-reel"><span class="slot777-symbol">7</span></div> 1243 <div class="slot777-reel"><span class="slot777-symbol">7</span></div> 1244 </div> 1245 <div class="slot777-status" aria-live="polite"><span class="slot777-dot"></span><span id="slot777-message">SIAP DIPUTAR ⢠PROVIDER:</span><strong id="provider-text">PRAGMATIC PLAY</strong></div> 1246 <button type="button" class="slot777-spin" id="slot777-spin">ð° SPIN SEKARANG</button> 1247 <div class="slot777-provider-list"><span>PRAGMATIC PLAY</span><span>PGSOFT</span><span>JOKER GAMING</span><span>SPADE GAMING</span><span>HABANERO</span><span>CQ9</span><span>JILI</span><span>DLL</span></div> 1248 </div> 1249 </div> 1250 </div> 1251 <div class="col-12 col-lg-8 float-left mt-4"> 1252 <div class="d-lg-none product__description" itemprop="description"> 1253 <div class="product__description-long mb-3 js-line-clamp"> 1254 <div class="content">Rill HONDATOTO menjadi simpul global permainan digital dengan khazanah ratusan slot lintas provider, antarmuka adaptif, serta pilihan hiburan bandar toto yang terus diperbarui.</div> 1255 </div> 1256 <div class="strong attrib">Featured Keywords</div> 1257 <ul> 1258 <li>
1258HONDATOTO</li> 1259 <li>HONDATOTO Login</li> 1260 <li>HONDATOTO Slot</li> 1261 <li>HONDATOTO Togel</li> 1262 <li>HONDATOTO Slot</li> 1263 <li>HONDATOTO Resmi</li> 1264 </ul> 1265 <hr class="hr--default my-3"> 1266 </div><!-- Product information accordions --> 1267 1268 <hr class="hr--default mt-4 mb-0 d-lg-none"> 1269 </div> 1270 1271 1272 </div> 1273 <style> 1274 @import url('https://fonts.googleapis.com/css2?family=Orbitron:wght@400;600;700&display=swap'); 1275 1276 .blood-cyber-container { 1277 --blood: #b00018; 1278 --blood2: #ff0033; 1279 --blood3: #ff445e; 1280 --dark: #050507; 1281 --panel: #12060a; 1282 --text: #f5f5f5; 1283 --muted: #c8aeb4; 1284 1285 position: relative; 1286 max-width: 1150px; 1287 margin: 30px auto; 1288 padding: 26px; 1289 overflow: hidden; 1290 font-family: 'Orbitron', sans-serif; 1291 color: var(--text); 1292 background: 1293 radial-gradient(circle at top left, rgba(255, 0, 51, .22), transparent 25%), 1294 radial-gradient(circle at bottom right, rgba(255, 40, 80, .14), transparent 30%), 1295 linear-gradient(135deg, #040404, #120008 45%, #09090f); 1296 border: 2px solid rgba(255, 0, 51, .45); 1297 border-radius: 22px; 1298 box-shadow: 1299 0 0 18px rgba(255, 0, 51, .35), 1300 0 0 60px rgba(255, 0, 51, .15), 1301 inset 0 0 25px rgba(255, 0, 51, .08); 1302 } 1303 1304 .blood-cyber-container:before { 1305 content: ""; 1306 position: absolute; 1307 inset: 0; 1308 background: 1309 linear-gradient(rgba(255, 0, 51, .06) 1px, transparent 1px), 1310 linear-gradient(90deg, rgba(255, 0, 51, .06) 1px, transparent 1px); 1311 background-size: 30px 30px; 1312 mask-image: linear-gradient(to bottom, rgba(0, 0, 0, .7), transparent); 1313 animation: gridMove 12s linear infinite; 1314 pointer-events: none; 1315 } 1316 1317 .blood-cyber-container:after { 1318 content: ""; 1319 position: absolute; 1320 inset: -2px; 1321 border-radius: 22px; 1322 padding: 2px; 1323 background: linear-gradient(130deg, #ff0033, #55000e, #ff3355); 1324 -webkit-mask: 1325 linear-gradient(#fff 0 0) content-box, 1326 linear-gradient(#fff 0 0); 1327 -webkit-mask-composite: xor; 1328 mask-composite: exclude; 1329 pointer-events: none; 1330 } 1331 1332 .cyber-section { 1333 position: relative; 1334 margin-bottom: 24px; 1335 padding: 24px; 1336 overflow: hidden; 1337 background: linear-gradient(145deg, rgba(20, 8, 10, .95), rgba(6, 6, 12, .96)); 1338 border: 1px solid rgba(255, 0, 51, .4); 1339 border-radius: 18px; 1340 box-shadow: 1341 0 0 20px rgba(255, 0, 51, .16), 1342 inset 0 0 20px rgba(255, 0, 51, .04); 1343 } 1344 1345 .cyber-section:before, 1346 .cyber-section:after { 1347 content: ""; 1348 position: absolute; 1349 width: 120px; 1350 height: 120px; 1351 border-color: rgba(255, 0, 51, .7); 1352 pointer-events: none; 1353 } 1354 1355 .cyber-section:before { 1356 top: 10px; 1357 left: 10px; 1358 border-top: 2px solid; 1359 border-left: 2px solid; 1360 } 1361 1362 .cyber-section:after { 1363 right: 10px; 1364 bottom: 10px; 1365 border-right: 2px solid; 1366 border-bottom: 2px solid; 1367 } 1368 1369 .cyber-strip { 1370 position: absolute; 1371 top: 0; 1372 left: 0; 1373 width: 100%; 1374 height: 3px; 1375 background: linear-gradient(90deg, transparent, #ff0033, #ff5a70, transparent); 1376 animation: stripMove 3s linear infinite; 1377 } 1378 1379 .cyber-title { 1380 position: relative; 1381 display: inline-block; 1382 margin: 0 0 18px; 1383 padding-bottom: 8px; 1384 font-size: 25px; 1385 font-weight: 700; 1386 letter-spacing: 3px; 1387 text-transform: uppercase; 1388 color: #fff; 1389 text-shadow: 0 0 5px #ff0033, 0 0 15px rgba(255, 0, 51, .8); 1390 } 1391 1392 .cyber-title:after { 1393 content: ""; 1394 position: absolute; 1395 left: 0; 1396 bottom: 0; 1397 width: 100%; 1398 height: 2px; 1399 background: linear-gradient(90deg, #ff0033, transparent); 1400 } 1401 1402 .cyber-section p { 1403 color: var(--muted); 1404 line-height: 1.8; 1405 font-size: 14px; 1406 } 1407 1408 .article-heading { 1409 position: relative; 1410 display: inline-block; 1411 margin: 0 0 22px; 1412 padding: 14px 26px; 1413 1414 font-size: 30px; 1415 font-weight: 700; 1416 letter-spacing: 3px; 1417 text-transform: uppercase; 1418 1419 color: #fff; 1420 1421 background: 1422 linear-gradient(135deg, 1423 rgba(255, 0, 51, .18), 1424 rgba(0, 0, 0, .5)); 1425 1426 border: 1px solid rgba(255, 0, 51, .45); 1427 border-radius: 14px; 1428 1429 box-shadow: 1430 0 0 15px rgba(255, 0, 51, .25), 1431 inset 0 0 12px rgba(255, 0, 51, .08); 1432 1433 text-shadow: 1434 0 0 8px #ff0033, 1435 0 0 18px rgba(255, 0, 51, .7); 1436 1437 overflow: hidden; 1438 } 1439 1440 .article-heading:before { 1441 content: ""; 1442 position: absolute; 1443 top: 0; 1444 left: -120%; 1445 width: 100%; 1446 height: 100%; 1447 1448 background: linear-gradient(120deg, 1449 transparent, 1450 rgba(255, 255, 255, .18), 1451 transparent); 1452 1453 animation: h2shine 4s linear infinite; 1454 } 1455 1456 .article-heading:after { 1457 content: ""; 1458 position: absolute; 1459 left: 12px; 1460 bottom: 8px; 1461 1462 width: 70%; 1463 height: 2px; 1464 1465 background: linear-gradient(90deg, 1466 #ff0033, 1467 transparent); 1468 } 1469 1470 @keyframes h2shine { 1471 100% { 1472 left: 130%; 1473 } 1474 } 1475 1476 @media(max-width:768px) { 1477 .article-heading { 1478 font-size: 22px; 1479 padding: 12px 18px; 1480 letter-spacing: 2px; 1481 } 1482 } 1483 1484 .faq-item { 1485 margin-bottom: 12px; 1486 border-radius: 12px; 1487 overflow: hidden; 1488 border: 1px solid rgba(255, 0, 51, .35); 1489 background: linear-gradient(120deg, rgba(255, 0, 51, .08), rgba(0, 0, 0, .4)); 1490 } 1491 1492 .faq-question { 1493 width: 100%; 1494 padding: 16px 18px; 1495 border: 0; 1496 background: transparent; 1497 color: #fff; 1498 cursor: pointer; 1499 display: flex; 1500 justify-content: space-between; 1501 align-items: center; 1502 font-family: 'Orbitron', sans-serif; 1503 font-size: 14px; 1504 letter-spacing: 1px; 1505 text-align: left; 1506 } 1507 1508 .faq-arrow { 1509 transition: .35s; 1510 color: #ff3355; 1511 font-size: 18px; 1512 text-shadow: 0 0 8px #ff0033; 1513 } 1514 1515 .faq-answer { 1516 max-height: 0; 1517 overflow: hidden; 1518 transition: max-height .35s ease; 1519 padding: 0 18px; 1520 color: var(--muted); 1521 font-size: 13px; 1522 line-height: 1.7; 1523 } 1524 1525 .faq-item.active .faq-answer { 1526 max-height: 260px; 1527 padding-bottom: 18px; 1528 } 1529 1530 .faq-item.active .faq-arrow { 1531 transform: rotate(180deg); 1532 } 1533 1534 .review-slider { 1535 position: relative; 1536 width: 100%; 1537 overflow: hidden; 1538 -webkit-mask-image: linear-gradient(to right, transparent, #000 4%, #000 96%, transparent); 1539 mask-image: linear-gradient(to right, transparent, #000 4%, #000 96%, transparent); 1540 } 1541 1542 .review-track { 1543 display: flex; 1544 gap: 18px; 1545 width: max-content; 1546 will-change: transform; 1547 animation: reviewScroll 24s linear infinite; 1548 } 1549 1550 .review-slider:hover .review-track { 1551 animation-play-state: paused; 1552 } 1553 1554 .review-card { 1555 position: relative; 1556 width: 290px; 1557 min-height: 210px; 1558 padding: 20px; 1559 overflow: hidden; 1560 border-radius: 16px; 1561 background: linear-gradient(160deg, rgba(255, 0, 51, .16), rgba(0, 0, 0, .82)); 1562 border: 1px solid rgba(255, 0, 51, .35); 1563 box-shadow: 1564 0 0 18px rgba(255, 0, 51, .16), 1565 inset 0 0 18px rgba(255, 0, 51, .06); 1566 } 1567 1568 .review-card:before { 1569 content: ""; 1570 position: absolute; 1571 inset: 0; 1572 background: linear-gradient(120deg, transparent, rgba(255, 255, 255, .06), transparent); 1573 transform: translateX(-100%); 1574 animation: shine 4s infinite; 1575 } 1576 1577 .review-card h4 { 1578 margin: 0 0 10px; 1579 font-size: 17px; 1580 color: #fff; 1581 text-shadow: 0 0 8px rgba(255, 0, 51, .6); 1582 } 1583 1584 .rating { 1585 color: #ff4b67; 1586 margin-bottom: 12px; 1587 font-size: 14px; 1588 font-weight: 700; 1589 } 1590 1591 .review-card p { 1592 margin: 0; 1593 font-size: 13px; 1594 line-height: 1.7; 1595 } 1596 1597 @keyframes reviewScroll { 1598 from { 1599 transform: translateX(0); 1600 } 1601 1602 to { 1603 transform: translateX(calc(-50% - 9px)); 1604 } 1605 } 1606 1607 @media (prefers-reduced-motion: reduce) { 1608 .review-track { 1609 animation: none; 1610 } 1611 1612 .review-slider { 1613 overflow-x: auto; 1614 -webkit-mask-image: none; 1615 mask-image: none; 1616 } 1617 } 1618 1619 @keyframes shine { 1620 100% { 1621 transform: translateX(220%) 1622 } 1623 } 1624 1625 @keyframes gridMove { 1626 from { 1627 transform: translateY(0) 1628 } 1629 1630 to { 1631 transform: translateY(30px) 1632 } 1633 } 1634 1635 @keyframes stripMove { 1636 from { 1637 transform: translateX(-100%) 1638 } 1639 1640 to { 1641 transform: translateX(100%) 1642 } 1643 } 1644 1645 @media(max-width:768px) { 1646 .blood-cyber-container { 1647 padding: 16px 1648 } 1649 1650 .cyber-section { 1651 padding: 18px 1652 } 1653 1654 .review-card { 1655 width: 240px 1656 } 1657 1658 .cyber-title { 1659 font-size: 20px 1660 } 1661 } 1662 </style> 1663 1664 <!-- ============================================================ 1665 ARTIKEL, FAQ, DAN TESTIMONI 1666============================================================ --> 1667<div class="blood-cyber-container"> 1668 1669 <div class="cyber-section"> 1670 <div class="cyber-strip"></div> 1671 1672 <h2 class="cyber-title">Bahasan</h2> 1673 1674 <h1 class="article-heading"> 1675 Rill HONDATOTO : Pusat Globalisasi Bandar Toto Slot Resmi Dengan Ratusan Permainan Slot Gacor 1676 </h1> 1677 1678 <p><strong><a href="https://www.eder.info/" style="color: #f10 ;">HONDATOTO</a></strong> membawa gagasan globalisasi permainan ke dalam satu simpul yang menghimpun ratusan judul lintas provider. Di dalam lanskap TOTO SLOT, pengunjung dapat menjumpai ragam tema, format bonus, jalur kemenangan, dan tempo permainan yang berbeda; HONDATOTO menyusun semuanya dalam struktur yang lebih mudah dipahami sehingga keluasan katalog tidak berubah menjadi keruwetan.</p> 1679 <p>Rill HONDATOTO terasa hidup karena TOTO SLOT yang ditampilkan tidak berhenti pada satu selera atau satu generasi permainan. Ada ruang bagi format konvensional, desain modern, serta mekanika baru yang terus bergeser mengikuti pembaruan provider. Dengan antarmuka adaptif dan susunan informasi yang tertib, HONDATOTO membentuk identitas brand sebagai titik temu bagi pengguna yang ingin melihat panorama permainan secara luas namun tetap terarah.</p> 1680 </div> 1681 1682 <div class="cyber-section"> 1683 <div class="cyber-strip"></div> 1684 <h2 class="cyber-title">SEPUTAR FAQ HONDATOTO</h2> 1685 1686<div class="faq-item"> 1687 <button class="faq-question" type="button">Apa yang dimaksud pusat globalisasi permainan pada Rill HONDATOTO? 1688 <span class="faq-arrow">â¼</span> 1689 </button> 1690 <div class="faq-answer">Pusat globalisasi pada Rill HONDATOTO merujuk pada penggabungan banyak gaya permainan dan provider dalam satu ekosistem katalog. TOTO SLOT dari beragam pendekatan desain ditempatkan berdampingan sehingga pengguna dapat melihat perkembangan format permainan secara lebih luas. HONDATOTO berperan
1690sebagai simpul yang menyatukan variasi tersebut dalam navigasi yang tetap konsisten.</div> 1691</div> 1692 1693<div class="faq-item"> 1694 <button class="faq-question" type="button">Bagaimana HONDATOTO mengelola ratusan permainan agar tetap mudah dicari? 1695 <span class="faq-arrow">â¼</span> 1696 </button> 1697 <div class="faq-answer">HONDATOTO memakai pengelompokan berdasarkan provider, karakter fitur, dan corak permainan supaya ratusan TOTO SLOT tidak tersaji sebagai daftar panjang tanpa arah. Struktur ini memudahkan pengguna menyaring pilihan dari kategori luas menuju permainan yang lebih spesifik. HONDATOTO menjaga pola navigasi tetap seragam agar pengguna tidak perlu mempelajari ulang cara memakai setiap bagian.</div> 1698</div> 1699 1700<div class="faq-item"> 1701 <button class="faq-question" type="button">Apakah katalog global HONDATOTO hanya berisi permainan terbaru? 1702 <span class="faq-arrow">â¼</span> 1703 </button> 1704 <div class="faq-answer">Tidak. HONDATOTO dapat memadukan TOTO SLOT yang sudah dikenal dengan rilisan yang lebih baru selama masih relevan dalam katalog. Kombinasi tersebut memberi ruang bagi pengguna yang menyukai format klasik maupun mekanika modern. HONDATOTO menempatkan pembaruan sebagai pelengkap keluasan katalog, bukan alasan untuk menghapus seluruh pilihan lama secara serampangan.</div> 1705</div> 1706 1707<div class="faq-item"> 1708 <button class="faq-question" type="button">Mengapa antarmuka adaptif penting untuk Rill HONDATOTO? 1709 <span class="faq-arrow">â¼</span> 1710 </button> 1711 <div class="faq-answer">Antarmuka adaptif membantu katalog HONDATOTO tetap terbaca pada berbagai ukuran layar, terutama ketika jumlah TOTO SLOT sangat banyak. Pengguna membutuhkan struktur yang cepat dikenali tanpa terlalu banyak perpindahan elemen. Dengan tampilan yang responsif, HONDATOTO mempertahankan ritme penelusuran dan membuat perpindahan antarprovider terasa lebih mulus.</div> 1712</div> 1713 1714<div class="faq-item"> 1715 <button class="faq-question" type="button">Bagaimana identitas HONDATOTO dipertahankan di tengah banyak provider? 1716 <span class="faq-arrow">â¼</span> 1717 </button> 1718 <div class="faq-answer">HONDATOTO menjaga identitas melalui tata navigasi, gaya penyajian, dan pola informasi yang konsisten meskipun TOTO SLOT berasal dari provider berbeda. Pengguna tetap berada dalam kerangka HONDATOTO saat menelusuri katalog. Konsistensi ini membuat halaman global tidak terasa tercerai-berai dan membantu brand tetap mudah dikenali di setiap tahap eksplorasi.</div> 1719</div> 1720 1721 </div> 1722 1723 <div class="cyber-section"> 1724 <div class="cyber-strip"></div> 1725 <h2 class="cyber-title">Ulasan Member HONDATOTO Terbaru</h2> 1726 1727 <div class="review-slider"> 1728 <div class="review-track"> 1729 1730 <!-- ======================================================== 1731 DAFTAR TESTIMONI: 4 ITEM TANPA DUPLIKASI 1732 ========================================================= --> 1733 1734 <div class="review-card"> 1735 <h4>Damar Wiratama</h4> 1736 <div class="rating">â â â â â 5.0</div> 1737 <p>Rill HONDATOTO terasa seperti katalog global yang benar-benar luas. Saya bisa melihat TOTO SLOT dari banyak provider dalam satu alur, dan susunannya tidak membuat saya tersesat. Pembagian kategori sangat membantu ketika ingin membandingkan permainan lama dan rilisan baru.</p> 1738 </div> 1739 1740 <div class="review-card"> 1741 <h4>Citra Lestari</h4> 1742 <div class="rating">â â â â â 5.0</div> 1743 <p>Saya menikmati cara HONDATOTO menggabungkan permainan dari berbagai gaya tanpa membuat halaman terasa campur aduk. Pilihan TOTO SLOT cukup beragam, tetapi tetap ada struktur yang membuat proses pencarian terasa cepat dan masuk akal.</p> 1744 </div> 1745 1746 <div class="review-card"> 1747 <h4>Aditya Baskara</h4> 1748 <div class="rating">â â â â â 4.8</div> 1749 <p>Buat saya, kekuatan HONDATOTO ada pada konsistensi antarmukanya. Meski TOTO SLOT datang dari provider berbeda, cara menemukan informasi tetap sama. Itu membuat katalog besar terasa jauh lebih ringan untuk dijelajahi.</p> 1750 </div> 1751 1752 <div class="review-card"> 1753 <h4>Laras Ayuningtyas</h4> 1754 <div class="rating">â â â â â 4.9</div> 1755 <p>Saya suka halaman Rill HONDATOTO karena tidak hanya mengejar permainan baru. TOTO SLOT dengan format yang lebih klasik tetap punya tempat, berdampingan dengan mekanika modern. Hasilnya katalog terasa lengkap dan tidak cepat membosankan.</p> 1756 </div> 1757 1758 </div> 1759 </div> 1760 </div> 1761
1762 </div> 1763 1764
1764<script> 1765 // Duplikasi kartu sekali saja agar slider horizontal bergerak tanpa jeda. 1766 document.querySelectorAll(".review-track").forEach((track) => { 1767 if (track.dataset.loopReady === "true") return; 1768 1769 const originalCards = Array.from(track.children).filter((item) => 1770 item.classList && item.classList.contains("review-card") 1771 ); 1772 1773 originalCards.forEach((card) => { 1774 const clone = card.cloneNode(true); 1775 clone.setAttribute("aria-hidden", "true"); 1776 track.appendChild(clone); 1777 }); 1778 1779 track.dataset.loopReady = "true"; 1780 }); 1781 1782 document.querySelectorAll(".faq-question").forEach((btn) => { 1783 btn.addEventListener("click", () => { 1784 btn.parentElement.classList.toggle("active"); 1785 }); 1786 }); 1787 </script>
1787 1788 <div class="product-recommendations-carousel"> 1789 <h2 class="mb-1">Customers also purchased</h2> 1790 <div class="glider-contain js-add-product" data-component="recommendations"> 1791 <div class="align-items-center d-flex"> 1792 <div class="glider-arrow"> 1793 <button aria-label="Previous" class="glider-prev disabled" aria-disabled="true"><span 1794 class="sr-only">Previous</span></button> 1795 </div> 1796 <div class="glider draggable"> 1797 1798 1799 1800 1801 1802 1803 1804 1805 <div class="glider-track" style="width: 2740px;"> 1806 <div class="item glider-slide active visible left-2" 1807 data-product-name="20mm Gravel/Shingle Single Trip - Large Bulk Bag" 1808 data-product-id="AGSTB007" data-product-price="112.02" data-product-position="1" 1809 data-gslide="0" style="height: auto; width: 342.5px;"> 1810 <div class="product product--carousel"> 1811 <a href="https://www.eder.info/" 1812 class="link-header link-header--primary"> 1813 <div class="product__thumb"> 1814 <picture class="product__image"> 1815 <img alt="20mm Gravel/Shingle Single Trip - Large Bulk Bag" 1816 title="20mm Gravel/Shingle Single Trip - Large Bulk Bag" 1817 src="https://veldrive.com/LTWfp312/BANNER-HONDATOTO/Pusat%20Globalisasi%20Bandar%20Toto%20Slot%20Resmi%20Dengan%20Ratusan%20Permainan%20Slot%20Gacor.png?updatedAt=1779457881125"> 1818 </picture> 1819 </div> 1820 <div class="product__name">HONDATOTO</div> 1821 </a> 1822 <div class="d-flex flex-column flex-grow-1"> 1823 <p class="flex-grow-1 small" itemprop="sku">SKU: AGSTB007</p> 1824 <div class="loading-text js-recommendations-price-loading d-none"> 1825 <div class="loading-text__text">Loading<span 1826 class="loading-text__ellipsis"></span></div> 1827 </div> 1828 <div class="price-missing__pbp js-recommendations-price-hidden"> 1829 <a href="https://www.eder.info/">See 1830 price</a> 1831 </div> 1832 <div class="price price--medium d-none js-recommendations-price"> 1833 <div class="price__value">£112.02</div> 1834 </div> 1835 <div class="plp__product-quantity mt-3 d-none js-recommendations-cta"> 1836 <div class="product__quantity product__quantity-full js-product-quantity-holder js-add-to-cart-price-available mb-0" 1837 data-product-id="AGSTB007"> 1838 <form id="addToCartForm-AGSTB007" novalidate="true" 1839 action="/trolley/add" method="post"> 1840 <input type="hidden" name="productCode" value="AGSTB007"
1841 id="productCode-AGSTB007"> 1842 <input type="hidden" name="CSRFToken" 1843 value="5ec27316-420b-4a0e-9757-26a66a9a1e6f"> 1844 <div class="form-group form-group--minimal mb-0"> 1845 <div 1846 class="form-group product__quantity-block product__quantity-block--plp flex-wrap mb-0"> 1847 <div 1848 class="js-quantity-modifier product__quantity-inputs mb-1 mr-1"> 1849 <fieldset> 1850 <legend class="sr-only">Quantity</legend> 1851 <div class="d-flex"> 1852 <div 1853 class="product__quantity-input form-group__validation d-inline-block"> 1854 <div class="form-group__element"> 1855 <input id="quantity-AGSTB007" 1856 name="qty" data-max="9999" 1857 data-threshold="999" 1858 value="1" 1859 class="form-control form-control--quantity js-input-quantity" 1860 data-min="1" 1861 aria-label="Quantity input" 1862 required="true" 1863 type="number" size="2"> 1864 </div> 1865 </div> 1866 <div 1867 class="product__quantity-inputs-modifiers d-flex flex-column"> 1868 <button 1869 class="product__quantity-modify product__quantity-modify--plus" 1870 aria-label="Quantity increase" 1871 data-mode="increase"></button> 1872 <button 1873 class="product__quantity-modify product__quantity-modify--minus" 1874 aria-label="Quantity decrease" 1875 data-mode="decrease" 1876 disabled=""></button> 1877 </div> 1878 </div> 1879 </fieldset> 1880 </div> 1881 <div 1882 class="product__quantity-button product__quantity-button--plp d-flex mb-1"> 1883 <button type="submit" 1884 class="btn btn-primary btn--plp"> 1885 <span class="btn__text">Add to 1886 trolley</span> 1887 </button> 1888 </div> 1889 </div> 1890 </div> 1891 </form> 1892 </div> 1893 </div> 1894 </div> 1895 </div> 1896 </div> 1897 <div class="item glider-slide left-1 visible" 1898 data-product-name="20mm Gravel/Shingle Handy Bag" data-product-id="AGSML007" 1899 data-product-price="6.06" data-product-position="2" data-gslide="1" 1900 style="height: auto; width: 342.5px;"> 1901 <div class="product product--carousel"> 1902 <a href="https://www.eder.info/" 1903 class="link-header link-header--primary"> 1904 <div class="product__thumb"> 1905 <picture class="product__image"> 1906 <img alt="Slot Gacor" title="Slot Gacor" 1907 src="https://veldrive.com/LTWfp312/BANNER-HONDATOTO/Pusat%20Globalisasi%20Bandar%20Toto%20Slot%20Resmi%20Dengan%20Ratusan%20Permainan%20Slot%20Gacor.png?updatedAt=1779457881125"> 1908 </picture> 1909 </div> 1910 <div class="product__name">Slot Gacor</div> 1911 </a> 1912 <div class="d-flex flex-column flex-grow-1"> 1913 <p class="flex-grow-1 small" itemprop="sku">SKU: AGSML007</p> 1914 <div class="loading-text js-recommendations-price-loading d-none"> 1915 <div class="loading-text__text">Loading<span 1916 class="loading-text__ellipsis"></span></div> 1917 </div> 1918 <div class="price-missing__pbp js-recommendations-price-hidden"> 1919 <a href="https://www.eder.info/">See 1920 price</a> 1921 </div> 1922 <div class="price price--medium d-none js-recommendations-price"> 1923 <div class="price__value">£6.06</div> 1924 </div> 1925 <div class="plp__product-quantity mt-3 d-none js-recommendations-cta"> 1926 <div class="product__quantity product__quantity-full js-product-quantity-holder js-add-to-cart-price-available mb-0" 1927 data-product-id="AGSML007"> 1928 <form id="addToCartForm-AGSML007" novalidate="true" 1929 action="/trolley/add" method="post">
1930 <input type="hidden" name="productCode" value="AGSML007" 1931 id="productCode-AGSML007"> 1932 <input type="hidden" name="CSRFToken" 1933 value="5ec27316-420b-4a0e-9757-26a66a9a1e6f"> 1934 <div class="form-group form-group--minimal mb-0"> 1935 <div 1936 class="form-group product__quantity-block product__quantity-block--plp flex-wrap mb-0"> 1937 <div 1938 class="js-quantity-modifier product__quantity-inputs mb-1 mr-1"> 1939 <fieldset> 1940 <legend class="sr-only">Quantity</legend> 1941 <div class="d-flex"> 1942 <div 1943 class="product__quantity-input form-group__validation d-inline-block"> 1944 <div class="form-group__element"> 1945 <input id="quantity-AGSML007" 1946 name="qty" data-max="9999" 1947 data-threshold="999" 1948 value="1" 1949 class="form-control form-control--quantity js-input-quantity" 1950 data-min="1" 1951 aria-label="Quantity input" 1952 required="true" 1953 type="number" size="2"> 1954 </div> 1955 </div> 1956 <div 1957 class="product__quantity-inputs-modifiers d-flex flex-column"> 1958 <button 1959 class="product__quantity-modify product__quantity-modify--plus" 1960 aria-label="Quantity increase" 1961 data-mode="increase"></button> 1962 <button 1963 class="product__quantity-modify product__quantity-modify--minus" 1964 aria-label="Quantity decrease" 1965 data-mode="decrease" 1966 disabled=""></button> 1967 </div> 1968 </div> 1969 </fieldset> 1970 </div> 1971 <div 1972 class="product__quantity-button product__quantity-button--plp d-flex mb-1"> 1973 <button type="submit" 1974 class="btn btn-primary btn--plp"> 1975 <span class="btn__text">Add to 1976 trolley</span> 1977 </button> 1978 </div> 1979 </div> 1980 </div> 1981 </form> 1982 </div> 1983 </div> 1984 </div> 1985 </div> 1986 </div> 1987 <div class="item glider-slide center visible" 1988 data-product-name="10mm Gravel/Shingle Single Trip - Large Bulk Bag" 1989 data-product-id="AGSTB006" data-product-price="112.02" data-product-position="3" 1990 data-gslide="2" style="height: auto; width: 342.5px;"> 1991 <div class="product product--carousel"> 1992 <a href="https://www.eder.info/" 1993 class="link-header link-header--primary"> 1994 <div class="product__thumb"> 1995 <picture class="product__image"> 1996 <img alt="Slot Online" title="Slot Online" 1997 src="https://veldrive.com/LTWfp312/BANNER-HONDATOTO/Pusat%20Globalisasi%20Bandar%20Toto%20Slot%20Resmi%20Dengan%20Ratusan%20Permainan%20Slot%20Gacor.png?updatedAt=1779457881125"> 1998 </picture> 1999 </div> 2000 <div class="product__name">Slot Online</div> 2001 </a> 2002 <div class="d-flex flex-column flex-grow-1"> 2003 <p class="flex-grow-1 small" itemprop="sku">SKU: AGSTB006</p> 2004 <div class="loading-text js-recommendations-price-loading d-none"> 2005 <div class="loading-text__text">Loading<span 2006 class="loading-text__ellipsis"></span></div> 2007 </div> 2008 <div class="price-missing__pbp js-recommendations-price-hidden"> 2009 <a href="https://www.eder.info/">See 2010 price</a> 2011 </div> 2012 <div class="price price--medium d-none js-recommendations-price"> 2013 <div class="price__value">£112.02</div> 2014 </div> 2015 <div class="plp__product-quantity mt-3 d-none js-recommendations-cta"> 2016 <div class="product__quantity product__quantity-full js-product-quantity-holder js-add-to-cart-price-available mb-0" 2017 data-product-id="AGSTB006"> 2018 <form id="addToCartForm-AGSTB006" novalidate="true" 2019 action="/trolley/add" method="post">
2020 <input type="hidden" name="productCode" value="AGSTB006" 2021 id="productCode-AGSTB006"> 2022 <input type="hidden" name="CSRFToken" 2023 value="5ec27316-420b-4a0e-9757-26a66a9a1e6f"> 2024 <div class="form-group form-group--minimal mb-0"> 2025 <div 2026 class="form-group product__quantity-block product__quantity-block--plp flex-wrap mb-0"> 2027 <div 2028 class="js-quantity-modifier product__quantity-inputs mb-1 mr-1"> 2029 <fieldset> 2030 <legend class="sr-only">Quantity</legend> 2031 <div class="d-flex"> 2032 <div 2033 class="product__quantity-input form-group__validation d-inline-block"> 2034 <div class="form-group__element"> 2035 <input id="quantity-AGSTB006" 2036 name="qty" data-max="9999" 2037 data-threshold="999" 2038 value="1" 2039 class="form-control form-control--quantity js-input-quantity" 2040 data-min="1" 2041 aria-label="Quantity input" 2042 required="true" 2043 type="number" size="2"> 2044 </div> 2045 </div> 2046 <div 2047 class="product__quantity-inputs-modifiers d-flex flex-column"> 2048 <button 2049 class="product__quantity-modify product__quantity-modify--plus" 2050 aria-label="Quantity increase" 2051 data-mode="increase"></button> 2052 <button 2053 class="product__quantity-modify product__quantity-modify--minus" 2054 aria-label="Quantity decrease" 2055 data-mode="decrease" 2056 disabled=""></button> 2057 </div> 2058 </div> 2059 </fieldset> 2060 </div> 2061 <div 2062 class="product__quantity-button product__quantity-button--plp d-flex mb-1"> 2063 <button type="submit" 2064 class="btn btn-primary btn--plp"> 2065 <span class="btn__text">Add to 2066 trolley</span> 2067 </button> 2068 </div> 2069 </div> 2070 </div> 2071 </form> 2072 </div> 2073 </div> 2074 </div> 2075 </div> 2076 </div> 2077 <div class="item glider-slide center" 2078 data-product-name="Jewson Scalpings Single Trip - Large Bulk Bag" 2079 data-product-id="AGSTB017" data-product-price="110.56" data-product-position="4" 2080 data-gslide="3" style="height: auto; width: 342.5px;"> 2081 <div class="product product--carousel"> 2082 <a href="https://www.eder.info/" 2083 class="link-header link-header--primary"> 2084 <div class="product__thumb"> 2085 <picture class="product__image"> 2086 <img alt="Bandar Slot" title="Bandar Slot" 2087 src="https://veldrive.com/LTWfp312/BANNER-HONDATOTO/Pusat%20Globalisasi%20Bandar%20Toto%20Slot%20Resmi%20Dengan%20Ratusan%20Permainan%20Slot%20Gacor.png?updatedAt=1779457881125"> 2088 </picture> 2089 </div> 2090 <div class="product__name">Bandar Slot 2091 </div> 2092 </a> 2093 <div class="d-flex flex-column flex-grow-1"> 2094 <p class="flex-grow-1 small" itemprop="sku">SKU: AGSTB017</p> 2095 <div class="loading-text js-recommendations-price-loading d-none"> 2096 <div class="loading-text__text">Loading<span 2097 class="loading-text__ellipsis"></span></div> 2098 </div> 2099 <div class="price-missing__pbp js-recommendations-price-hidden"> 2100 <a href="https://www.eder.info/">See 2101 price</a> 2102 </div> 2103 <div class="price price--medium d-none js-recommendations-price"> 2104 <div class="price__value">£110.56</div> 2105 </div> 2106 <div class="plp__product-quantity mt-3 d-none js-recommendations-cta"> 2107 <div class="product__quantity product__quantity-full js-product-quantity-holder js-add-to-cart-price-available mb-0" 2108 data-product-id="AGSTB017"> 2109 <form id="addToCartForm-AGSTB017" novalidate="true" 2110 action="/trolley/add" method="post">
2111 <input type="hidden" name="productCode" value="AGSTB017" 2112 id="productCode-AGSTB017"> 2113 <input type="hidden" name="CSRFToken" 2114 value="5ec27316-420b-4a0e-9757-26a66a9a1e6f"> 2115 <div class="form-group form-group--minimal mb-0"> 2116 <div 2117 class="form-group product__quantity-block product__quantity-block--plp flex-wrap mb-0"> 2118 <div 2119 class="js-quantity-modifier product__quantity-inputs mb-1 mr-1"> 2120 <fieldset> 2121 <legend class="sr-only">Quantity</legend> 2122 <div class="d-flex"> 2123 <div 2124 class="product__quantity-input form-group__validation d-inline-block"> 2125 <div class="form-group__element"> 2126 <input id="quantity-AGSTB017" 2127 name="qty" data-max="9999" 2128 data-threshold="999" 2129 value="1" 2130 class="form-control form-control--quantity js-input-quantity" 2131 data-min="1" 2132 aria-label="Quantity input" 2133 required="true" 2134 type="number" size="2"> 2135 </div> 2136 </div> 2137 <div 2138 class="product__quantity-inputs-modifiers d-flex flex-column"> 2139 <button 2140 class="product__quantity-modify product__quantity-modify--plus" 2141 aria-label="Quantity increase" 2142 data-mode="increase"></button> 2143 <button 2144 class="product__quantity-modify product__quantity-modify--minus" 2145 aria-label="Quantity decrease" 2146 data-mode="decrease" 2147 disabled=""></button> 2148 </div> 2149 </div> 2150 </fieldset> 2151 </div> 2152 <div 2153 class="product__quantity-button product__quantity-button--plp d-flex mb-1"> 2154 <button type="submit" 2155 class="btn btn-primary btn--plp"> 2156 <span class="btn__text">Add to 2157 trolley</span> 2158 </button> 2159 </div> 2160 </div> 2161 </div> 2162 </form> 2163 </div> 2164 </div> 2165 </div> 2166 </div> 2167 </div> 2168 <div class="item glider-slide right-1" 2169 data-product-name="Building Sand Single Trip - Large Bulk Bag" 2170 data-product-id="AGSTB001" data-product-price="107.82" data-product-position="5" 2171 data-gslide="4" style="height: auto; width: 342.5px;"> 2172 <div class="product product--carousel"> 2173 <a href="https://www.eder.info/" 2174 class="link-header link-header--primary"> 2175 <div class="product__thumb"> 2176 <picture class="product__image"> 2177 <img alt="HONDATOTO Resmi" title="HONDATOTO Resmi" 2178 src="https://veldrive.com/LTWfp312/BANNER-HONDATOTO/Pusat%20Globalisasi%20Bandar%20Toto%20Slot%20Resmi%20Dengan%20Ratusan%20Permainan%20Slot%20Gacor.png?updatedAt=1779457881125"> 2179 </picture> 2180 </div> 2181 <div class="product__name">HONDATOTO Resmi 2182 </div> 2183 </a> 2184 <div class="d-flex flex-column flex-grow-1"> 2185 <p class="flex-grow-1 small" itemprop="sku">SKU: AGSTB001</p> 2186 <div class="loading-text js-recommendations-price-loading d-none"> 2187 <div class="loading-text__text">Loading<span 2188 class="loading-text__ellipsis"></span></div> 2189 </div> 2190 <div class="price-missing__pbp js-recommendations-price-hidden"> 2191 <a href="https://www.eder.info/">See 2192 price</a> 2193 </div> 2194 <div class="price price--medium d-none js-recommendations-price"> 2195 <div class="price__value">£107.82</div> 2196 </div> 2197 <div class="plp__product-quantity mt-3 d-none js-recommendations-cta"> 2198 <div class="product__quantity product__quantity-full js-product-quantity-holder js-add-to-cart-price-available mb-0" 2199 data-product-id="AGSTB001"> 2200 <form id="addToCartForm-AGSTB001" novalidate="true" 2201 action="/trolley/add" method="post">
2202 <input type="hidden" name="productCode" value="AGSTB001" 2203 id="productCode-AGSTB001"> 2204 <input type="hidden" name="CSRFToken" 2205 value="5ec27316-420b-4a0e-9757-26a66a9a1e6f"> 2206 <div class="form-group form-group--minimal mb-0"> 2207 <div 2208 class="form-group product__quantity-block product__quantity-block--plp flex-wrap mb-0"> 2209 <div 2210 class="js-quantity-modifier product__quantity-inputs mb-1 mr-1"> 2211 <fieldset> 2212 <legend class="sr-only">Quantity</legend> 2213 <div class="d-flex"> 2214 <div 2215 class="product__quantity-input form-group__validation d-inline-block"> 2216 <div class="form-group__element"> 2217 <input id="quantity-AGSTB001" 2218 name="qty" data-max="9999" 2219 data-threshold="999" 2220 value="1" 2221 class="form-control form-control--quantity js-input-quantity" 2222 data-min="1" 2223 aria-label="Quantity input" 2224 required="true" 2225 type="number" size="2"> 2226 </div> 2227 </div> 2228 <div 2229 class="product__quantity-inputs-modifiers d-flex flex-column"> 2230 <button 2231 class="product__quantity-modify product__quantity-modify--plus" 2232 aria-label="Quantity increase" 2233 data-mode="increase"></button> 2234 <button 2235 class="product__quantity-modify product__quantity-modify--minus" 2236 aria-label="Quantity decrease" 2237 data-mode="decrease" 2238 disabled=""></button> 2239 </div> 2240 </div> 2241 </fieldset> 2242 </div> 2243 <div 2244 class="product__quantity-button product__quantity-button--plp d-flex mb-1"> 2245 <button type="submit" 2246 class="btn btn-primary btn--plp"> 2247 <span class="btn__text">Add to 2248 trolley</span> 2249 </button> 2250 </div> 2251 </div> 2252 </div> 2253 </form> 2254 </div> 2255 </div> 2256 </div> 2257 </div> 2258 </div> 2259 <div class="item glider-slide right-2" 2260 data-product-name="MOT Type-1 Sub-Base Handy Bag" data-product-id="AGSML020" 2261 data-product-price="6.86" data-product-position="6" data-gslide="5" 2262 style="height: auto; width: 342.5px;"> 2263 <div class="product product--carousel"> 2264 <a href="https://www.eder.info/" 2265 class="link-header link-header--primary"> 2266 <div class="product__thumb"> 2267 <picture class="product__image"> 2268 <img alt="HONDATOTO Slot" title="HONDATOTO Slot" 2269 src="https://veldrive.com/LTWfp312/BANNER-HONDATOTO/Pusat%20Globalisasi%20Bandar%20Toto%20Slot%20Resmi%20Dengan%20Ratusan%20Permainan%20Slot%20Gacor.png?updatedAt=1779457881125"> 2270 </picture> 2271 </div> 2272 <div class="product__name">HONDATOTO Slot</div> 2273 </a> 2274 <div class="d-flex flex-column flex-grow-1"> 2275 <p class="flex-grow-1 small" itemprop="sku">SKU: AGSML020</p> 2276 <div class="loading-text js-recommendations-price-loading d-none"> 2277 <div class="loading-text__text">Loading<span 2278 class="loading-text__ellipsis"></span></div> 2279 </div> 2280 <div class="price-missing__pbp js-recommendations-price-hidden"> 2281 <a href="https://www.eder.info/">See 2282 price</a> 2283 </div> 2284 <div class="price price--medium d-none js-recommendations-price"> 2285 <div class="price__value">£6.86</div> 2286 </div> 2287 <div class="plp__product-quantity mt-3 d-none js-recommendations-cta"> 2288 <div class="product__quantity product__quantity-full js-product-quantity-holder js-add-to-cart-price-available mb-0" 2289 data-product-id="AGSML020"> 2290 <form id="addToCartForm-AGSML020" novalidate="true" 2291 action="/trolley/add" method="post">
2292 <input type="hidden" name="productCode" value="AGSML020" 2293 id="productCode-AGSML020"> 2294 <input type="hidden" name="CSRFToken" 2295 value="5ec27316-420b-4a0e-9757-26a66a9a1e6f"> 2296 <div class="form-group form-group--minimal mb-0"> 2297 <div 2298 class="form-group product__quantity-block product__quantity-block--plp flex-wrap mb-0"> 2299 <div 2300 class="js-quantity-modifier product__quantity-inputs mb-1 mr-1"> 2301 <fieldset> 2302 <legend class="sr-only">Quantity</legend> 2303 <div class="d-flex"> 2304 <div 2305 class="product__quantity-input form-group__validation d-inline-block"> 2306 <div class="form-group__element"> 2307 <input id="quantity-AGSML020" 2308 name="qty" data-max="9999" 2309 data-threshold="999" 2310 value="1" 2311 class="form-control form-control--quantity js-input-quantity" 2312 data-min="1" 2313 aria-label="Quantity input" 2314 required="true" 2315 type="number" size="2"> 2316 </div> 2317 </div> 2318 <div 2319 class="product__quantity-inputs-modifiers d-flex flex-column"> 2320 <button 2321 class="product__quantity-modify product__quantity-modify--plus" 2322 aria-label="Quantity increase" 2323 data-mode="increase"></button> 2324 <button 2325 class="product__quantity-modify product__quantity-modify--minus" 2326 aria-label="Quantity decrease" 2327 data-mode="decrease" 2328 disabled=""></button> 2329 </div> 2330 </div> 2331 </fieldset> 2332 </div> 2333 <div 2334 class="product__quantity-button product__quantity-button--plp d-flex mb-1"> 2335 <button type="submit" 2336 class="btn btn-primary btn--plp"> 2337 <span class="btn__text">Add to 2338 trolley</span> 2339 </button> 2340 </div> 2341 </div> 2342 </div> 2343 </form> 2344 </div> 2345 </div> 2346 </div> 2347 </div> 2348 </div> 2349 <div class="item glider-slide right-3" 2350 data-product-name="FSC Sawn Carcassing Treated Green 19 x 100 x 1800mm" 2351 data-product-id="SZGFGR18" data-product-price="3.44" data-product-position="7" 2352 data-gslide="6" style="height: auto; width: 342.5px;"> 2353 <div class="product product--carousel"> 2354 <a href="https://www.eder.info/" 2355 class="link-header link-header--primary"> 2356 <div class="product__thumb"> 2357 <picture class="product__image"> 2358 <img alt="Bandar Slot" title="Bandar Slot" 2359 src="https://veldrive.com/LTWfp312/BANNER-HONDATOTO/Pusat%20Globalisasi%20Bandar%20Toto%20Slot%20Resmi%20Dengan%20Ratusan%20Permainan%20Slot%20Gacor.png?updatedAt=1779457881125"> 2360 </picture> 2361 </div> 2362 <div class="product__name">Bandar Slot</div> 2363 </a> 2364 <div class="d-flex flex-column flex-grow-1"> 2365 <p class="flex-grow-1 small" itemprop="sku">SKU: SZGFGR18</p> 2366 <div class="loading-text js-recommendations-price-loading d-none"> 2367 <div class="loading-text__text">Loading<span 2368 class="loading-text__ellipsis"></span></div> 2369 </div> 2370 <div class="price-missing__pbp js-recommendations-price-hidden"> 2371 <a href="https://www.eder.info/">See 2372 price</a> 2373 </div> 2374 <div class="price price--medium d-none js-recommendations-price"> 2375 <div class="price__value">£3.44</div> 2376 </div> 2377 <div class="plp__product-quantity mt-3 d-none js-recommendations-cta"> 2378 <div class="product__quantity product__quantity-full js-product-quantity-holder js-add-to-cart-price-available mb-0" 2379 data-product-id="SZGFGR18"> 2380 <form id="addToCartForm-SZGFGR18" novalidate="true" 2381 action="/trolley/add" method="post">
2382 <input type="hidden" name="productCode" value="SZGFGR18" 2383 id="productCode-SZGFGR18"> 2384 <input type="hidden" name="CSRFToken" 2385 value="5ec27316-420b-4a0e-9757-26a66a9a1e6f"> 2386 <div class="form-group form-group--minimal mb-0"> 2387 <div 2388 class="form-group product__quantity-block product__quantity-block--plp flex-wrap mb-0"> 2389 <div 2390 class="js-quantity-modifier product__quantity-inputs mb-1 mr-1"> 2391 <fieldset> 2392 <legend class="sr-only">Quantity</legend> 2393 <div class="d-flex"> 2394 <div 2395 class="product__quantity-input form-group__validation d-inline-block"> 2396 <div class="form-group__element"> 2397 <input id="quantity-SZGFGR18" 2398 name="qty" data-max="9999" 2399 data-threshold="999" 2400 value="1" 2401 class="form-control form-control--quantity js-input-quantity" 2402 data-min="1" 2403 aria-label="Quantity input" 2404 required="true" 2405 type="number" size="2"> 2406 </div> 2407 </div> 2408 <div 2409 class="product__quantity-inputs-modifiers d-flex flex-column"> 2410 <button 2411 class="product__quantity-modify product__quantity-modify--plus" 2412 aria-label="Quantity increase" 2413 data-mode="increase"></button> 2414 <button 2415 class="product__quantity-modify product__quantity-modify--minus" 2416 aria-label="Quantity decrease" 2417 data-mode="decrease" 2418 disabled=""></button> 2419 </div> 2420 </div> 2421 </fieldset> 2422 </div> 2423 <div 2424 class="product__quantity-button product__quantity-button--plp d-flex mb-1"> 2425 <button type="submit" 2426 class="btn btn-primary btn--plp"> 2427 <span class="btn__text">Add to 2428 trolley</span> 2429 </button> 2430 </div> 2431 </div> 2432 </div> 2433 </form> 2434 </div> 2435 </div> 2436 </div> 2437 </div> 2438 </div> 2439 <div class="item glider-slide right-4" 2440 data-product-name="Grit Sand Single Trip - Large Bulk Bag" 2441 data-product-id="AGSTB015" data-product-price="111.56" data-product-position="8" 2442 data-gslide="7" style="height: auto; width: 342.5px;"> 2443 <div class="product product--carousel"> 2444 <a href="https://www.eder.info/" 2445 class="link-header link-header--primary"> 2446 <div class="product__thumb"> 2447 <picture class="product__image"> 2448 <img alt="HONDATOTO Utama" title="HONDATOTO Utama" 2449 src="https://veldrive.com/LTWfp312/BANNER-HONDATOTO/Pusat%20Globalisasi%20Bandar%20Toto%20Slot%20Resmi%20Dengan%20Ratusan%20Permainan%20Slot%20Gacor.png?updatedAt=1779457881125"> 2450 </picture> 2451 </div> 2452 <div class="product__name">HONDATOTO Utama</div> 2453 </a> 2454 <div class="d-flex flex-column flex-grow-1"> 2455 <p class="flex-grow-1 small" itemprop="sku">SKU: AGSTB015</p> 2456 <div class="loading-text js-recommendations-price-loading d-none"> 2457 <div class="loading-text__text">Loading<span 2458 class="loading-text__ellipsis"></span></div> 2459 </div> 2460 <div class="price-missing__pbp js-recommendations-price-hidden"> 2461 <a href="https://www.eder.info/">See 2462 price</a> 2463 </div> 2464 <div class="price price--medium d-none js-recommendations-price"> 2465 <div class="price__value">£111.56</div> 2466 </div> 2467 <div class="plp__product-quantity mt-3 d-none js-recommendations-cta"> 2468 <div class="product__quantity product__quantity-full js-product-quantity-holder js-add-to-cart-price-available mb-0" 2469 data-product-id="AGSTB015"> 2470 <form id="addToCartForm-AGSTB015" novalidate="true" 2471 action="/trolley/add" method="post">
2472 <input type="hidden" name="productCode" value="AGSTB015" 2473 id="productCode-AGSTB015"> 2474 <input type="hidden" name="CSRFToken" 2475 value="5ec27316-420b-4a0e-9757-26a66a9a1e6f"> 2476 <div class="form-group form-group--minimal mb-0"> 2477 <div 2478 class="form-group product__quantity-block product__quantity-block--plp flex-wrap mb-0"> 2479 <div 2480 class="js-quantity-modifier product__quantity-inputs mb-1 mr-1"> 2481 <fieldset> 2482 <legend class="sr-only">Quantity</legend> 2483 <div class="d-flex"> 2484 <div 2485 class="product__quantity-input form-group__validation d-inline-block"> 2486 <div class="form-group__element"> 2487 <input id="quantity-AGSTB015" 2488 name="qty" data-max="9999" 2489 data-threshold="999" 2490 value="1" 2491 class="form-control form-control--quantity js-input-quantity" 2492 data-min="1" 2493 aria-label="Quantity input" 2494 required="true" 2495 type="number" size="2"> 2496 </div> 2497 </div> 2498 <div 2499 class="product__quantity-inputs-modifiers d-flex flex-column"> 2500 <button 2501 class="product__quantity-modify product__quantity-modify--plus" 2502 aria-label="Quantity increase" 2503 data-mode="increase"></button> 2504 <button 2505 class="product__quantity-modify product__quantity-modify--minus" 2506 aria-label="Quantity decrease" 2507 data-mode="decrease" 2508 disabled=""></button> 2509 </div> 2510 </div> 2511 </fieldset> 2512 </div> 2513 <div 2514 class="product__quantity-button product__quantity-button--plp d-flex mb-1"> 2515 <button type="submit" 2516 class="btn btn-primary btn--plp"> 2517 <span class="btn__text">Add to 2518 trolley</span> 2519 </button> 2520 </div> 2521 </div> 2522 </div> 2523 </form> 2524 </div> 2525 </div> 2526 </div> 2527 </div> 2528 </div> 2529 </div> 2530 </div> 2531 <div class="glider-arrow"> 2532 <button aria-label="Next" class="glider-next" aria-disabled="false"><span 2533 class="sr-only">Next</span></button> 2534 </div> 2535 </div> 2536 <div role="tablist" class="dots glider-dots"><button data-index="0" aria-label="Page 1" 2537 role="tab" class="glider-dot active"></button><button data-index="1" aria-label="Page 2" 2538 role="tab" class="glider-dot "></button></div> 2539 </div> 2540 </div> 2541 <div id="alternativeProductsCompponent"> 2542 <div class="yCmsContentSlot js-track-carousel" data-slotname="AlternativeProducts"> 2543 </div> 2544 </div> 2545 <div class="yCmsContentSlot js-track-carousel" data-slotname="UpSelling"> 2546 </div> 2547 <div class="yCmsContentSlot js-track-carousel" data-slotname="CrossSelling"> 2548 </div> 2549
2549<script type="text/javascript"> 2550 var ACC = ACC || {}; 2551 ACC.checkStockMessages = { 2552 stockShowFullDetailsLink: 'Full branch details', 2553 selectThisStoreButton: 'Select branch', 2554 nearestStoreMessage1: 'Your nearest', 2555 nearestStoreMessage2: 'HONDATOTOs', 2556 stockClosedMessage: 'Closed', 2557 stockOpenMessage: 'Open', 2558 stockTodayMessage: 'today', 2559 selectDeliveryButton: 'Select delivery', 2560 stockDeliveryToMessage: 'Delivery to', 2561 stockAvailableMessage: 'Available', 2562 stockEmptyMessage: 'Out of stock', 2563 stockEmptyMessageDropship: 'Product unavailable for collection', 2564 stockCollectTomorrowMessage: 'Available to collect tomorrow from', 2565 stockCollectFromMessage: 'Available to collect from', 2566 stockCollectTodayMessage: 'Available to collect today from', 2567 stockCollectTodayAfterOpeningMessage: 'Available to collect tomorrow from', 2568 remoteDeliveryMessage: "(subject to location)", 2569 deliveryUnavailableMessage: 'Out of stock', 2570 deliveryAvailableMessage: 'Available for delivery', 2571 collectionAverageSupplierLeadTimeMessage_1_TO_3_DAYS: 'Available to collect in approximately 1-3 working days', 2572 collectionAverageSupplierLeadTimeMessage_4_TO_7_DAYS: 'Available to collect in approximately 4-7 working days', 2573 collectionAverageSupplierLeadTimeMessage_1_TO_2_WEEKS: 'Available to collect in approximately 1-2 weeks', 2574 collectionAverageSupplierLeadTimeMessage_2_TO_4_WEEKS: 'Available to collect in approximately 2-4 weeks', 2575 collectionAverageSupplierLeadTimeMessage_4_TO_8_WEEKS: 'Available to collect in approximately 4-8 weeks', 2576 collectionAverageSupplierLeadTimeMessage_6_TO_12_WEEKS: 'Available to collect in approximately 6-12 weeks', 2577 collectionAverageSupplierLeadTimeMessage_CONTACT_BRANCH: 'We will contact you to discuss a collection date upon purchase.', 2578 deliveryAverageSupplierLeadTimeMessage_1_TO_3_DAYS: 'Available for delivery in approximately 1-3 working days', 2579 deliveryAverageSupplierLeadTimeMessage_4_TO_7_DAYS: 'Available for delivery in approximately 4-7 working days', 2580 deliveryAverageSupplierLeadTimeMessage_1_TO_2_WEEKS: 'Available for delivery in approximately 1-2 weeks', 2581 deliveryAverageSupplierLeadTimeMessage_2_TO_4_WEEKS: 'Available for delivery in approximately 2-4 weeks', 2582 deliveryAverageSupplierLeadTimeMessage_4_TO_8_WEEKS: 'Available for delivery in approximately 4-8 weeks', 2583 deliveryAverageSupplierLeadTimeMessage_6_TO_12_WEEKS: 'Available for delivery in approximately 6-12 weeks', 2584 deliveryAverageSupplierLeadTimeMessage_CONTACT_BRANCH: 'We will contact you to discuss a delivery date upon purchase.', 2585 supplierChallengeLeadTimeMessage: 'Please see trolley for availability', 2586 hasAlternativeProducts: false, 2587 productAlternativesMessage: 'View alternative products', 2588 alternativeMessageSingle: 'Consider this alternative...', 2589 alternativeMessage2To3: 'Consider these', 2590 alternativeMessage4More: 'Consider this list of', 2591 alternativesMessageSuffix: 'alternatives...', 2592 alternativesMoreDetails: 'More Details', 2593 alternativesViewAll: 'View All', 2594 alternativesMissingThumbnail: '/_ui/responsive/common/images/missing-product-96x96.png', 2595 alternativesContactBranchForPrice: 'Contact branch for price', 2596 increasedLeadTimeMessage: '', 2597 notBlankProductStockCheckFormProductCode: 'Please enter your postcode to proceed', 2598 isB2BUser: false, 2599 showVatPrices: true 2600 } 2601 </script>
2601 2602 2603 <div class="modal micromodal-slide check-stock-modal" id="modal-pdp-stock" aria-hidden="true"> 2604 <div class="modal__overlay" tabindex="-1" data-micromodal-close> 2605 <div class="modal__container check-stock-modal__container" role="dialog" aria-modal="true"> 2606 <header class="modal__header check-stock-modal__header"> 2607 <h3 class="modal__title" id="modal-pdp-stock-title"> 2608 Check for your nearest stock</h3> 2609 <button class="modal__close" aria-label="Close" data-micromodal-close>Close</button> 2610 </header> 2611 <div class="modal__content check-stock-modal__content my-2" id="modal-pdp-stockcontent"> 2612 <div class="js-stock-check-form check-stock-modal__form"> 2613 <div class="row"> 2614 <div class="col-md-9"> 2615 <form id="pdpStockCheckFormModal" class="form-postcode js-store-search" 2616 action="#" method="post"> 2617 <div class="input-group form-group mb-2"> 2618 <div class="form-group__validation flex-grow-1"> 2619 <div class="form-group__element"> 2620 <input type="text" id="storeSearch" class="form-control" 2621 name="locationQuery" placeholder="Postcode" 2622 aria-label="Postcode" /> 2623 </div> 2624 </div> 2625 <div class="d-flex"> 2626 <span class="input-group-btn flex-grow-1"> 2627 <div class="form-group m-0 ml-sm-1 text-center h-100"> 2628 <button 2629 class="btn btn-primary btn--branch-search h-100 js-modal-nearest-stock-modal"> 2630 Search</button> 2631 </div> 2632 </span> 2633 <span class="input-group-btn"> 2634 <div class="form-group m-0 ml-1 text-center h-100"> 2635 <button 2636 class="btn btn-tertiary btn--branch-search-location glyph glyph--current-location h-100" 2637 data-modal-geolocate /> 2638 <span class="sr-only">Use my location</span> 2639 </button> 2640 </div> 2641 </span> 2642 </div> 2643 </div> 2644 <div class="input-group"> 2645 <div class="form-group checkbox mb-0"> 2646 <input id="inStock" data-validation-for="checkbox" 2647 required="false" name="inStock" role="group" 2648 class="checkbox__input sr-only js-checkbox-stock" 2649 type="checkbox" value="inStock" 2650 aria-labelledby="inStockLabel" checked> 2651 <label id="inStockLabel" class="checkbox__label mb-0 strong" 2652 for="inStock"> 2653 Show nearest branches with stock</label> 2654 </div> 2655 </div> 2656 <input id="pdpModalCollectionLastPostcode" name="collectionLastPostcode" 2657 type="hidden" value="" /><input id="pdpModalproductCode" 2658 name="productCode" type="hidden" value="CDPW0469" /><input 2659 id="pdpModalCurrentPage" name="currentPage" value="0" type="hidden" 2660 value="" /> 2661 <div> 2662 <input type="hidden" name="CSRFToken" 2663 value="5ec27316-420b-4a0e-9757-26a66a9a1e6f" /> 2664 </div> 2665 </form> 2666 </div> 2667 </div> 2668 </div> 2669 2670 <div class="js-stock-check-results js-remember-fulfillment check-stock-modal__results"> 2671 <div class="js-store-search-error"></div> 2672 <hr class="hr--default" /> 2673 <div class="mb-2"> 2674 <p class="strong mb-0">Stock is confirmed once you reserve your order</p> 2675 <p class="js-alt-stock-messaging d-none">It is your responsibility when choosing 2676 suitable alternatives for your needs</p> 2677 </div> 2678 <div class="tabs tabs--stretch tabs--pdp" data-tabs> 2679 <ul class="tabs__list" role="tablist"> 2680 <li class="tabs__list-item active"> 2681 <a class="tabs__link" href="#collection" data-tabs-head 2682 data-pdp-select="collection"><span class="d-none d-md-block">Click 2683 & Collect Branches</span><span 2684 class="d-md-none">Collection</span></a> 2685 </li> 2686 <li class="tabs__list-item"> 2687 <a class="tabs__link" href="#delivery" data-tabs-head 2688 data-pdp-select="delivery"><span 2689 class="d-none d-md-block">Delivery</span><span 2690 class="d-md-none">Delivery</span></a> 2691 </li> 2692 </ul> 2693 <div class="tabs__content"> 2694 <div data-tabs-content class="tabs__content-panel active" id="collection"> 2695 <div class="tabs__content-panel-results"></div> 2696 <div id="loadMoreSection" 2697 class="text-center check-stock-modal__load-more"> 2698 <form id="pdpStockCheckFormSection" class="js-store-search" 2699 action="#" method="post"><input type="hidden" 2700 id="loadMoreSectionStoreSearch" 2701 class="form-control form-control--search" 2702 name="locationQuery" /> 2703 2704 <div class="text-center px-2"> 2705 <button type="submit" 2706 class="btn btn-tertiary mt-1 mb-1 mb-md-0 js-modal-nearest-stock-modal" 2707 id="loadMoreButton"> 2708 Load More</button> 2709 </div> 2710 2711 <input type="hidden" id="pdpLoadMoreSectionCurrentPage" 2712 name="currentPage" /> 2713 <input type="hidden" id="pdpLoadMoreSectionInStock" 2714 required="false" name="inStock"> 2715 2716 <input id="pdpLoadMoreSectionProductCode" name="productC
2716ode" 2717 type="hidden" value="CDPW0469" /> 2718 <div> 2719 <input type="hidden" name="CSRFToken" 2720 value="5ec27316-420b-4a0e-9757-26a66a9a1e6f" /> 2721 </div> 2722 </form> 2723 </div> 2724 </div> 2725 <div data-tabs-content class="tabs__content-panel" id="delivery"> 2726 <div class="tabs__content-panel-results"></div> 2727 </div> 2728 </div> 2729 </div> 2730 </div> 2731 </div> 2732 </div> 2733 </div> 2734 </div> 2735 </div> 2736 </div> 2737 2738 <div id="js-modals-container"> 2739 2740 </div> 2741 2742 </main> 2743 <footer class="footer" data-tracking-block="footer"> 2744 2745 2746 <div class="footer__inner" data-tracking-position="quick-links"> 2747 <div class="container"> 2748 <div class="row"> 2749 <div class="accordion accordion--xs accordion--all js-accordion col-12"> 2750 <div class="row m-0"> 2751 <div class="footer__section col-12 col-lg-3"> 2752 <div class="accordion-toggle__content mb-0 js-accordion-content"> 2753 <span 2754 class="h3 footer__heading footer__heading--accordion accordion-toggle__title js-accordion-toggle"> 2755 Helpful links</span> 2756 <div class="accordion-toggle__inner"> 2757 <ul class="footer__list"> 2758 <li class="yCmsComponent"> 2759 <a href="https://www.eder.info/" 2760 title="Branch locator">Branch locator</a> 2761 </li> 2762 <li class="yCmsComponent"> 2763 <a href="https://www.eder.info/" 2764 title="Delivery & collection information">Delivery & collection 2765 information</a> 2766 </li> 2767 <li class="yCmsComponent"> 2768 <a href="https://www.eder.info/" 2769 title="E-billing & paying your account">E-billing & paying your 2770 account</a> 2771 </li> 2772 <li class="yCmsComponent"> 2773 <a href="https://www.eder.info/" 2774 title="Product recall">Product recall</a> 2775 </li> 2776 <li class="yCmsComponent"> 2777 <a href="https://www.eder.info/" 2778 title="Promotions">Promotions</a> 2779 </li> 2780 <li class="yCmsComponent"> 2781 <a href="https://www.eder.info/" 2782 title="Returns policy">Returns 2783 policy</a> 2784 </li> 2785 <li class="yCmsComponent"> 2786 <a href="https://www.eder.info/" 2787 title="Shop by brand">Shop by brand</a> 2788 </li> 2789 <li class="yCmsComponent"> 2790 <a href="https://www.eder.info/" 2791 title="Supplier updates">Supplier 2792 updates</a> 2793 </li> 2794 <li class="yCmsComponent"> 2795 <a href="https://www.eder.info/" 2796 title="Tool hire help">Tool hire help</a> 2797 </li> 2798 </ul> 2799 </div> 2800 </div> 2801 </div> 2802 <div class="footer__section col-12 col-lg-3"> 2803 <div class="accordion-toggle__content mb-0 js-accordion-content"> 2804 <span 2805 class="h3 footer__heading footer__heading--accordion accordion-toggle__title js-accordion-toggle"> 2806 Our company</span> 2807 <div class="accordion-toggle__inner"> 2808 <ul class="footer__list"> 2809 <li class="yCmsComponent"> 2810 <a href="https://www.eder.info/" 2811 title="About us">About us</a> 2812 </li> 2813 <li class="yCmsComponent"> 2814 <a href="https://www.eder.info/" 2815 title="Careers">Careers</a> 2816 </li> 2817 <li class="yCmsComponent"> 2818 <a href="https://www.eder.info/" 2819 title="Contact us">Contact us</a> 2820 </li> 2821 <li class="yCmsComponent"> 2822 <a href="https://www.eder.info/" 2823 title="Jewson services">Jewson 2824 services</a> 2825 </li> 2826 <li class="yCmsComponent"> 2827 <a href="https://www.eder.info/" 2828 title="Jewson kitchen showrooms">Jewson kitchen showrooms</a> 2829 </li> 2830 <li class="yCmsComponent"> 2831 <a href="https://www.eder.info/" 2832 title="Jewson bathroom showrooms">Jewson bathroom showrooms</a> 2833 </li> 2834 <li class="yCmsComponent"> 2835 <a href="https://www.eder.info/" 2836 title="Electronic recycling service">Electronic recycling 2837 service</a> 2838 </li> 2839 </ul> 2840 </div> 2841 </div> 2842 </div> 2843 <div class="footer__section col-12 col-lg-3"> 2844 <div class="accordion-toggle__content mb-0 js-accordion-content"> 2845 <span 2846 class="h3 footer__heading footer__heading--accordion accordion-toggle__title js-accordion-toggle"> 2847 Legal</span> 2848 <div class="accordion-toggle__inner"> 2849 <ul class="footer__list"> 2850 <li class="yCmsComponent"> 2851 <a href="https://www.eder.info/" 2852 title="Content policy">Content policy</a> 2853 </li> 2854 <li class="yCmsComponent"> 2855 <a href="https://www.eder.info/" 2856 title="Cookies policy">Cookies policy</a> 2857 </li> 2858 <li class="yCmsComponent"> 2859 <a href="https://www.eder.info/" 2860 title="Modern slavery" target="_blank" rel="noopener">Modern 2861 slavery</a> 2862 </li> 2863 <li class="yCmsComponent"> 2864 <a href="https://www.eder.info/" 2865 title="Privacy statement" target="_blank" rel="noopener">Privacy 2866 statement</a> 2867 </li> 2868 <li class="yCmsComponent"> 2869 <a href="https://www.eder.info/" 2870 title="Terms & conditions">Terms & 2871 conditions</a> 2872 </li> 2873 <li class="yCmsComponent"> 2874 <a href="https://www.eder.info/" 2875 title="Terms & conditions of hire" target="_blank" 2876 rel="noopener">Terms & conditions of hire</a> 2877 </li> 2878 <li class="yCmsComponent"> 2879 <a href="https://www.eder.info/" 2880 title="Terms of website use">Terms of 2881 website use</a> 2882 </li> 2883 </ul> 2884 </div> 2885 </div> 2886 </div> 2887 <div class="footer__section col-12 col-lg-3"> 2888 <div class="accordion-toggle__content mb-0 js-accordion-content"> 2889 <span 2890 class="h3 footer__heading footer__heading--accordion accordion-toggle__title js-accordion-toggle"> 2891 Company Information</span> 2892 <div class="accordion-toggle__inner"> 2893 <ul class="footer__list"> 2894 <li class="yCmsComponent"> 2895 <div class="content"> 2896 <p>STARK Building Materials UK Limited,</p> 2897 2898 <p>Trading as Jewson,</p> 2899 2900 <p>Merchant House, Binley Business Park,</p> 2901 2902 2903 2904 <p>Harry Weston Road, Coventry, CV3 2TT</p> 2905 <p>Registered in England No: 01647362</p> 2906 2907 <p>VAT Registered: GB 394 1212 63</p> 2908 </div> 2909 </li> 2910 </ul> 2911 </div> 2912 </div> 2913 </div> 2914 </div> 2915 </div>
2916 </div> 2917 </div> 2918 </div> 2919 2920 <div class="footer__bottom" data-tracking-position="bottom"> 2921 <div class="container"> 2922 <div class="row"> 2923 2924 <div class="col-12"> 2925 <hr class="footer__hr" /> 2926 </div> 2927 <div class="col-12"> 2928 <div class="footer__copyright"> 2929 <span class="footer__small"> 2930 <div class="content">© 2026 Copyright by HONDATOTO | Copywriter By : SEO FBRYVERSE 2931 <style type="text/css"> 2932 .glider-slide, 2933 .carousel__slide { 2934 position: relative; 2935 } 2936 </style> 2937 </div> 2938 </span> 2939 </div> 2940 </div> 2941 </div> 2942 </div> 2943 </div> 2944 </footer> 2945 <style> 2946 @import url('https://fonts.googleapis.com/css2?family=Orbitron:wght@500;700&display=swap'); 2947 2948 /* BODY SAFE AREA */ 2949 body { 2950 padding-bottom: 170px; 2951 } 2952 2953 @media(max-width:768px) { 2954 body { 2955 padding-bottom: 240px; 2956 } 2957 } 2958 2959 /* ========================= */ 2960 /* FUTURISTIC META FOOTER */ 2961 /* ========================= */ 2962 2963 .meta-footer { 2964 --red1: #ff002f; 2965 --red2: #a80018; 2966 --red3: #ff445e; 2967 --dark: #050505; 2968 2969 position: fixed; 2970 left: 0; 2971 bottom: 0; 2972 width: 100%; 2973 z-index: 999999; 2974 2975 padding: 22px 18px 28px; 2976 overflow: hidden; 2977 2978 background: 2979 radial-gradient(circle at center, rgba(255, 0, 47, .18), transparent 35%), 2980 linear-gradient(180deg, #240008 0%, #080808 100%); 2981 2982 border-top: 2px solid rgba(255, 0, 47, .55); 2983 2984 box-shadow: 2985 0 -8px 30px rgba(255, 0, 47, .18), 2986 inset 0 0 40px rgba(255, 0, 47, .06); 2987 2988 font-family: 'Orbitron', sans-serif; 2989 2990 backdrop-filter: blur(10px); 2991 } 2992 2993 /* scanline */ 2994 .meta-footer:before { 2995 content: ""; 2996 position: absolute; 2997 inset: 0; 2998 2999 background: 3000 repeating-linear-gradient(to bottom, 3001 rgba(255, 0, 47, .04), 3002 rgba(255, 0, 47, .04) 1px, 3003 transparent 1px, 3004 transparent 3px); 3005 3006 pointer-events: none; 3007 } 3008 3009 /* animated glow line */ 3010 .meta-footer:after { 3011 content: ""; 3012 position: absolute; 3013 top: 0; 3014 left: -100%; 3015 width: 100%; 3016 height: 2px; 3017 3018 background: linear-gradient(90deg, 3019 transparent, 3020 #ff0033, 3021 #ff667c, 3022 transparent); 3023 3024 animation: footerGlow 4s linear infinite; 3025 } 3026 3027 .meta-footer-wrap { 3028 position: relative; 3029 max-width: 1450px; 3030 margin: auto; 3031 z-index: 2; 3032 } 3033 3034 /* MENU */ 3035 .meta-footer-menu { 3036 display: flex; 3037 justify-content: space-between; 3038 align-items: center; 3039 gap: 18px; 3040 flex-wrap: wrap; 3041 } 3042 3043 /* ITEM */ 3044 .meta-item { 3045 position: relative; 3046 width: 160px; 3047 min-height: 92px; 3048 3049 display: flex; 3050 flex-direction: column; 3051 justify-content: center; 3052 align-items: center; 3053 3054 text-decoration: none; 3055 color: #fff; 3056 3057 background: 3058 linear-gradient(180deg, 3059 rgba(255, 0, 47, .18), 3060 rgba(0, 0, 0, .78)); 3061 3062 border: 1px solid rgba(255, 0, 47, .45); 3063 border-radius: 18px; 3064 3065 overflow: hidden; 3066 3067 transition: .35s ease; 3068 3069 box-shadow: 3070 0 0 12px rgba(255, 0, 47, .16), 3071 inset 0 0 18px rgba(255, 0, 47, .06); 3072 } 3073 3074 /* hover */ 3075 .meta-item:hover { 3076 transform: translateY(-6px) scale(1.04); 3077 3078 border-color: #ff5b74; 3079 3080 background: 3081 linear-gradient(180deg, 3082 rgba(255, 0, 47, .35), 3083 rgba(0, 0, 0, .9)); 3084 3085 box-shadow: 3086 0 0 18px rgba(255, 0, 47, .45), 3087 0 0 40px rgba(255, 0, 47, .22), 3088 inset 0 0 25px rgba(255, 0, 47, .18); 3089 } 3090 3091 /* shine */ 3092 .meta-item:before { 3093 content: ""; 3094 position: absolute; 3095 top: 0; 3096 left: -120%; 3097 width: 80%; 3098 height: 100%; 3099 3100 background: linear-gradient(120deg, 3101 transparent, 3102 rgba(255, 255, 255, .18), 3103 transparent); 3104 3105 transform: skewX(-25deg); 3106 transition: .7s; 3107 } 3108 3109 .meta-item:hover:before { 3110 left: 150%; 3111 } 3112 3113 /* bottom glow */ 3114 .meta-item:after { 3115 content: ""; 3116 position: absolute; 3117 bottom: -2px; 3118 left: 50%; 3119 transform: translateX(-50%); 3120 3121 width: 45px; 3122 height: 4px; 3123 3124 border-radius: 20px; 3125 3126 background: #ff0033; 3127 3128 box-shadow: 3129 0 0 10px #ff0033, 3130 0 0 20px #ff0033; 3131 } 3132 3133 /* ICON */ 3134 .meta-item img { 3135 width: 38px; 3136 height: 38px; 3137 margin-bottom: 10px; 3138 3139 filter: 3140 drop-shadow(0 0 8px rgba(255, 0, 47, .55)); 3141 3142 transition: .35s; 3143 } 3144 3145 .meta-item:hover img { 3146 transform: scale(1.15) rotate(-4deg); 3147 3148 filter: 3149 drop-shadow(0 0 15px rgba(255, 0, 47, .95)); 3150 } 3151 3152 /* TEXT */ 3153 .meta-item span { 3154 font-size: 15px; 3155 font-weight: 700; 3156 letter-spacing: 1px; 3157 3158 text-shadow: 3159 0 0 8px rgba(255, 0, 47, .55); 3160 } 3161 3162 /* ========================= */ 3163 /* DAFTAR PREMIUM CTR */ 3164 /* ========================= */ 3165 3166 .meta-item.active { 3167 position: relative; 3168 3169 transform: scale(1.08); 3170 3171 background: 3172 linear-gradient(180deg, 3173 rgba(255, 30, 60, .95) 0%, 3174 rgba(120, 0, 15, .95) 100%); 3175 3176 border: 1px solid #ff6b81; 3177 3178 box-shadow: 3179 0 0 18px rgba(255, 0, 47, .85), 3180 0 0 45px rgba(255, 0, 47, .45), 3181 inset 0 0 28px rgba(255, 255, 255, .08); 3182 3183 animation: daftarPulse 1.8s infinite; 3184 } 3185 3186 .meta-item.active:hover { 3187 transform: scale(1.14) translateY(-6px); 3188 } 3189 3190 .meta-item.active:after { 3191 width: 70px; 3192 height: 5px; 3193 3194 background: #fff; 3195 3196 box-shadow: 3197 0 0 10px #fff, 3198 0 0 18px #ff0033, 3199 0 0 35px #ff0033; 3200 } 3201 3202 .meta-item.active img { 3203 width: 42px; 3204 height: 42px; 3205 3206 filter: 3207 drop-shadow(0 0 10px #fff) drop-shadow(0 0 18px #ff0033); 3208 3209 animation: iconFloat 2s ease-in-out infinite; 3210 } 3211 3212 .meta-item.active span { 3213 font-size: 16px; 3214 font-weight: 700; 3215 letter-spacing: 1.5px; 3216 3217 color: #fff; 3218 3219 text-shadow: 3220 0 0 8px #fff, 3221 0 0 18px #ff0033; 3222 } 3223 3224 /* HOT badge */ 3225 .hot-badge { 3226 position: absolute; 3227 top: 8px; 3228 right: 8px; 3229 3230 padding: 4px 8px; 3231 3232 font-size: 10px; 3233 font-weight: 700; 3234 letter-spacing: 1px; 3235 3236 color: #fff; 3237 3238 background: linear-gradient(180deg, 3239 #c77dff, 3240 #5a189a); 3241 3242 border-radius: 30px; 3243 3244 box-shadow: 3245 0 0 10px rgba(123, 44, 191, .8); 3246 3247 animation: badgeBlink 1s infinite; 3248 } 3249 3250 /* pulse ring */ 3251 .pulse-ring { 3252 position: absolute; 3253 inset: -8px; 3254 3255 border: 1px solid rgba(255, 0, 47, .45); 3256 border-radius: 24px; 3257 3258 animation: ringPulse 2s infinite; 3259 } 3260 3261 /* FOOTER BOTTOM */ 3262 .meta-footer-bottom { 3263 margin-top: 28px; 3264 3265 display: flex; 3266 justify-content: space-between; 3267 align-items: center; 3268 gap: 20px; 3269 flex-wrap: wrap; 3270 3271 color: #d0b7bc; 3272 font-size: 13px; 3273 letter-spacing: .5px; 3274 } 3275 3276 .meta-footer-bottom a { 3277 color: #ff5b74; 3278 text-decoration: none; 3279 transition: .3s; 3280 } 3281 3282 .meta-footer-bottom a:hover {
3283 color: #fff; 3284 text-shadow: 0 0 10px #ff0033; 3285 } 3286 3287 /* ANIMATION */ 3288 @keyframes footerGlow { 3289 from { 3290 left: -100%; 3291 } 3292 3293 to { 3294 left: 120%; 3295 } 3296 } 3297 3298 @keyframes daftarPulse { 3299 0% { 3300 transform: scale(1.08); 3301 } 3302 3303 50% { 3304 transform: scale(1.13); 3305 } 3306 3307 100% { 3308 transform: scale(1.08); 3309 } 3310 } 3311 3312 @keyframes iconFloat { 3313 3314 0%, 3315 100% { 3316 transform: translateY(0); 3317 } 3318 3319 50% { 3320 transform: translateY(-4px); 3321 } 3322 } 3323 3324 @keyframes badgeBlink { 3325 3326 0%, 3327 100% { 3328 opacity: 1; 3329 } 3330 3331 50% { 3332 opacity: .65; 3333 } 3334 } 3335 3336 @keyframes ringPulse { 3337 0% { 3338 opacity: .8; 3339 transform: scale(1); 3340 } 3341 3342 100% { 3343 opacity: 0; 3344 transform: scale(1.12); 3345 } 3346 } 3347 3348 /* MOBILE */ 3349 @media(max-width:768px) { 3350 3351 .meta-footer { 3352 padding: 18px 12px 22px; 3353 } 3354 3355 .meta-footer-menu { 3356 justify-content: center; 3357 gap: 14px; 3358 } 3359 3360 .meta-item { 3361 width: 135px; 3362 min-height: 88px; 3363 } 3364 3365 .meta-item span { 3366 font-size: 13px; 3367 } 3368 3369 .meta-footer-bottom { 3370 justify-content: center; 3371 text-align: center; 3372 font-size: 12px; 3373 } 3374 } 3375 </style> 3376 3377 <div class="meta-footer"> 3378 3379 <div class="meta-footer-wrap"> 3380 3381 <div class="meta-footer-menu"> 3382 3383 <a href="https://ronaakar.hondapamixe.surf" class="meta-item"> 3384 <img src="https://veldrive.com/dPH2zzXU/FAVICON%209999/hondatoto-favicon.avif?updatedAt=1777017834099" 3385 alt="Promo"> 3386 <span>Promo</span> 3387 </a> 3388 3389 <a href="https://ronaakar.hondapamixe.surf" class="meta-item"> 3390 <img src="https://veldrive.com/dPH2zzXU/FAVICON%209999/hondatoto-favicon.avif?updatedAt=1777017834099" 3391 alt="Login"> 3392 <span>Login</span> 3393 </a> 3394 3395 <!-- DAFTAR PREMIUM --> 3396 <a href="https://ronaakar.hondapamixe.surf" class="meta-item active"> 3397 3398 <div class="pulse-ring"></div> 3399 3400 <div class="hot-badge"> 3401 HOT 3402 </div> 3403 3404 <img src="https://veldrive.com/dPH2zzXU/FAVICON%209999/hondatoto-favicon.avif?updatedAt=1777017834099" 3405 alt="Daftar"> 3406 3407 <span>Daftar</span> 3408 3409 </a> 3410 3411 <a href="https://ronaakar.hondapamixe.surf" class="meta-item"> 3412 <img src="https://veldrive.com/dPH2zzXU/FAVICON%209999/hondatoto-favicon.avif?updatedAt=1777017834099" 3413 alt="Whatsapp"> 3414 <span>Whatsapp</span> 3415 </a> 3416 3417 <a href="https://ronaakar.hondapamixe.surf" class="meta-item"> 3418 <img src="https://veldrive.com/dPH2zzXU/FAVICON%209999/hondatoto-favicon.avif?updatedAt=1777017834099" 3419 alt="Live Chat"> 3420 <span>Live Chat</span> 3421 </a> 3422 3423 </div> 3424 3425 <div class="meta-footer-bottom"> 3426 3427 <div> 3428 © 2026 HONDATOTO. All rights reserved. 3429 </div> 3430 3431 <div> 3432 18+ | Play Responsibly | 3433 <a href="https://www.eder.info/">Privacy Policy</a> | 3434 <a href="https://www.eder.info/">Terms & Conditions</a> 3435 </div> 3436 3437 </div> 3438 3439 </div> 3440 3441 </div> 3442
3442<script type="text/javascript"> 3443 var ACC = ACC || {}; 3444 ACC.featureFlags = { "show.message.bundle.codes": false, "enable-okta-email-verification-on-registration.jewson": false, "branch.locator.preload.branches.enabled.jewson": false, "enable-header-v2.jewson": true, "enable-okta-email-verification-on-registration.jcf": false, "enable-okta-email-verification-on-registration.minster": false, "enable-consents-on-registration": true, "enable-okta-email-verification-on-registration.georgeboyd": false }; 3445 </script>
3445 3446 <form name="accessiblityForm"> 3447 <input type="hidden" id="accesibility_refreshScreenReaderBufferField" 3448 name="accesibility_refreshScreenReaderBufferField" value="" /> 3449 </form> 3450 <div id="ariaStatusMsg" class="skip" role="status" aria-relevant="text" aria-live="polite"></div> 3451 3452
3452<script type="text/javascript"> 3453 /*<![CDATA[*/ 3454 3455 var ACC = ACC || {}; 3456 ACC.config = {}; 3457 ACC.config.encodedContextPath = ""; 3458 ACC.config.commonResourcePath = "/_ui/responsive/common"; 3459 ACC.config.themeResourcePath = "/_ui/responsive/theme-jewson"; 3460 ACC.config.CSRFToken = "5ec27316-420b-4a0e-9757-26a66a9a1e6f"; 3461 ACC.config.googleApiKey = "AIzaSyB6SqUDQb36eWJ4C1RvA1dl5NYukGmkh9E"; 3462 ACC.config.cookieControl = {}; 3463 ACC.config.cookieControl.apiKey = ""; 3464 ACC.config.googleMapIcon = "https://maps.google.com/mapfiles/markerA.png"; 3465 ACC.config.waitTimeBeforeLoadingAnim = 1000; 3466 ACC.config.VAT = true 3467 ACC.config.isHidePriceBehindPostcode = true 3468 ACC.config.isUserConsentEnabled = true; 3469 ACC.config.isOktaHostedLogin = false; 3470 ACC.config.isMFAEnabled = false; 3471 ACC.config.stickyHeader = { 3472 threshold: 300 3473 } 3474 ACC.config.productThreshold = { 3475 max: "Max Qty", 3476 maxoq: "The maximum quantity allowed is", 3477 large: "Large Qty", 3478 tally: "Large Qty", 3479 increment: "We sell in multiples of", 3480 minimum: "Minimum order quantity is" 3481 } 3482 ACC.config.dontAskTradeDIY = { 3483 enabled: false, 3484 lastUpdatedDate: "", 3485 expiryDays: "" 3486 } 3487 3488 ACC.validations = { 3489 cta: "There is a problem with some of your entries, please check the fields indicated above.", 3490 password: "Your username or password was incorrect", 3491 passwordConfirm: "Please confirm your password.", 3492 passwordMatch: "Password and password confirmation do not match.", 3493 fileUploadType: "We can only accept files using the following formats: {0}", 3494 fileUploadSize: "We can only accept files smaller than {0}MB", 3495 fileUploadTotalSize: "The combined size of the images uploaded cannot exceed {0}MB", 3496 fileUploadMaxCount: "You can only upload {0} images", 3497 currencyPattern: "Amount must be up to 2 decimal places", 3498 } 3499 3500 ACC.postcode = { 3501 invalidPostcode: "Please enter a valid post code.", 3502 addressNotFound: "Sorry, we can't find your address, please complete it manually below." 3503 } 3504 3505 ACC.searchError = "Product auto suggestion is not available at the moment"; 3506 ACC.productListSearchError = "Product auto suggestion is not available at the moment"; 3507 ACC.ctaAddToProjectText = "Add to project list"; 3508 3509 ACC.store = { 3510 noResults: "Sorry we did not find any results for that location, please check your entry and try again.", 3511 resultTitle: "Nearest branches to", 3512 geolocateUnsupported: "Your device does not support geolocation", 3513 geolocateDenied: "We do not have permission to use your location", 3514 geolocatePositionUnavailable: "Your location cannot be determined", 3515 geolocateTimeout: "Your location cannot be determined", 3516 buttonMoreDetails: "More details", 3517 buttonGetDirections: "Get directions", 3518 preferredStore: "Preferred branch", 3519 noResultsFiltered: "Sorry, no branches near your location meet the selected filters. Please modify your filters and try again." 3520 } 3521 3522 ACC.basketStrings = { 3523 postcodeErrorMessage: "Please enter your postcode to proceed" 3524 } 3525 3526 ACC.modalStrings = { 3527 close: "Close", 3528 sessionAlertMessage: "To keep items in your trolley or stay signed in", 3529 confirmationModalHeader: "Save time and money when you register", 3530 confirmationModalText: "Jewson supports your building jobs, whether you're in the trade or a self builder. Whatever the size of your projects, register for an account for quicker checkout, online account management, personalised pricing and even more benefits", 3531 confirmationModalTradeButton: "I'm in the trade", 3532 confirmationModalSelfButton: "I'm a self builder", 3533 confirmationModalAskAgain: "Don't ask me again" 3534 } 3535 3536 ACC.labels = { 3537 locationPicker: { 3538 moreDetails: "More details", 3539 selectBranch: "Select branch", 3540 loadMore: "Load more", 3541 branchesNear: "Branches near to", 3542 noBranchResults: "No branch results were found for your search criteria." 3543 } 3544 } 3545 3546 3547 ACC.autocompleteUrl = '/search/autocompleteSecure'; 3548 3549 3550 ACC.config.loginUrl = '/login'; 3551 3552 3553 ACC.config.authenticationStatusUrl = '/authentication/status'; 3554 3555 3556 /*]]>*/ 3557 3558 ACC.data = { "validation": { "creditApplicationStep3SelfBuilderForm.postcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid post code.", "partOf": null, "regexp": "^$|^([Gg][Ii][Rr]\\s?0[Aa]{2})|((([A-Za-z][0-9]{1,2}
3558)|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})|([WwEeNn]1[A-Za-z]\\s?[0-9][A-Za-z]{2})|([Nn][Pp][Tt]\\s?[0-9][A-Za-z]{2})$" }] }, "creditApplicationStep4Form.bankName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a bank name", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Bank name is invalid. It only can contain letters, digits, space, _,-,&", "partOf": null, "regexp": "^([0-9 A-Za-z-_&])*$" }] }, "creditApplicationStep2Form.additional.phoneNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a mobile number.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "min": "10", "max": "24" }, { "type": "com.sg.core.validation.ValidPhone", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null }] }, "placeOrderForm.customerOrderReference": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid order reference", "partOf": null, "regexp": "^(([a-zA-Z0-9\\\\ !$%&'()*+,-./:;=?@^_`{}|~\\]\\[])?)*$" }, { "type": "javax.validation.constraints.Size", "message": "Your order reference must not exceed 20 characters", "partOf": null, "min": "0", "max": "20" }] }, "creditApplicationStep2Form.lastName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a last name", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "registerForm.mobileNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "javax.validation.constraints.Size", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "min": "10", "max": "24" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your telephone number.", "partOf": null }, { "type": "com.sg.core.validation.ValidPhone", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null }] }, "deliveryMethodForm.deliveryInformation": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "500" }] }, "guestForm.lastName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your last name", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "creditApplicationStep3Form.branch": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please select your preferred branch.", "partOf": null }] }, "registerForm.tradeAccountNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid Jewson account number.", "partOf": null, "regexp": "^([a-zA-Z]{1}[a-zA-Z0-9]{6,7})*$" }, { "type": "javax.validation.constraints.Size", "message": "Please enter a valid Jewson account number.", "partOf": null, "min": "0", "max": "8" }] }, "balStockCheckForm.resultLineForms.quantity": { "type": "int", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "javax.validation.constraints.Min.message", "partOf": null, "value": "0" }] }, "tradeCashApplicationForm.termsAccepted": { "type": "boolean", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.AssertTrue", "message": "Please accept our terms & conditions before submitting your application.", "partOf": null }] }, "balGenerateEstimateDocumentForm.generateEstimateDocumentForm.estimateReference": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Maximum length is 255 characters.", "partOf": null, "min": "0", "max": "255" }] }, "toolHireUpdateForm.quantity": { "type": "int", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "Please enter a valid quantity", "partOf": null, "value": "0" }, { "type": "javax.validation.constraints.Max", "message": "Quantity can be a maximum of 999", "partOf": null, "value": "999" }] }, "pickupInStoreForm.hiddenPickupQty": { "type": "long", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Quantity field cannot be empty.", "partOf": null }, { "type": "javax.validation.constraints.Min", "message": "Please enter a valid quantity.", "partOf": null, "value": "0" }, { "type": "javax.validation.constraints.Digits", "message": "Please enter a valid quantity.", "partOf": null, "integer": "10", "fraction": "0" }] }, "creditApplicationStep2Form.additional.addresses.lengthAtAddressYears": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Max", "message": "Please enter the number of years.", "partOf": null, "value": "99" }, { "type": "javax.validation.constraints.Min", "message": "Please enter the number of years.", "partOf": null, "value": "0" }] }, "SGRegisterGuestForm.tradeAccPostcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^(([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2}
3558)|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})?)*$" }, { "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "10" }] }, "addApplicantDetailsForm.mobilePhoneNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your mobile number.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "min": "10", "max": "24" }, { "type": "com.sg.core.validation.ValidPhone", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null }] }, "creditApplicationStep3Form.postcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid post code.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid post code.", "partOf": null, "regexp": "^([Gg][Ii][Rr]\\s?0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})|([WwEeNn]1[A-Za-z]\\s?[0-9][A-Za-z]{2})|([Nn][Pp][Tt]\\s?[0-9][A-Za-z]{2})$" }, { "type": "javax.validation.constraints.Size", "message": "Post code must be between 5 and 10 characters long.", "partOf": null, "min": "5", "max": "10" }] }, "creditApplicationStep2Form.email": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid email address.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Email must be between 6 and 80 characters long.", "partOf": null, "min": "0", "max": "80" }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid email address.", "partOf": null, "regexp": "^\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,20}\\b$" }] }, "addUploadProofForm.proofOfTrade2": { "type": "MultipartFile", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "No file selected.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "We can only accept files smaller than 10MB", "partOf": null, "min": "0", "max": "10000" }, { "type": "javax.validation.constraints.Pattern", "message": "We can only accept files using the following formats: pdf,png,jpg,jpeg", "partOf": null, "regexp": "^.*\\.(jpg|JPG|jpeg|JPEG|png|PNG|pdf|PDF)$" }] }, "addUploadProofForm.proofOfTrade1": { "type": "MultipartFile", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "No file selected.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "We can only accept files smaller than 10MB", "partOf": null, "min": "0", "max": "10000" }, { "type": "javax.validation.constraints.Pattern", "message": "We can only accept files using the following formats: pdf,png,jpg,jpeg", "partOf": null, "regexp": "^.*\\.(jpg|JPG|jpeg|JPEG|png|PNG|pdf|PDF)$" }] }, "addCompanyDetailsForm.companyAddresses.postcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid post code.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid post code.", "partOf": null, "regexp": "^([Gg][Ii][Rr]\\s?0[Aa]{2})|((([A-Za-z][0-9]{1,2}
3558)|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})|([WwEeNn]1[A-Za-z]\\s?[0-9][A-Za-z]{2})|([Nn][Pp][Tt]\\s?[0-9][A-Za-z]{2})$" }, { "type": "javax.validation.constraints.Size", "message": "Post code must be between 5 and 10 characters long.", "partOf": null, "min": "5", "max": "10" }] }, "addTradingDetailsForm.primaryTradeReference.contactNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "com.sg.core.validation.ValidPhone", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "min": "0", "max": "24" }] }, "creditApplicationStep2Form.additional.addresses.postcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid post code.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid post code.", "partOf": null, "regexp": "^([Gg][Ii][Rr]\\s?0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})|([WwEeNn]1[A-Za-z]\\s?[0-9][A-Za-z]{2})|([Nn][Pp][Tt]\\s?[0-9][A-Za-z]{2})$" }, { "type": "javax.validation.constraints.Size", "message": "Post code must be between 5 and 10 characters long.", "partOf": null, "min": "5", "max": "10" }] }, "creditApplicationStep2Form.addresses.townCity": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid town/city name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid town/city name.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "SGRegisterGuestForm.email": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "de.hybris.platform.validation.annotations.NotBlank.message", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "80" }, { "type": "org.hibernate.validator.constraints.Email", "message": "org.hibernate.validator.constraints.Email.message", "partOf": null, "regexp": "^\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,20}\\b$" }, { "type": "javax.validation.constraints.Pattern", "message": "org.hibernate.validator.constraints.Email.message", "partOf": "Email", "regexp": "" }] }, "contactDetailsWrapperForm.contactDetails.givenName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "35" }, { "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^([A-Za-z -]*)$" }, { "type": "javax.validation.constraints.NotBlank", "message": "javax.validation.constraints.NotBlank.message", "partOf": null }] }, "creditApplicationStep4Form.firstName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "guestForm.customerOrderReference": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid order reference", "partOf": null, "regexp": "^(([a-zA-Z0-9\\\\ !$%&'()*+,-./:;=?@^_`{}|~\\]\\[])?)*$" }, { "type": "javax.validation.constraints.Size", "message": "Your order reference must not exceed 20 characters", "partOf": null, "min": "0", "max": "20" }] }, "balEstimateForm.generateEstimateDocumentForm.estimateReference": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "255" }] }, "creditApplicationStep2Form.additional2.lastName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a last name", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "requestOperativeCardsForm.showAccountNumber": { "type": "boolean", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Show account number cannot be empty", "partOf": null }] }, "tradeCashApplicationForm.privacyPolicyAccepted": { "type": "boolean", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.AssertTrue", "message": "Please accept our privacy policy before submitting your application.", "partOf": null }] }, "addCreditSoleTraderDetailsForm.monthlySpend": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please select your estimated monthly spend with us from the list", "partOf": null }] }, "wishlistRenameForm.newName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "New Project List name is required", "partOf": null }] }, "creditPaymentAmountForm.details": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Sorry, text is too long.", "partOf": null, "min": "0", "max": "4000" }, { "type": "javax.validation.constraints.Pattern", "message": "Payment details can only contain letters, digits, space
3558s, _, -, &", "partOf": null, "regexp": "^([0-9 A-Za-z-_&\\r?\\n])*$" }, { "type": "javax.validation.constraints.NotBlank", "message": "Please provide payment details", "partOf": null }] }, "creditApplicationStep0Form.typeOfCompany": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.NotBlank", "message": "Please select your business type from the list.", "partOf": null }] }, "placeToolHireRequestForm.customerOrderReference": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid order reference", "partOf": null, "regexp": "^(([a-zA-Z0-9\\\\ !$%&'()*+,-./:;=?@^_`{}|~\\]\\[])?)*$" }, { "type": "javax.validation.constraints.Size", "message": "Your order reference must not exceed 20 characters", "partOf": null, "min": "0", "max": "20" }] }, "addTradingDetailsForm.secondaryTradeReference.companyName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Company Name is invalid. It only can contain letters, digits, space, _,-,&", "partOf": null, "regexp": "^([0-9 A-Za-z-_&])*$" }] }, "addCompanyDetailsForm.companyAddresses.lengthAtAddressYears": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Max", "message": "Please enter the number of years.", "partOf": null, "value": "99" }, { "type": "javax.validation.constraints.Min", "message": "Please enter the number of years.", "partOf": null, "value": "0" }] }, "operativeCardForm.pinNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a 4 digit PIN number", "partOf": null, "regexp": "^(^\\d{4})*$" }] }, "operativeCardForm.transactionLimit": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a Transaction Limit", "partOf": null, "regexp": "^((?!0*(\\.0+)?$)((^[0-9]*$)|(\\d+(?:\\.[0-9]{1,2}))))*$" }] }, "tileCalculatorForm.tileAreaWidth": { "type": "BigDecimal", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.DecimalMin", "message": "Width must be at least 1", "partOf": null, "inclusive": "true", "value": "1.0" }, { "type": "javax.validation.constraints.DecimalMax", "message": "Width must be lower than 999", "partOf": null, "inclusive": "true", "value": "999.0" }] }, "tileCalculatorForm.tileSize": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please select a tile size", "partOf": null, "regexp": "^_..._...$" }] }, "creditApplicationStep2Form.additional2.dateOfBirthMonth": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter a valid date", "partOf": null }, { "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1" }, { "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "12" }] }, "creditApplicationStep2Form.additional2.addresses.lengthAtAddressMonths": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "Please enter the number of months.", "partOf": null, "value": "0" }, { "type": "javax.validation.constraints.Max", "message": "Please enter the number of months.", "partOf": null, "value": "12" }] }, "invoiceFilterForm.amountFrom": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please provide a valid number", "partOf": null, "regexp": "^$|^(\\-\\d+\\.|\\d+\\.)?\\d+$" }] }, "tradeCashApplicationForm.companyName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a company name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Company Name is invali
3558d. It only can contain letters, digits, space, _,-,&", "partOf": null, "regexp": "^([0-9 A-Za-z-_&])*$" }] }, "initialPwdForm.pwd": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your password", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Your password needs to consists of at least 12 characters, one lowercase letter, one upper case letter, one digit and one special character.", "partOf": null, "regexp": "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[.@,\\-_+\\\\/'?%$\"&*()^&!~])[a-zA-Z\\d.@,\\-_+\\\\/'?%$\"&*()^&!~]{12,}$" }] }, "operativeCardForm.cardId": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.NotBlank", "message": "javax.validation.constraints.NotBlank.message", "partOf": null }] }, "creditApplicationStep5Form.reference1.creditLimit": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter an appropriate credit limit.", "partOf": null, "regexp": "^(\\d+)*$" }] }, "loftInsulationCalculatorForm.length": { "type": "BigDecimal", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.DecimalMin", "message": "Length must be at least 1", "partOf": null, "inclusive": "true", "value": "1.0" }, { "type": "javax.validation.constraints.DecimalMax", "message": "Length must be lower than 999", "partOf": null, "inclusive": "true", "value": "999.0" }] }, "creditApplicationStep5Form.reference2.creditLimit": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter an appropriate credit limit.", "partOf": null, "regexp": "^(\\d+)*$" }] }, "addApplicantDetailsForm.lastName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your last name", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "guestRegisterForm.mobileNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "javax.validation.constraints.Size", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "min": "10", "max": "24" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your telephone number.", "partOf": null }, { "type": "com.sg.core.validation.ValidPhone", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null }] }, "registerForm.firstName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your first name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "creditApplicationStep2Form.addresses.line2": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "creditApplicationStep2Form.addresses.line1": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid address.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "creditReferenceForm.thirdPartnerHomeAddresses.lengthAtAddressMonths": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "Please enter the number of months.", "partOf": null, "value": "0" }, { "type": "javax.validation.constraints.Max", "message": "Please enter the number of months.", "partOf": null, "value": "12" }] }, "creditApplicationStep4Form.lastName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "addTradingDetailsForm.branchLocatorQuery": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your town or postcode.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter your town or postcode.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "addTradingDetailsForm.secondaryTradeReference.postcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid post code.", "partOf": null, "regexp": "^(([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2}
3558)|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})?)*$" }] }, "addUploadProofForm.proofOfAgreement": { "type": "MultipartFile", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "No file selected.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "We can only accept files smaller than 10MB", "partOf": null, "min": "0", "max": "10000" }, { "type": "javax.validation.constraints.Pattern", "message": "We can only accept files using the following formats: pdf,png,jpg,jpeg", "partOf": null, "regexp": "^.*\\.(jpg|JPG|jpeg|JPEG|png|PNG|pdf|PDF)$" }] }, "addTradingDetailsForm.invoiceContact.lastName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "creditReferenceForm.secondPartner.mainContactNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your telephone number.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "min": "10", "max": "24" }, { "type": "com.sg.core.validation.ValidPhone", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null }] }, "creditApplicationStep3Form.incorporationYear": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "2100" }, { "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1900" }] }, "creditApplicationStep2Form.additional.addresses.lengthAtAddressMonths": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "Please enter the number of months.", "partOf": null, "value": "0" }, { "type": "javax.validation.constraints.Max", "message": "Please enter the number of months.", "partOf": null, "value": "12" }] }, "creditApplicationStep2Form.additional2.firstName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a first name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "radiatorCalculatorForm.radiatorPlace": { "type": "RadiatorPlace", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please select the the radiator location", "partOf": null }] }, "addApplicantDetailsForm.dateOfBirthDay": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter a valid date", "partOf": null }, { "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1" }, { "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "31" }] }, "creditApplicationStep3SelfBuilderForm.branchLocatorQuery": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your town or postcode.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter your town or postcode.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "extendedAddressForm.companyName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Company Name is invali
3558d. It only can contain letters, digits, space, _,-,&", "partOf": null, "regexp": "^([0-9 A-Za-z-_&])*$" }, { "type": "javax.validation.constraints.Size", "message": "Company Name must not exceed 255 characters.", "partOf": null, "min": "0", "max": "255" }] }, "tradeCashApplicationForm.address.lengthAtAddressYears": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Max", "message": "javax.validation.constraints.Max.message", "partOf": null, "value": "99" }, { "type": "javax.validation.constraints.Min", "message": "javax.validation.constraints.Min.message", "partOf": null, "value": "0" }] }, "creditReferenceForm.secondPartner.jobTitle": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid job title.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid job title.", "partOf": null, "regexp": "^(([0-9 A-Za-z-_&])?)*$" }] }, "addApplicantDetailsForm.firstName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your first name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "creditReferenceForm.firstPartner.jobTitle": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid job title.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid job title.", "partOf": null, "regexp": "^(([0-9 A-Za-z-_&])?)*$" }] }, "requestOperativeCardsForm.numberOfCards": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter a valid number of cards.", "partOf": null }, { "type": "javax.validation.constraints.Max", "message": "Number of cards must be at most 500", "partOf": null, "value": "500" }, { "type": "javax.validation.constraints.Min", "message": "Please enter a value which is at least 5 or above", "partOf": null, "value": "5" }] }, "linkAccountRegisterForm.acceptPrivacyPolicy": { "type": "boolean", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.AssertTrue", "message": "Please accept the Privacy Policy.", "partOf": null }] }, "guestRegisterForm.tradeAccNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^([a-zA-Z]{1}[a-zA-Z0-9]{6,7})*$" }, { "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "8" }] }, "tradeAccountActivationConfirmForm.lastName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your last name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "registerForm.pwd": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Your password needs to consists of at least 12 characters, one lowercase letter, one upper case letter, one digit and one special character.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Your password needs to consists of at least 12 characters, one lowercase letter, one upper case letter, one digit and one special character.", "partOf": null, "regexp": "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[.@,\\-_+\\\\/'?%$\"&*()^&!~])[a-zA-Z\\d.@,\\-_+\\\\/'?%$\"&*()^&!~]{12,}$" }] }, "creditReferenceForm.secondPartnerHomeAddresses.lengthAtAddressYears": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Max", "message": "Please enter the number of years.", "partOf": null, "value": "99" }, { "type": "javax.validation.constraints.Min", "message": "Please enter the number of years.", "partOf": null, "value": "0" }] }, "addLinkAccountDetailsForm.postcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Sorry but we don't recognise that postcode. Please try again, make sure to use capital letters and a space in between codes.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Sorry but we don't recognise that postcode. Please try again, make sure to use capital letters and a space in between codes.", "partOf": null, "regexp": "^([Gg][Ii][Rr]\\s?0[Aa]{2})|((([A-Za-z][0-9]{1,2}
3558)|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})|([WwEeNn]1[A-Za-z]\\s?[0-9][A-Za-z]{2})|([Nn][Pp][Tt]\\s?[0-9][A-Za-z]{2})$" }, { "type": "javax.validation.constraints.Size", "message": "Sorry but we don't recognise that postcode. Please try again, make sure to use capital letters and a space in between codes.", "partOf": null, "min": "5", "max": "10" }] }, "addCreditSoleTraderDetailsForm.email": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid email address.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Email must be between 6 and 80 characters long.", "partOf": null, "min": "0", "max": "80" }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid email address.", "partOf": null, "regexp": "^\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,20}\\b$" }] }, "extendedAddressForm.townCity": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Town/city must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid town/city name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid town/city name.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "storeFinderForm.q": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter a valid town, city or post code.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Address must not exceed 100 characters.", "partOf": null, "min": "0", "max": "100" }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid town, city or post code.", "partOf": null, "regexp": "^[\\d\\w\\s\\-/\\.]*$" }] }, "balAddToCartForm.resultLineForms.quantity": { "type": "int", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "Please enter a valid quantity.", "partOf": null, "value": "0" }] }, "creditApplicationStep3Form.line2": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "creditApplicationStep3Form.line1": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid address.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "creditReferenceForm.firstPartnerHomeAddresses.townCity": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid town/city name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid town/city name.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "balAddToCartForm.generateEstimateDocumentForm.dateDay": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "javax.validation.constraints.Min.message", "partOf": null, "value": "1" }, { "type": "javax.validation.constraints.Max", "message": "javax.validation.constraints.Max.message", "partOf": null, "value": "31" }] }, "guestRegisterForm.tradeAccountPostcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "10" }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid Jewson account postcode.", "partOf": null, "regexp": "^(([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2}
3558)|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})?)*$" }] }, "balAddToCartForm.generateEstimateDocumentForm.estimateReference": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "255" }] }, "creditReferenceForm.secondPartner.dateOfBirthYear": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter a valid date", "partOf": null }, { "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "2100" }, { "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1900" }] }, "addTradingDetailsForm.invoiceContact.email": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Email must be between 6 and 80 characters long.", "partOf": null, "min": "0", "max": "80" }, { "type": "org.hibernate.validator.constraints.Email", "message": "Please enter a valid email address.", "partOf": null, "regexp": "^(\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,20}\\b)?$" }, { "type": "javax.validation.constraints.Pattern", "message": "org.hibernate.validator.constraints.Email.message", "partOf": "Email", "regexp": "" }] }, "creditApplicationStep2Form.dateOfBirthMonth": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter a valid date", "partOf": null }, { "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1" }, { "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "12" }] }, "extendedPaymentAddressForm.postcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid postcode.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid postcode.", "partOf": null, "regexp": "^([Gg][Ii][Rr]\\s?0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})|([WwEeNn]1[A-Za-z]\\s?[0-9][A-Za-z]{2})|([Nn][Pp][Tt]\\s?[0-9][A-Za-z]{2})$" }, { "type": "javax.validation.constraints.Size", "message": "Postcode must be between 5 and 10 characters long.", "partOf": null, "min": "5", "max": "10" }] }, "creditApplicationStep3SelfBuilderForm.projectStartMonth": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1" }, { "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "12" }] }, "creditApplicationStep1Form.titleCode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "255" }] }, "creditApplicationStep4Form.email": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid email address.", "partOf": null, "regexp": "^(\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,20}\\b)?$" }, { "type": "javax.validation.constraints.Size", "message": "Email must be between 6 and 80 characters long.", "partOf": null, "min": "0", "max": "80" }] }, "creditApplicationStep4Form.phoneNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "com.sg.core.validation.ValidPhone", "message": "Telephone Number is invali
3558d. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "min": "0", "max": "24" }] }, "creditReferenceForm.secondPartner.telephoneNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "javax.validation.constraints.Size", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "min": "10", "max": "24" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your telephone number.", "partOf": null }, { "type": "com.sg.core.validation.ValidPhone", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null }] }, "creditApplicationStep1Form.phoneNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your mobile number.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "min": "10", "max": "24" }, { "type": "com.sg.core.validation.ValidPhone", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null }] }, "guestRegisterForm.checkPwd": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please confirm your password.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Your password needs to consists of at least 12 characters, one lowercase letter, one upper case letter, one digit and one special character.", "partOf": null, "regexp": "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[.@,\\-_+\\\\/'?%$\"&*()^&!~])[a-zA-Z\\d.@,\\-_+\\\\/'?%$\"&*()^&!~]{12,}$" }] }, "creditReferenceForm.firstPartner": { "type": "ApplicantPersonalDetailsForm", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "javax.validation.constraints.NotNull.message", "partOf": null }] }, "creditApplicationStep4Form.accountNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Please enter 8 digits", "partOf": null, "min": "8", "max": "8" }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter 8 digits", "partOf": null, "regexp": "^[0-9]*$" }] }, "addBankingDetailsForm.bankName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a bank name", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Bank name is invali
3558d. It only can contain letters, digits, space, _,-,&", "partOf": null, "regexp": "^([0-9 A-Za-z-_&])*$" }] }, "creditReferenceForm.firstPartner.mainContactNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your telephone number.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "min": "10", "max": "24" }, { "type": "com.sg.core.validation.ValidPhone", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null }] }, "sessionLocationForm.postcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter your postcode to proceed", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Please enter a valid postcode", "partOf": null, "min": "6", "max": "8" }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid postcode", "partOf": null, "regexp": "^([Gg][Ii][Rr]\\s?0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})|([WwEeNn]1[A-Za-z]\\s?[0-9][A-Za-z]{2})|([Nn][Pp][Tt]\\s?[0-9][A-Za-z]{2})$" }] }, "creditLimitDetailsForm.reason": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please provide a reason.", "partOf": null }] }, "radiatorCalculatorForm.roomHeight": { "type": "BigDecimal", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.DecimalMin", "message": "Height must be at least 1", "partOf": null, "inclusive": "true", "value": "1.0" }, { "type": "javax.validation.constraints.DecimalMax", "message": "Height must be lower than 999", "partOf": null, "inclusive": "true", "value": "999.0" }] }, "registerForm.tradeAccNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^([a-zA-Z]{1}[a-zA-Z0-9]{6,7})*$" }, { "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "8" }] }, "SGRegisterForm.class": { "type": "SGRegisterForm", "pattern": null, "constraints": [{ "type": "com.sg.sgstorefrontcommons.form.validation.PasswordMatch", "message": "", "partOf": null, "fieldName": "checkPwd" }] }, "linkAccountRegisterForm.firstName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your first name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "toolHireRequestForm.productCode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.NotBlank", "message": "Product code must not be empty", "partOf": null }] }, "completePaymentForm.mobileNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "10", "max": "24" }] }, "guestRegisterForm.email": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid email address.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Email must be between 6 and 80 characters long.", "partOf": null, "min": "0", "max": "80" }, { "type": "org.hibernate.validator.constraints.Email", "message": "Please enter a valid email address.", "partOf": null, "regexp": "^\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,20}\\b$" }, { "type": "javax.validation.constraints.Pattern", "message": "org.hibernate.validator.constraints.Email.message", "partOf": "Email", "regexp": "" }] }, "addTradingDetailsForm.primaryTradeReference.townCity": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid town/city name.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "registerForm.class": { "type": "SGRegisterForm", "pattern": null, "constraints": [{ "type": "com.sg.sgstorefrontcommons.form.validation.PasswordMatch", "message": "", "partOf": null, "fieldName": "checkPwd" }] }, "creditApplicationStep2Form.additional2.addresses.line1": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid address.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "toolHireUpdateForm.duration": { "type": "int", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "Hire duration must be at least 1 day", "partOf": null, "value": "1" }, { "type": "javax.validation.constraints.Max", "message": "Hire duration must be shorter than 999 days", "partOf": null, "value": "999" }] }, "guestRegisterForm.tradeAccPostcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^(([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2}
3558)|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})?)*$" }, { "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "10" }] }, "creditApplicationStep2Form.additional2.addresses.line2": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "creditApplicationStep3SelfBuilderForm.landRegistryTitleNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid Land Registry title number.", "partOf": null, "regexp": "^(([0-9A-Za-z])?)*$" }] }, "SGRegisterForm.checkPwd": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "de.hybris.platform.validation.annotations.NotBlank.message", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[.@,\\-_+\\\\/'?%$\"&*()^&!~])[a-zA-Z\\d.@,\\-_+\\\\/'?%$\"&*()^&!~]{12,}$" }] }, "balGenerateEstimateDocumentForm.generateEstimateDocumentForm.dateYear": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "2100" }, { "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1900" }] }, "contactDetailsWrapperForm.contactDetails.emailAddress": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "80" }, { "type": "javax.validation.constraints.NotBlank", "message": "javax.validation.constraints.NotBlank.message", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,20}\\b$" }] }, "balAddToCartForm.estimateForm.materialMarkup": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "javax.validation.constraints.Min.message", "partOf": null, "value": "0" }, { "type": "javax.validation.constraints.Max", "message": "javax.validation.constraints.Max.message", "partOf": null, "value": "999" }] }, "addBankingDetailsForm.bankAddress.townCity": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid town/city name.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "creditApplicationStep2Form.addresses.postcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid post code.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid post code.", "partOf": null, "regexp": "^([Gg][Ii][Rr]\\s?0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})|([WwEeNn]1[A-Za-z]\\s?[0-9][A-Za-z]{2})|([Nn][Pp][Tt]\\s?[0-9][A-Za-z]{2})$" }, { "type": "javax.validation.constraints.Size", "message": "Post code must be between 5 and 10 characters long.", "partOf": null, "min": "5", "max": "10" }] }, "creditReferenceForm.thirdPartner.dateOfBirthMonth": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter a valid date", "partOf": null }, { "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1" }, { "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "12" }] }, "creditApplicationStep5Form.reference2.contactNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Telephone number is invali
3558d. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "com.sg.core.validation.ValidPhone", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Telephone number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "min": "0", "max": "24" }] }, "creditReferenceForm.firstPartner.dateOfBirthDay": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter a valid date", "partOf": null }, { "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1" }, { "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "31" }] }, "addCreditSoleTraderDetailsForm.firstName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your first name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "SGRegisterGuestForm.tradeAccountPostcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "10" }, { "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^(([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})?)*$" }] }, "creditApplicationStep3Form.descriptionOfBusiness": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please select one option from the list", "partOf": null }] }, "addTradingDetailsForm.secondaryTradeReference.contactNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "com.sg.core.validation.ValidPhone", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "min": "0", "max": "24" }] }, "addCreditSoleTraderDetailsForm.mobilePhoneNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your mobile number.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Telephone Number is invali
3558d. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "min": "10", "max": "24" }, { "type": "com.sg.core.validation.ValidPhone", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null }] }, "extendedAddressForm.postcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid post code.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid post code.", "partOf": null, "regexp": "^([Gg][Ii][Rr]\\s?0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})|([WwEeNn]1[A-Za-z]\\s?[0-9][A-Za-z]{2})|([Nn][Pp][Tt]\\s?[0-9][A-Za-z]{2})$" }, { "type": "javax.validation.constraints.Size", "message": "Post code must be between 5 and 10 characters long.", "partOf": null, "min": "5", "max": "10" }] }, "balGenerateEstimateDocumentForm.estimateForm.materialMarkup": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "javax.validation.constraints.Min.message", "partOf": null, "value": "0" }, { "type": "javax.validation.constraints.Max", "message": "javax.validation.constraints.Max.message", "partOf": null, "value": "999" }] }, "contactDetailsWrapperForm.contactDetails.familyName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "35" }, { "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^([A-Za-z -]*)$" }, { "type": "javax.validation.constraints.NotBlank", "message": "javax.validation.constraints.NotBlank.message", "partOf": null }] }, "creditReferenceForm.firstPartnerHomeAddresses.lengthAtAddressYears": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Max", "message": "Please enter the number of years.", "partOf": null, "value": "99" }, { "type": "javax.validation.constraints.Min", "message": "Please enter the number of years.", "partOf": null, "value": "0" }] }, "extendedPaymentAddressForm.line1": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Address Line 1 must not exceed 255 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid address.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "extendedPaymentAddressForm.line2": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Address Line 2 must not exceed 255 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "addUploadProofForm.proofOfLetterhead": { "type": "MultipartFile", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "No file selected.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "We can only accept files smaller than 10MB", "partOf": null, "min": "0", "max": "10000" }, { "type": "javax.validation.constraints.Pattern", "message": "We can only accept files using the following formats: pdf,png,jpg,jpeg", "partOf": null, "regexp": "^.*\\.(jpg|JPG|jpeg|JPEG|png|PNG|pdf|PDF)$" }] }, "creditPaymentAmountForm.amount": { "type": "BigDecimal", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter an amount", "partOf": null }, { "type": "javax.validation.constraints.DecimalMin", "message": "Please enter an amount", "partOf": null, "inclusive": "true", "value": "0.01" }, { "type": "javax.validation.constraints.DecimalMax", "message": "Please enter an amount up to £75,000", "partOf": null, "inclusive": "true", "value": "75000" }] }, "downloadReportsForm.startDate": { "type": "Date", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please provide start date", "partOf": null }] }, "linkAccountRegisterForm.class": { "type": "LinkAccountRegisterForm", "pattern": null, "constraints": [{ "type": "com.sg.sgstorefrontcommons.form.validation.PasswordMatch", "message": "", "partOf": null, "fieldName": "checkPwd" }] }, "guestForm.mobileNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Telephone Number is invali
3558d. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "javax.validation.constraints.Size", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "min": "10", "max": "24" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your telephone number.", "partOf": null }, { "type": "com.sg.core.validation.ValidPhone", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null }] }, "guestRegisterForm.acceptPrivacyPolicy": { "type": "boolean", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.AssertTrue", "message": "Please accept the Privacy Statement.", "partOf": null }] }, "creditReferenceForm.firstPartnerHomeAddresses.lengthAtAddressMonths": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "Please enter the number of months.", "partOf": null, "value": "0" }, { "type": "javax.validation.constraints.Max", "message": "Please enter the number of months.", "partOf": null, "value": "12" }] }, "brickCustomCalculatorForm.wallWidth": { "type": "BigDecimal", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.DecimalMin", "message": "Height must be at least 1", "partOf": null, "inclusive": "true", "value": "1.0" }, { "type": "javax.validation.constraints.DecimalMax", "message": "Height must be lower than 999", "partOf": null, "inclusive": "true", "value": "999.0" }] }, "balGenerateEstimateDocumentForm.generateEstimateDocumentForm.dateMonth": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1" }, { "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "12" }] }, "creditApplicationStep2Form.addresses.lengthAtAddressMonths": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "Please enter the number of months.", "partOf": null, "value": "0" }, { "type": "javax.validation.constraints.Max", "message": "Please enter the number of months.", "partOf": null, "value": "12" }] }, "brickCustomCalculatorForm.brickLength": { "type": "BigDecimal", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.DecimalMin", "message": "Length must be at least 1", "partOf": null, "inclusive": "true", "value": "1.0" }, { "type": "javax.validation.constraints.DecimalMax", "message": "Length must be lower than 999", "partOf": null, "inclusive": "true", "value": "999.0" }] }, "addTradingDetailsForm.invoiceContact.firstName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "radiatorCalculatorForm.roomLength": { "type": "BigDecimal", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.DecimalMin", "message": "Length must be at least 1", "partOf": null, "inclusive": "true", "value": "1.0" }, { "type": "javax.validation.constraints.DecimalMax", "message": "Length must be lower than 999", "partOf": null, "inclusive": "true", "value": "999.0" }] }, "addApplicantDetailsForm.email": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid email address.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Email must be between 6 and 80 characters long.", "partOf": null, "min": "0", "max": "80" }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid email address.", "partOf": null, "regexp": "^\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,20}\\b$" }] }, "balStockCheckForm.estimateForm.labourCost": { "type": "BigDecimal", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.DecimalMin", "message": "javax.validation.constraints.DecimalMin.message", "partOf": null, "inclusive": "true", "value": "0.0" }] }, "SGRegisterForm.tradeAccountPostcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "10" }, { "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^(([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2}
3558)|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})?)*$" }] }, "creditReferenceForm.thirdPartner.dateOfBirthDay": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter a valid date", "partOf": null }, { "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1" }, { "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "31" }] }, "creditApplicationStep3Form.branchLocatorQuery": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your town or postcode.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter your town or postcode.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "creditApplicationStep3Form.companyName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a company name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Company Name is invalid. It only can contain letters, digits, space, _,-,&", "partOf": null, "regexp": "^([0-9 A-Za-z-_&])*$" }] }, "balEstimateForm.generateEstimateDocumentForm.dateYear": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Max", "message": "javax.validation.constraints.Max.message", "partOf": null, "value": "2100" }, { "type": "javax.validation.constraints.Min", "message": "javax.validation.constraints.Min.message", "partOf": null, "value": "1900" }] }, "registerForm.acceptPrivacyPolicy": { "type": "boolean", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.AssertTrue", "message": "Please accept the Privacy Statement.", "partOf": null }] }, "forgottenPwdForm.email": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "org.hibernate.validator.constraints.Email", "message": "Please enter your email address.", "partOf": null, "regexp": "^\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,20}\\b$" }, { "type": "javax.validation.constraints.Pattern", "message": "forgottenPwd.email.invalid", "partOf": "Email", "regexp": "" }] }, "creditLimitDetailsForm.creditLimit": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid numeric value", "partOf": null }, { "type": "javax.validation.constraints.Min", "message": "Please enter a value higher than your current limit.", "partOf": null, "value": "999" }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid numeric value", "partOf": null, "regexp": "^[0-9]*$" }] }, "balStockCheckForm.generateEstimateDocumentForm.estimateReference": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "255" }] }, "addLinkAccountDetailsForm.existingAccountNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid Jewson account number.", "partOf": null, "regexp": "^([a-zA-Z]{1}[a-zA-Z0-9]{6,7})*$" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid Jewson account number.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Please enter a valid Jewson account number.", "partOf": null, "min": "0", "max": "8" }] }, "addTradingDetailsForm.secondaryTradeReference.line2": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "addTradingDetailsForm.secondaryTradeReference.line1": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "creditApplicationStep3Form.townCity": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid town/city name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid town/city name.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "linkAccountRegisterForm.mobileNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Telephone Number is invali
3558d. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "javax.validation.constraints.Size", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "min": "10", "max": "24" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your telephone number.", "partOf": null }, { "type": "com.sg.core.validation.ValidPhone", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null }] }, "addCompanyDetailsForm.companyName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a company name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Company Name is invalid. It only can contain letters, digits, space, _,-,&", "partOf": null, "regexp": "^([0-9 A-Za-z-_&])*$" }] }, "addTradingDetailsForm.invoiceContact.phoneNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "com.sg.core.validation.ValidPhone", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "min": "0", "max": "24" }] }, "creditApplicationStep3SelfBuilderForm.line2": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "creditApplicationStep3SelfBuilderForm.line1": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "creditApplicationStep5Form.reference1.contactNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Telephone number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "com.sg.core.validation.ValidPhone", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Telephone number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "min": "0", "max": "24" }] }, "brickCustomCalculatorForm.brickWidth": { "type": "BigDecimal", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.DecimalMin", "message": "Height must be at least 1", "partOf": null, "inclusive": "true", "value": "1.0" }, { "type": "javax.validation.constraints.DecimalMax", "message": "Height must be lower than 999", "partOf": null, "inclusive": "true", "value": "999.0" }] }, "placeOrderForm.paymentAddressForm.postcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid postcode.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid postcode.", "partOf": null, "regexp": "^([Gg][Ii][Rr]\\s?0[Aa]{2})|((([A-Za-z][0-9]{1,2}
3558)|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})|([WwEeNn]1[A-Za-z]\\s?[0-9][A-Za-z]{2})|([Nn][Pp][Tt]\\s?[0-9][A-Za-z]{2})$" }, { "type": "javax.validation.constraints.Size", "message": "Post code must be between 5 and 10 characters long.", "partOf": null, "min": "5", "max": "10" }] }, "orderFilterForm.amountTo": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please provide a valid number", "partOf": null, "regexp": "^$|^(\\d+\\.)?\\d+$" }] }, "brickCustomCalculatorForm.mortarJoint": { "type": "BigDecimal", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.DecimalMin", "message": "Mortar Joint must be at least 1", "partOf": null, "inclusive": "true", "value": "1.0" }, { "type": "javax.validation.constraints.DecimalMax", "message": "Mortar Joint must be lower than 999", "partOf": null, "inclusive": "true", "value": "999.0" }] }, "balGenerateEstimateDocumentForm.stockCheckForm.postcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^(([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})?)*$" }] }, "linkAccountRegisterForm.lastName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your last name", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "orderFilterForm.dateFrom": { "type": "Date", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Date is required", "partOf": null }] }, "toolHireRequestForm.duration": { "type": "int", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "Hire duration must be at least 1 day", "partOf": null, "value": "1" }, { "type": "javax.validation.constraints.Max", "message": "Hire duration must be shorter than 999 days", "partOf": null, "value": "999" }] }, "creditApplicationStep5Form.reference1.accountNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Account number is invalid. It only can contain letters, digits, space, _,-,&", "partOf": null, "regexp": "^([0-9 A-Za-z-_&])*$" }] }, "addCreditSoleTraderDetailsForm.dateOfBirthMonth": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter a valid date", "partOf": null }, { "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1" }, { "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "12" }] }, "creditReferenceForm.thirdPartnerHomeAddresses.lengthAtAddressYears": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Max", "message": "Please enter the number of years.", "partOf": null, "value": "99" }, { "type": "javax.validation.constraints.Min", "message": "Please enter the number of years.", "partOf": null, "value": "0" }] }, "balGenerateEstimateDocumentForm.estimateForm.labourCost": { "type": "BigDecimal", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.DecimalMin", "message": "javax.validation.constraints.DecimalMin.message", "partOf": null, "inclusive": "true", "value": "0.0" }] }, "downloadReportsForm.endDate": { "type": "Date", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please provide end date", "partOf": null }] }, "extendedAddressForm.lastName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your last name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "addCreditSoleTraderDetailsForm.existingJewsonAccountNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid Jewson account number", "partOf": null, "regexp": "^([a-zA-Z]{1}[a-zA-Z0-9]{6,7})*$" }, { "type": "javax.validation.constraints.Size", "message": "Please enter a valid Jewson account number.", "partOf": null, "min": "0", "max": "8" }] }, "creditApplicationStep2Form.additional2.addresses.postcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid post code.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid post code.", "partOf": null, "regexp": "^([Gg][Ii][Rr]\\s?0[Aa]{2})|((([A-Za-z][0-9]{1,2}
3558)|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})|([WwEeNn]1[A-Za-z]\\s?[0-9][A-Za-z]{2})|([Nn][Pp][Tt]\\s?[0-9][A-Za-z]{2})$" }, { "type": "javax.validation.constraints.Size", "message": "Post code must be between 5 and 10 characters long.", "partOf": null, "min": "5", "max": "10" }] }, "creditApplicationStep2Form.additional.addresses.line2": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "creditApplicationStep2Form.additional.addresses.line1": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid address.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "guestRegisterForm.pwd": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your password.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Your password needs to consists of at least 12 characters, one lowercase letter, one upper case letter, one digit and one special character.", "partOf": null, "regexp": "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[.@,\\-_+\\\\/'?%$\"&*()^&!~])[a-zA-Z\\d.@,\\-_+\\\\/'?%$\"&*()^&!~]{12,}$" }] }, "pavingCalculatorForm.slabAreaWidth": { "type": "BigDecimal", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.DecimalMin", "message": "Width must be at least 1", "partOf": null, "inclusive": "true", "value": "1.0" }, { "type": "javax.validation.constraints.DecimalMax", "message": "Width must be lower than 999", "partOf": null, "inclusive": "true", "value": "999.0" }] }, "creditApplicationStep2Form.additional.addresses.townCity": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid town/city name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid town/city name.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "editProfileForm.password": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your account password", "partOf": null }] }, "creditApplicationStep2Form.additional.dateOfBirthMonth": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter a valid date", "partOf": null }, { "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1" }, { "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "12" }] }, "creditPaymentCardDetailsForm.paymentAddressForm.postcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid post code.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid post code.", "partOf": null, "regexp": "^([Gg][Ii][Rr]\\s?0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})|([WwEeNn]1[A-Za-z]\\s?[0-9][A-Za-z]{2})|([Nn][Pp][Tt]\\s?[0-9][A-Za-z]{2})$" }, { "type": "javax.validation.constraints.Size", "message": "Post code must be between 5 and 10 characters long.", "partOf": null, "min": "5", "max": "10" }] }, "creditReferenceForm.secondPartner.dateOfBirthMonth": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter a valid date", "partOf": null }, { "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1" }, { "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "12" }] }, "addApplicantDetailsForm.telephoneNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Telephone Number is invali
3558d. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your telephone number.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "min": "10", "max": "24" }, { "type": "com.sg.core.validation.ValidPhone", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null }] }, "brickCustomCalculatorForm.wallLength": { "type": "BigDecimal", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.DecimalMin", "message": "Length must be at least 1", "partOf": null, "inclusive": "true", "value": "1.0" }, { "type": "javax.validation.constraints.DecimalMax", "message": "Length must be lower than 999", "partOf": null, "inclusive": "true", "value": "999.0" }] }, "editProfileForm.mainContactNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your telephone number.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "min": "10", "max": "24" }, { "type": "com.sg.core.validation.ValidPhone", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null }] }, "creditReferenceForm.firstPartnerHomeAddresses.line2": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "addCompanyDetailsForm.companyAddresses.townCity": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid town/city name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid town/city name.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "tradeCashApplicationForm.address.postcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid post code.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid post code.", "partOf": null, "regexp": "^([Gg][Ii][Rr]\\s?0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})|([WwEeNn]1[A-Za-z]\\s?[0-9][A-Za-z]{2})|([Nn][Pp][Tt]\\s?[0-9][A-Za-z]{2})$" }, { "type": "javax.validation.constraints.Size", "message": "Post code must be between 5 and 10 characters long.", "partOf": null, "min": "5", "max": "10" }] }, "creditReferenceForm.firstPartnerHomeAddresses.line1": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid address.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "balEstimateForm.generateEstimateDocumentForm.dateDay": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "javax.validation.constraints.Min.message", "partOf": null, "value": "1" }, { "type": "javax.validation.constraints.Max", "message": "javax.validation.constraints.Max.message", "partOf": null, "value": "31" }] }, "addUploadProofForm.proofOfAddress": { "type": "MultipartFile", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "No file selected.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "We can only accept files smaller than 10MB", "partOf": null, "min": "0", "max": "10000" }, { "type": "javax.validation.constraints.Pattern", "message": "We can only accept files using the following formats: pdf,png,jpg,jpeg", "partOf": null, "regexp": "^.*\\.(jpg|JPG|jpeg|JPEG|png|PNG|pdf|PDF)$" }] }, "creditReferenceForm.thirdPartnerHomeAddresses.postcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid post code.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid post code.", "partOf": null, "regexp": "^([Gg][Ii][Rr]\\s?0[Aa]{2})|((([A-Za-z][0-9]{1,2}
3558)|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})|([WwEeNn]1[A-Za-z]\\s?[0-9][A-Za-z]{2})|([Nn][Pp][Tt]\\s?[0-9][A-Za-z]{2})$" }, { "type": "javax.validation.constraints.Size", "message": "Post code must be between 5 and 10 characters long.", "partOf": null, "min": "5", "max": "10" }] }, "balStockCheckForm.estimateForm.labourLength": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "javax.validation.constraints.Min.message", "partOf": null, "value": "0" }] }, "creditReferenceForm.thirdPartner.dateOfBirthYear": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter a valid date", "partOf": null }, { "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "2100" }, { "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1900" }] }, "voucherApplyForm.enterCode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Sorry, your voucher code is invalid.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Sorry, your voucher code is invalid.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.])?)*$" }] }, "addBankingDetailsForm.accountNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Please enter 8 digits", "partOf": null, "min": "8", "max": "8" }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter 8 digits", "partOf": null, "regexp": "^[0-9]*$" }] }, "billingAddressForm.familyName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "de.hybris.platform.validation.annotations.NotBlank.message", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "SGRegisterGuestForm.checkPwd": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "de.hybris.platform.validation.annotations.NotBlank.message", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[.@,\\-_+\\\\/'?%$\"&*()^&!~])[a-zA-Z\\d.@,\\-_+\\\\/'?%$\"&*()^&!~]{12,}$" }] }, "linkAccountRegisterForm.tradeAccountPostcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "10" }, { "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^(([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})?)*$" }] }, "contactDetailsWrapperForm.contactDetails.phoneNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "10", "max": "24" }, { "type": "javax.validation.constraints.NotBlank", "message": "javax.validation.constraints.NotBlank.message", "partOf": null }] }, "balAddToCartForm.generateEstimateDocumentForm.dateYear": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Max", "message": "javax.validation.constraints.Max.message", "partOf": null, "value": "2100" }, { "type": "javax.validation.constraints.Min", "message": "javax.validation.constraints.Min.message", "partOf": null, "value": "1900" }] }, "SGRegisterForm.acceptPrivacyPolicy": { "type": "boolean", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.AssertTrue", "message": "javax.validation.constraints.AssertTrue.message", "partOf": null }] }, "placeOrderForm.mobileNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Telephone Number is invali
3558d. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your mobile number.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "min": "10", "max": "24" }, { "type": "com.sg.core.validation.ValidPhone", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null }] }, "initialPwdForm.class": { "type": "UpdatePwdForm", "pattern": null, "constraints": [{ "type": "com.sg.sgstorefrontcommons.form.validation.PasswordMatch", "message": "", "partOf": null, "fieldName": "checkPwd" }] }, "placeOrderForm.termsCheck": { "type": "boolean", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.AssertTrue", "message": "Please accept the terms and conditions before placing your order", "partOf": null }] }, "creditApplicationStep5Form.reference2.accountNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Account number is invalid. It only can contain letters, digits, space, _,-,&", "partOf": null, "regexp": "^([0-9 A-Za-z-_&])*$" }] }, "creditApplicationStep2Form.additional2.phoneNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a mobile number.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "min": "10", "max": "24" }, { "type": "com.sg.core.validation.ValidPhone", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null }] }, "balAddToCartForm.stockCheckForm.postcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^(([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})?)*$" }] }, "balStockCheckForm.generateEstimateDocumentForm.dateDay": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "javax.validation.constraints.Min.message", "partOf": null, "value": "1" }, { "type": "javax.validation.constraints.Max", "message": "javax.validation.constraints.Max.message", "partOf": null, "value": "31" }] }, "SGRegisterForm.tradeAccPostcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^(([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})?)*$" }, { "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "10" }] }, "orderFilterForm.dateTo": { "type": "Date", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Date is required", "partOf": null }] }, "creditApplicationStep2Form.additional2.addresses.townCity": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid town/city name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid town/city name.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "guestRegisterForm.firstName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your first name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "balGenerateEstimateDocumentForm.estimateForm.labourLength": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "javax.validation.constraints.Min.message", "partOf": null, "value": "0" }] }, "stockCheckForm.locationQuery": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "javax.validation.constraints.NotNull.message", "partOf": null }] }, "addTradingDetailsForm.primaryTradeReference.line2": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "addTradingDetailsForm.primaryTradeReference.line1": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "creditApplicationStep4Form.titleCode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "255" }] }, "creditApplicationStep6Form.privacyPolicyAccepted": { "type": "boolean", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.AssertTrue", "message": "Please accept our privacy policy before submitting your application.", "partOf": null }] }, "tradeCashApplicationForm.companyRegistrationNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid company registration number", "partOf": null, "regexp": "^(([0-9A-Za-z])?)*$" }] }, "addTradingDetailsForm.secondaryTradeReference.townCity": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid town/city name.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "placeOrderForm.paymentAddressForm.townCity": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Town/city must not exceed 255 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid town/city name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid town/city name.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "pointOfServiceForCartForm.locationQuery": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "javax.validation.constraints.NotNull.message", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^([Gg][Ii][Rr]\\s?0[Aa]{2})|((([A-Za-z][0-9]{1,2}
3558)|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})|([WwEeNn]1[A-Za-z]\\s?[0-9][A-Za-z]{2})|([Nn][Pp][Tt]\\s?[0-9][A-Za-z]{2})$" }, { "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "5", "max": "10" }] }, "extendedPaymentAddressForm.townCity": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Town/city must not exceed 255 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid town/city name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid town/city name.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "creditReferenceForm.firstPartnerHomeAddresses.postcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid post code.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid post code.", "partOf": null, "regexp": "^([Gg][Ii][Rr]\\s?0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})|([WwEeNn]1[A-Za-z]\\s?[0-9][A-Za-z]{2})|([Nn][Pp][Tt]\\s?[0-9][A-Za-z]{2})$" }, { "type": "javax.validation.constraints.Size", "message": "Post code must be between 5 and 10 characters long.", "partOf": null, "min": "5", "max": "10" }] }, "creditReferenceForm.firstPartner.dateOfBirthYear": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter a valid date", "partOf": null }, { "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "2100" }, { "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1900" }] }, "updateWishlistEntryQuantityForm.quantity": { "type": "int", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Max", "message": "Max.updateWishlistEntryQuantityForm.qty", "partOf": null, "value": "9999" }, { "type": "javax.validation.constraints.Min", "message": "Min.updateWishlistEntryQuantityForm.qty", "partOf": null, "value": "0" }] }, "addCompanyDetailsForm.companyRegistrationNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid company registration number", "partOf": null, "regexp": "^(([0-9A-Za-z])?)*$" }] }, "balAddToCartForm.estimateForm.labourCost": { "type": "BigDecimal", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.DecimalMin", "message": "javax.validation.constraints.DecimalMin.message", "partOf": null, "inclusive": "true", "value": "0.0" }] }, "addTradingDetailsForm.branch": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please select your preferred branch.", "partOf": null }] }, "stockCheckForm.productCode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.NotBlank", "message": "javax.validation.constraints.NotBlank.message", "partOf": null }] }, "cartStoreSearchForm.locationQuery": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter your postcode to proceed", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Could not find the specified address.", "partOf": null, "regexp": "^([Gg][Ii][Rr]\\s?0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})|([WwEeNn]1[A-Za-z]\\s?[0-9][A-Za-z]{2})|([Nn][Pp][Tt]\\s?[0-9][A-Za-z]{2})$" }] }, "tradeCashApplicationForm.address.line1": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid address.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "tradeCashApplicationForm.address.line2": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "creditApplicationStep2Form.phoneNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Telephone Number is invali
3558d. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a mobile number.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "min": "10", "max": "24" }, { "type": "com.sg.core.validation.ValidPhone", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null }] }, "creditReferenceForm.secondPartner.class": { "type": "ApplicantPersonalDetailsForm", "pattern": null, "constraints": [{ "type": "com.sg.b2b.form.validator.BirthDate", "message": "", "partOf": null, "minimumAge": "18", "maximumAge": "100" }] }, "extendedAddressForm.line1": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Address Line 1 must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid address.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "extendedAddressForm.line2": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Address Line 2 must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "tradeAccountActivationConfirmForm.mobileNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "javax.validation.constraints.Size", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "min": "10", "max": "24" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your telephone number.", "partOf": null }, { "type": "com.sg.core.validation.ValidPhone", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null }] }, "creditReferenceForm.thirdPartner.class": { "type": "ApplicantPersonalDetailsForm", "pattern": null, "constraints": [{ "type": "com.sg.b2b.form.validator.BirthDate", "message": "", "partOf": null, "minimumAge": "18", "maximumAge": "100" }] }, "creditApplicationStep2Form.additional2.email": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid email address.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Email must be between 6 and 80 characters long.", "partOf": null, "min": "0", "max": "80" }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid email address.", "partOf": null, "regexp": "^\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,20}\\b$" }] }, "creditApplicationStep1Form.relationshipWithBusinessOwner": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.NotBlank", "message": "Please enter your relationship with the business owner", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Relationship with the business owner must not exceed 35 characters.", "partOf": null, "min": "0", "max": "255" }] }, "addTermsAndConditionsForm.customerDeclarationAgreed": { "type": "boolean", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.AssertTrue", "message": "You must agree to the Customer declaration", "partOf": null }] }, "tradeCashApplicationForm.address.townCity": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid town/city name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid town/city name.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "preferredBranchForm.branch": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please select a branch", "partOf": null }] }, "addCompanyDetailsForm.companyAddresses.lengthAtAddressMonths": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "Please enter the number of months.", "partOf": null, "value": "0" }, { "type": "javax.validation.constraints.Max", "message": "Please enter the number of months.", "partOf": null, "value": "12" }] }, "balGenerateEstimateDocumentForm.generateEstimateDocumentForm.dateDay": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1" }, { "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "31" }] }, "creditApplicationStep3Form.incorporationMonth": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1" }, { "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "12" }] }, "addCompanyDetailsForm.descriptionOfBusiness": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please select one option from the list", "partOf": null }] }, "tradeAccountActivationVerifyForm.gdpr": { "type": "boolean", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.AssertTrue", "message": "You must agree to the GDPR in order to proceed", "partOf": null }] }, "creditApplicationStep3SelfBuilderForm.branch": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please select your preferred branch.", "partOf": null }] }, "SGRegisterForm.tradeAccountNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^([a-zA-Z]{1}[a-zA-Z0-9]{6,7})*$" }, { "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "8" }] }, "brickStandardCalculatorForm.wallWidth": { "type": "BigDecimal", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.DecimalMin", "message": "Height must be at least 1", "partOf": null, "inclusive": "true", "value": "1.0" }, { "type": "javax.validation.constraints.DecimalMax", "message": "Height must be lower than 999", "partOf": null, "inclusive": "true", "value": "999.0" }] }, "SGRegisterGuestForm.mobileNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "10", "max": "24" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "de.hybris.platform.validation.annotations.NotBlank.message", "partOf": null }, { "type": "com.sg.core.validation.ValidPhone", "message": "Telephone Number is invali
3558d. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null }] }, "toolHireRequestForm.quantity": { "type": "int", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "Quantity must be at least 1", "partOf": null, "value": "1" }, { "type": "javax.validation.constraints.Max", "message": "Quantity must be lower than 999", "partOf": null, "value": "999" }] }, "billingAddressForm.postalCode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "de.hybris.platform.validation.annotations.NotBlank.message", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^([Gg][Ii][Rr]\\s?0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})|([WwEeNn]1[A-Za-z]\\s?[0-9][A-Za-z]{2})|([Nn][Pp][Tt]\\s?[0-9][A-Za-z]{2})$" }, { "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "5", "max": "10" }] }, "SGRegisterGuestForm.class": { "type": "SGRegisterGuestForm", "pattern": null, "constraints": [{ "type": "com.sg.sgstorefrontcommons.form.validation.PasswordMatch", "message": "", "partOf": null, "fieldName": "checkPwd" }] }, "addTradingDetailsForm.primaryTradeReference.companyName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Company Name is invalid. It only can contain letters, digits, space, _,-,&", "partOf": null, "regexp": "^([0-9 A-Za-z-_&])*$" }] }, "SGRegisterForm.mobileNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "10", "max": "24" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "de.hybris.platform.validation.annotations.NotBlank.message", "partOf": null }, { "type": "com.sg.core.validation.ValidPhone", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null }] }, "creditReferenceForm.secondPartnerHomeAddresses.townCity": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid town/city name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid town/city name.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "addBankingDetailsForm.bankAddress.postcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid post code.", "partOf": null, "regexp": "^(([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})?)*$" }] }, "creditApplicationStep1Form.firstName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your first name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "balStockCheckForm.generateEstimateDocumentForm.dateMonth": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "javax.validation.constraints.Min.message", "partOf": null, "value": "1" }, { "type": "javax.validation.constraints.Max", "message": "javax.validation.constraints.Max.message", "partOf": null, "value": "12" }] }, "guestForm.firstName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your first name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "creditApplicationStep2Form.additional.titleCode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "255" }] }, "creditReferenceForm.thirdPartner.firstName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your first name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "creditApplicationStep4Form.sortCode3": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Please enter a sort code", "partOf": null, "min": "2", "max": "2" }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a sort code", "partOf": null, "regexp": "^[0-9]*$" }] }, "creditApplicationStep4Form.sortCode2": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Please enter a sort code", "partOf": null, "min": "2", "max": "2" }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a sort code", "partOf": null, "regexp": "^[0-9]*$" }] }, "creditApplicationStep4Form.sortCode1": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Please enter a sort code", "partOf": null, "min": "2", "max": "2" }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a sort code", "partOf": null, "regexp": "^[0-9]*$" }] }, "balEstimateForm.estimateForm.labourLength": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "Please enter a numerical value.", "partOf": null, "value": "0" }] }, "brickStandardCalculatorForm.brick": { "type": "Brick", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please select whether you would like to use a brick or block", "partOf": null }] }, "creditApplicationStep2Form.additional.dateOfBirthYear": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter a valid date", "partOf": null }, { "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "2100" }, { "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1900" }] }, "creditApplicationStep2Form.dateOfBirthDay": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter a valid date", "partOf": null }, { "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1" }, { "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "31" }] }, "addApplicantDetailsForm.dateOfBirthMonth": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter a valid date", "partOf": null }, { "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1" }, { "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "12" }] }, "addApplicantDetailsForm.class": { "type": "ApplicantDetailsForm", "pattern": null, "constraints": [{ "type": "com.sg.b2b.form.validator.BirthDate", "message": "", "partOf": null, "minimumAge": "18", "maximumAge": "100" }] }, "creditApplicationStep6Form.termsAccepted": { "type": "boolean", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.AssertTrue", "message": "Please accept our terms & conditions before submitting your application.", "partOf": null }] }, "creditApplicationStep2Form.additional2.addresses.lengthAtAddressYears": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Max", "message": "Please enter the number of years.", "partOf": null, "value": "99" }, { "type": "javax.validation.constraints.Min", "message": "Please enter the number of years.", "partOf": null, "value": "0" }] }, "creditApplicationStep3SelfBuilderForm.projectStartYear": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "2100" }, { "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1900" }] }, "creditApplicationStep2Form.additional.dateOfBirthDay": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter a valid date", "partOf": null }, { "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1" }, { "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "31" }] }
3558, "toolHireUpdateForm.productCode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.NotBlank", "message": "Product code must not be empty", "partOf": null }] }, "creditReferenceForm.firstPartner.dateOfBirthMonth": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter a valid date", "partOf": null }, { "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1" }, { "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "12" }] }, "balEstimateForm.resultLineForms.quantity": { "type": "int", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "javax.validation.constraints.Min.message", "partOf": null, "value": "0" }] }, "addBankingDetailsForm.sortCode3": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Please enter a sort code", "partOf": null, "min": "2", "max": "2" }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a sort code", "partOf": null, "regexp": "^[0-9]*$" }] }, "addBankingDetailsForm.sortCode2": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Please enter a sort code", "partOf": null, "min": "2", "max": "2" }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a sort code", "partOf": null, "regexp": "^[0-9]*$" }] }, "tradeAccountActivationVerifyForm.tradeAccountNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid Jewson account number which is up to 8 characters long and contains no special characters.", "partOf": null, "regexp": "^[A-Za-z0-9]{1,8}$" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your Jewson account number", "partOf": null }] }, "addBankingDetailsForm.sortCode1": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Please enter a sort code", "partOf": null, "min": "2", "max": "2" }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a sort code", "partOf": null, "regexp": "^[0-9]*$" }] }, "creditApplicationStep2Form.titleCode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "255" }] }, "invoiceFilterForm.dateTo": { "type": "Date", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "'To date' date is required", "partOf": null }] }, "linkAccountRegisterForm.tradeAccountNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^([a-zA-Z]{1}[a-zA-Z0-9]{6,7})*$" }, { "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "8" }] }, "creditPaymentCardDetailsForm.paymentAddressForm.line2": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Address Line 2 must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "creditPaymentCardDetailsForm.paymentAddressForm.line1": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Address Line 1 must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid address.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "tileCalculatorForm.tileAreaLength": { "type": "BigDecimal", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.DecimalMin", "message": "Length must be at least 1", "partOf": null, "inclusive": "true", "value": "1.0" }, { "type": "javax.validation.constraints.DecimalMax", "message": "Length must be lower than 999", "partOf": null, "inclusive": "true", "value": "999.0" }] }, "creditApplicationStep3SelfBuilderForm.buildType": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a type of build.", "partOf": null }] }, "preferredBranchForm.branchLocatorQuery": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your town or postcode", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid postcode", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "linkAccountRegisterForm.pwd": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Your password needs to consists of at least 12 characters, one lowercase letter, one upper case letter, one digit and one special character.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Your password needs to consists of at least 12 characters, one lowercase letter, one upper case letter, one digit and one special character.", "partOf": null, "regexp": "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[.@,\\-_+\\\\/'?%$\"&*()^&!~])[a-zA-Z\\d.@,\\-_+\\\\/'?%$\"&*()^&!~]{12,}$" }] }, "SGRegisterGuestForm.pwd": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "de.hybris.platform.validation.annotations.NotBlank.message", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[.@,\\-_+\\\\/'?%$\"&*()^&!~])[a-zA-Z\\d.@,\\-_+\\\\/'?%$\"&*()^&!~]{12,}$" }] }, "completePaymentForm.paymentToken": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "de.hybris.platform.validation.annotations.NotBlank.message", "partOf": null }] }, "creditApplicationStep3SelfBuilderForm.creditLimit": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter an appropriate credit limit.", "partOf": null }, { "type": "javax.validation.constraints.Max", "message": "Please enter an appropriate credit limit.", "partOf": null, "value": "75000" }, { "type": "javax.validation.constraints.Min", "message": "Please enter an appropriate credit limit.", "partOf": null, "value": "500" }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter an appropriate credit limit.", "partOf": null, "regexp": "^(\\d+)*$" }] }, "balStockCheckForm.stockCheckForm.postcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^(([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2}
3558)|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})?)*$" }] }, "creditApplicationStep2Form.additional2.titleCode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "255" }] }, "addCreditSoleTraderDetailsForm.class": { "type": "CreditSoleTraderDetailsForm", "pattern": null, "constraints": [{ "type": "com.sg.b2b.form.validator.BirthDate", "message": "", "partOf": null, "minimumAge": "18", "maximumAge": "100" }] }, "SGRegisterGuestForm.tradeAccNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^([a-zA-Z]{1}[a-zA-Z0-9]{6,7})*$" }, { "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "8" }] }, "balEstimateForm.estimateForm.labourCost": { "type": "BigDecimal", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.DecimalMin", "message": "Please enter a numerical value.", "partOf": null, "inclusive": "true", "value": "0.0" }] }, "resendVerificationEmailForm.email": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "org.hibernate.validator.constraints.Email", "message": "forgottenPwd.email.invalid", "partOf": null, "regexp": "^\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,20}\\b$" }, { "type": "javax.validation.constraints.Pattern", "message": "forgottenPwd.email.invalid", "partOf": "Email", "regexp": "" }] }, "registerInterestForm.email": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid email address.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Email must be between 6 and 80 characters long.", "partOf": null, "min": "0", "max": "80" }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid email address.", "partOf": null, "regexp": "^\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,20}\\b$" }] }, "placeOrderForm.paymentAddressForm.line1": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Address Line 1 must not exceed 255 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid address.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "placeOrderForm.paymentAddressForm.line2": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Address Line 2 must not exceed 255 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "extendedAddressForm.firstName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your first name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "registerForm.tradeAccPostcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^(([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2}
3558)|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})?)*$" }, { "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "10" }] }, "brickStandardCalculatorForm.wallLength": { "type": "BigDecimal", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.DecimalMin", "message": "Length must be at least 1", "partOf": null, "inclusive": "true", "value": "1.0" }, { "type": "javax.validation.constraints.DecimalMax", "message": "Length must be lower than 999", "partOf": null, "inclusive": "true", "value": "999.0" }] }, "registerForm.checkPwd": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please confirm your password.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Your password needs to consists of at least 12 characters, one lowercase letter, one upper case letter, one digit and one special character.", "partOf": null, "regexp": "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[.@,\\-_+\\\\/'?%$\"&*()^&!~])[a-zA-Z\\d.@,\\-_+\\\\/'?%$\"&*()^&!~]{12,}$" }] }, "extendedAddressForm.cellphone": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your telephone number.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "min": "10", "max": "24" }, { "type": "com.sg.core.validation.ValidPhone", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null }] }, "creditReferenceForm.secondPartnerHomeAddresses.line1": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid address.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "billingAddressForm.locality": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "de.hybris.platform.validation.annotations.NotBlank.message", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "creditReferenceForm.secondPartnerHomeAddresses.line2": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "searchForm.text": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid search term.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Search term must not exceed 100 characters.", "partOf": null, "min": "0", "max": "100" }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid search term.", "partOf": null, "regexp": "^[\\w\\d\\s\\.,\\/\\-_]{1,100}$" }] }, "balStockCheckForm.estimateForm.materialMarkup": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "javax.validation.constraints.Min.message", "partOf": null, "value": "0" }, { "type": "javax.validation.constraints.Max", "message": "javax.validation.constraints.Max.message", "partOf": null, "value": "999" }] }, "loftInsulationCalculatorForm.rollType": { "type": "InsulationRoll", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please select a roll size", "partOf": null }] }, "creditApplicationStep2Form.additional.email": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid email address.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Email must be between 6 and 80 characters long.", "partOf": null, "min": "0", "max": "80" }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid email address.", "partOf": null, "regexp": "^\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,20}\\b$" }] }, "enterPasscodeForm.passcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter a valid passcode", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid passcode", "partOf": null, "regexp": "^(([0-9A-Za-z]){8})+$" }] }, "creditReferenceForm.secondPartnerHomeAddresses.lengthAtAddressMonths": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "Please enter the number of months.", "partOf": null, "value": "0" }, { "type": "javax.validation.constraints.Max", "message": "Please enter the number of months.", "partOf": null, "value": "12" }] }, "creditReferenceForm.firstPartner.class": { "type": "ApplicantPersonalDetailsForm", "pattern": null, "constraints": [{ "type": "com.sg.b2b.form.validator.BirthDate", "message": "", "partOf": null, "minimumAge": "18", "maximumAge": "100" }] }, "loftInsulationCalculatorForm.width": { "type": "BigDecimal", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.DecimalMin", "message": "Width must be at least 1", "partOf": null, "inclusive": "true", "value": "1.0" }, { "type": "javax.validation.constraints.DecimalMax", "message": "Width must be lower than 999", "partOf": null, "inclusive": "true", "value": "999.0" }] }, "SGAddToCartForm.qty": { "type": "long", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "Min.addToCartForm.qty", "partOf": null, "value": "0" }, { "type": "javax.validation.constraints.Max", "message": "Max.addToCartForm.qty", "partOf": null, "value": "9999" }] }, "deliveryMethodForm.deliveryMethod": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Delivery method is required", "partOf": null }] }, "creditApplicationStep2Form.firstName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a first name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "SGRegisterForm.email": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "de.hybris.platform.validation.annotations.NotBlank.message", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "80" }, { "type": "org.hibernate.validator.constraints.Email", "message": "org.hibernate.validator.constraints.Email.message", "partOf": null, "regexp": "^\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,20}\\b$" }, { "type": "javax.validation.constraints.Pattern", "message": "org.hibernate.validator.constraints.Email.message", "partOf": "Email", "regexp": "" }] }, "creditReferenceForm.secondPartner.dateOfBirthDay": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter a valid date", "partOf": null }, { "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1" }, { "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "31" }] }, "registerForm.lastName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your last name", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "registerForm.email": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid email address.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Email must be between 6 and 80 characters long.", "partOf": null, "min": "0", "max": "80" }, { "type": "org.hibernate.validator.constraints.Email", "message": "Please enter a valid email address.", "partOf": null, "regexp": "^\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,20}\\b$" }, { "type": "javax.validation.constraints.Pattern", "message": "org.hibernate.validator.constraints.Email.message", "partOf": "Email", "regexp": "" }] }, "creditReferenceForm.thirdPartner.telephoneNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Telephone Number is invali
3558d. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "javax.validation.constraints.Size", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "min": "10", "max": "24" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your telephone number.", "partOf": null }, { "type": "com.sg.core.validation.ValidPhone", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null }] }, "addCreditSoleTraderDetailsForm.descriptionOfBusiness": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please select one option from the list", "partOf": null }] }, "creditReferenceForm.thirdPartnerHomeAddresses.townCity": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid town/city name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid town/city name.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "addCompanyDetailsForm.typeOfCompany": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please select the company type from the list.", "partOf": null }] }, "billingAddressForm.givenName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "de.hybris.platform.validation.annotations.NotBlank.message", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "creditReferenceForm.secondPartner.lastName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your last name", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "creditPaymentCardDetailsForm.paymentAddressForm.townCity": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Town/city must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid town/city name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid town/city name.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "creditReferenceForm.firstPartner.lastName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your last name", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "addTradingDetailsForm.primaryTradeReference.creditLimit": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter the credit limit.", "partOf": null, "regexp": "^(\\d+)*$" }] }, "guestRegisterForm.class": { "type": "SGRegisterGuestForm", "pattern": null, "constraints": [{ "type": "com.sg.sgstorefrontcommons.form.validation.PasswordMatch", "message": "", "partOf": null, "fieldName": "checkPwd" }] }, "SGRegisterForm.lastName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "de.hybris.platform.validation.annotations.NotBlank.message", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "creditApplicationStep2Form.additional2.dateOfBirthYear": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter a valid date", "partOf": null }, { "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "2100" }, { "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1900" }] }, "SGRegisterGuestForm.acceptPrivacyPolicy": { "type": "boolean", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.AssertTrue", "message": "javax.validation.constraints.AssertTrue.message", "partOf": null }] }, "balEstimateForm.stockCheckForm.postcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^(([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2}
3558)|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})?)*$" }] }, "tradeAccountActivationConfirmForm.firstName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your first name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "balGenerateEstimateDocumentForm.resultLineForms.quantity": { "type": "int", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "javax.validation.constraints.Min.message", "partOf": null, "value": "0" }] }, "addTradingDetailsForm.secondaryTradeReference.creditLimit": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter the credit limit.", "partOf": null, "regexp": "^(\\d+)*$" }] }, "balAddToCartForm.generateEstimateDocumentForm.dateMonth": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "javax.validation.constraints.Min.message", "partOf": null, "value": "1" }, { "type": "javax.validation.constraints.Max", "message": "javax.validation.constraints.Max.message", "partOf": null, "value": "12" }] }, "billingAddressForm.line1": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "de.hybris.platform.validation.annotations.NotBlank.message", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "billingAddressForm.line2": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "35" }, { "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "creditApplicationStep5Form.reference2.companyName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Company name is invalid. It only can contain letters, digits, space, _,-,&", "partOf": null, "regexp": "^([0-9 A-Za-z-_&])*$" }] }, "linkAccountRegisterForm.checkPwd": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please confirm your password.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Your password needs to consists of at least 12 characters, one lowercase letter, one upper case letter, one digit and one special character.", "partOf": null, "regexp": "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[.@,\\-_+\\\\/'?%$\"&*()^&!~])[a-zA-Z\\d.@,\\-_+\\\\/'?%$\"&*()^&!~]{12,}$" }] }, "creditApplicationStep2Form.additional.firstName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a first name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "addUploadProofForm.proofOfIdentity": { "type": "MultipartFile", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "No file selected.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "We can only accept files smaller than 10MB", "partOf": null, "min": "0", "max": "10000" }, { "type": "javax.validation.constraints.Pattern", "message": "We can only accept files using the following formats: pdf,png,jpg,jpeg", "partOf": null, "regexp": "^.*\\.(jpg|JPG|jpeg|JPEG|png|PNG|pdf|PDF)$" }] }, "updateQuantityForm.quantity": { "type": "Long", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Quantity field cannot be empty.", "partOf": null }, { "type": "javax.validation.constraints.Min", "message": "Please enter a valid quantity.", "partOf": null, "value": "0" }, { "type": "javax.validation.constraints.Digits", "message": "Please enter a valid quantity.", "partOf": null, "integer": "10", "fraction": "0" }] }, "creditApplicationStep3Form.creditLimit": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter an appropriate credit limit.", "partOf": null }, { "type": "javax.validation.constraints.Max", "message": "Please enter an appropriate credit limit.", "partOf": null, "value": "75000" }, { "type": "javax.validation.constraints.Min", "message": "Please enter an appropriate credit limit.", "partOf": null, "value": "500" }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter an appropriate credit limit.", "partOf": null, "regexp": "^(\\d+)*$" }] }, "creditApplicationStep5Form.reference1.companyName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Company name is invali
3558d. It only can contain letters, digits, space, _,-,&", "partOf": null, "regexp": "^([0-9 A-Za-z-_&])*$" }] }, "linkAccountRegisterForm.tradeAccNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid trade account number.", "partOf": null, "regexp": "^([a-zA-Z]{1}[a-zA-Z0-9]{6,7})*$" }, { "type": "javax.validation.constraints.Size", "message": "Please enter a valid trade account number.", "partOf": null, "min": "0", "max": "8" }] }, "SGRegisterForm.tradeAccNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^([a-zA-Z]{1}[a-zA-Z0-9]{6,7})*$" }, { "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "8" }] }, "creditReferenceForm.thirdPartner.lastName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your last name", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "SGRegisterGuestForm.lastName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "de.hybris.platform.validation.annotations.NotBlank.message", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "linkAccountRegisterForm.email": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid email address.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Email must be between 6 and 80 characters long.", "partOf": null, "min": "0", "max": "80" }, { "type": "org.hibernate.validator.constraints.Email", "message": "Please enter a valid email address.", "partOf": null, "regexp": "^\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,20}\\b$" }, { "type": "javax.validation.constraints.Pattern", "message": "org.hibernate.validator.constraints.Email.message", "partOf": "Email", "regexp": "" }] }, "placeToolHireRequestForm.termsCheck": { "type": "boolean", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.AssertTrue", "message": "Please accept the terms and conditions before placing your order", "partOf": null }] }, "billingAddressForm.countryCode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "1", "max": "2" }, { "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^([A-Z]*)$" }] }, "balEstimateForm.generateEstimateDocumentForm.dateMonth": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "javax.validation.constraints.Min.message", "partOf": null, "value": "1" }, { "type": "javax.validation.constraints.Max", "message": "javax.validation.constraints.Max.message", "partOf": null, "value": "12" }] }, "creditReferenceForm.secondPartnerHomeAddresses.postcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid post code.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid post code.", "partOf": null, "regexp": "^([Gg][Ii][Rr]\\s?0[Aa]{2})|((([A-Za-z][0-9]{1,2}
3558)|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})|([WwEeNn]1[A-Za-z]\\s?[0-9][A-Za-z]{2})|([Nn][Pp][Tt]\\s?[0-9][A-Za-z]{2})$" }, { "type": "javax.validation.constraints.Size", "message": "Post code must be between 5 and 10 characters long.", "partOf": null, "min": "5", "max": "10" }] }, "balEstimateForm.estimateForm.materialMarkup": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "Please enter a positive number.", "partOf": null, "value": "0" }, { "type": "javax.validation.constraints.Max", "message": "Maximum allowed markup is 999%.", "partOf": null, "value": "999" }] }, "guestRegisterForm.lastName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your last name", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "tradeCashApplicationForm.branchLocatorQuery": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your town or postcode.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter your town or postcode.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "creditReferenceForm.firstPartner.telephoneNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "javax.validation.constraints.Size", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "min": "10", "max": "24" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your telephone number.", "partOf": null }, { "type": "com.sg.core.validation.ValidPhone", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null }] }, "radiatorCalculatorForm.roomWidth": { "type": "BigDecimal", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.DecimalMin", "message": "Width must be at least 1", "partOf": null, "inclusive": "true", "value": "1.0" }, { "type": "javax.validation.constraints.DecimalMax", "message": "Width must be lower than 999", "partOf": null, "inclusive": "true", "value": "999.0" }] }, "pavingCalculatorForm.slabAreaLength": { "type": "BigDecimal", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.DecimalMin", "message": "Length must be at least 1", "partOf": null, "inclusive": "true", "value": "1.0" }, { "type": "javax.validation.constraints.DecimalMax", "message": "Length must be lower than 999", "partOf": null, "inclusive": "true", "value": "999.0" }] }, "addCreditSoleTraderDetailsForm.dateOfBirthYear": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter a valid date", "partOf": null }, { "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "2100" }, { "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1900" }] }, "addBankingDetailsForm.bankAddress.line2": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "addBankingDetailsForm.bankAddress.line1": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "balStockCheckForm.generateEstimateDocumentForm.dateYear": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Max", "message": "javax.validation.constraints.Max.message", "partOf": null, "value": "2100" }, { "type": "javax.validation.constraints.Min", "message": "javax.validation.constraints.Min.message", "partOf": null, "value": "1900" }] }, "creditReferenceForm.firstPartner.firstName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your first name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "creditApplicationStep3Form.companyRegistrationNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid company registration number", "partOf": null, "regexp": "^(([0-9A-Za-z])?)*$" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a company registration number.", "partOf": null }] }, "creditApplicationStep2Form.additional.lastName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a last name", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "addApplicantDetailsForm.dateOfBirthYear": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter a valid date", "partOf": null }, { "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "2100" }, { "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1900" }] }, "linkAccountRegisterForm.tradeAccPostcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid trade account postcode.", "partOf": null, "regexp": "^(([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2}
3558)|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})?)*$" }, { "type": "javax.validation.constraints.Size", "message": "Please enter a valid trade account postcode.", "partOf": null, "min": "0", "max": "10" }] }, "creditApplicationStep2Form.dateOfBirthYear": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter a valid date", "partOf": null }, { "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "2100" }, { "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1900" }] }, "tradeAccountActivationConfirmForm.termsCheck": { "type": "boolean", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.AssertTrue", "message": "You must agree to the GDPR in order to proceed", "partOf": null }] }, "addCompanyDetailsForm.monthlySpend": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please select your estimated monthly spend with us from the list", "partOf": null }] }, "addCompanyDetailsForm.existingJewsonAccountNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter your existing Jewson account number", "partOf": null, "regexp": "^([a-zA-Z]{1}[a-zA-Z0-9]{6,7})*$" }, { "type": "javax.validation.constraints.Size", "message": "Please enter a valid Jewson account number.", "partOf": null, "min": "0", "max": "8" }] }, "tradeCashApplicationForm.address.lengthAtAddressMonths": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "javax.validation.constraints.Min.message", "partOf": null, "value": "0" }, { "type": "javax.validation.constraints.Max", "message": "javax.validation.constraints.Max.message", "partOf": null, "value": "12" }] }, "creditReferenceForm.secondPartner.firstName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your first name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "creditReferenceForm.thirdPartner.jobTitle": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid job title.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid job title.", "partOf": null, "regexp": "^(([0-9 A-Za-z-_&])?)*$" }] }, "creditApplicationStep2Form.additional2.dateOfBirthDay": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter a valid date", "partOf": null }, { "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1" }, { "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "31" }] }, "addUploadProofForm.proofOfSignedAgreement": { "type": "MultipartFile", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "No file selected.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "We can only accept files smaller than 10MB", "partOf": null, "min": "0", "max": "10000" }, { "type": "javax.validation.constraints.Pattern", "message": "We can only accept files using the following formats: pdf,png,jpg,jpeg", "partOf": null, "regexp": "^.*\\.(jpg|JPG|jpeg|JPEG|png|PNG|pdf|PDF)$" }] }, "registerForm.tradeAccountPostcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "10" }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid account postcode.", "partOf": null, "regexp": "^(([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2}
3558)|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})?)*$" }] }, "addTradingDetailsForm.primaryTradeReference.postcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid post code.", "partOf": null, "regexp": "^(([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})?)*$" }] }, "orderFilterForm.amountFrom": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please provide a valid number", "partOf": null, "regexp": "^$|^(\\d+\\.)?\\d+$" }] }, "extendedAddressForm.customerOrderReference": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid order reference", "partOf": null, "regexp": "^(([a-zA-Z0-9\\\\ !$%&'()*+,-./:;=?@^_`{}|~\\]\\[])?)*$" }, { "type": "javax.validation.constraints.Size", "message": "Your order reference must not exceed 20 characters", "partOf": null, "min": "0", "max": "20" }] }, "addCompanyDetailsForm.companyAddresses.line1": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid address.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "pavingCalculatorForm.slabSize": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please select a slab size", "partOf": null, "regexp": "^_..._...$" }] }, "addCompanyDetailsForm.companyAddresses.line2": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "tradeCashApplicationForm.company": { "type": "Boolean", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please select one option", "partOf": null }] }, "wishlistCreateForm.name": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Project List name is required", "partOf": null }] }, "balAddToCartForm.estimateForm.labourLength": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "javax.validation.constraints.Min.message", "partOf": null, "value": "0" }] }, "addCreditSoleTraderDetailsForm.lastName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your last name", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "completePaymentForm.customerOrderReference": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^(([a-zA-Z0-9\\\\ !$%&'()*+,-./:;=?@^_`{}|~\\]\\[])?)*$" }, { "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "20" }] }, "editProfileForm.email": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid email address.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "80" }, { "type": "org.hibernate.validator.constraints.Email", "message": "Please enter a valid email address.", "partOf": null, "regexp": "^\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,20}\\b$" }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid email address.", "partOf": "Email", "regexp": "" }] }, "creditApplicationStep1Form.lastName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your last name", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "operativeCardForm.cardHolderName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Maximum length is 20 characters.", "partOf": null, "min": "0", "max": "20" }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid name using letters and numbers only.", "partOf": null, "regexp": "^([0-9a-zA-Z -])*$" }] }, "tradeCashApplicationForm.branch": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please select your preferred branch.", "partOf": null }] }, "invoiceFilterForm.dateFrom": { "type": "Date", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "'From date' is required", "partOf": null }] }, "creditReferenceForm.thirdPartnerHomeAddresses.line1": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid address.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "creditApplicationStep2Form.addresses.lengthAtAddressYears": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Max", "message": "Please enter the number of years.", "partOf": null, "value": "99" }, { "type": "javax.validation.constraints.Min", "message": "Please enter the number of years.", "partOf": null, "value": "0" }] }, "addTradingDetailsForm.creditLimit": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Enter an appropriate credit limit.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Enter an appropriate credit limit.", "partOf": null, "regexp": "^(\\d+)*$" }, { "type": "javax.validation.constraints.Max", "message": "Enter an appropriate credit limit.", "partOf": null, "value": "999999999" }] }, "creditReferenceForm.thirdPartnerHomeAddresses.line2": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "SGRegisterForm.pwd": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "de.hybris.platform.validation.annotations.NotBlank.message", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[.@,\\-_+\\\\/'?%$\"&*()^&!~])[a-zA-Z\\d.@,\\-_+\\\\/'?%$\"&*()^&!~]{12,}$" }] }, "SGRegisterGuestForm.tradeAccountNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^([a-zA-Z]{1}[a-zA-Z0-9]{6,7})*$" }, { "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "8" }] }, "addTermsAndConditionsForm.termsAgreed": { "type": "boolean", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.AssertTrue", "message": "Please accept our terms & conditions before submitting your application.", "partOf": null }] }, "initialPwdForm.checkPwd": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please confirm your password", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Your password must include at least 8 characters including one upper case letter, one lower case letter and one digit.", "partOf": null, "regexp": "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[.@,\\-_+\\\\/'?%$\"&*()^&!~])[a-zA-Z\\d.@,\\-_+\\\\/'?%$\"&*()^&!~]{12,}$" }] }, "guestRegisterForm.tradeAccountNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid Jewson account number.", "partOf": null, "regexp": "^([a-zA-Z]{1}[a-zA-Z0-9]{6,7})*$" }, { "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "8" }] }, "creditApplicationStep3SelfBuilderForm.townCity": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid town/city name.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "SGRegisterForm.firstName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "de.hybris.platform.validation.annotations.NotBlank.message", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "addCompanyDetailsForm.employeeCount": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please select the number of employees from the list", "partOf": null }] }, "SGRegisterGuestForm.firstName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "de.hybris.platform.validation.annotations.NotBlank.message", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "creditReferenceForm.thirdPartner.mainContactNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Telephone Number is invali
3558d. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your telephone number.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "min": "10", "max": "24" }, { "type": "com.sg.core.validation.ValidPhone", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null }] }, "requestOperativeCardsForm.termsAndConditions": { "type": "boolean", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please accept terms and conditions", "partOf": null }] }, "invoiceFilterForm.amountTo": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please provide a valid number", "partOf": null, "regexp": "^$|^(\\-\\d+\\.|\\d+\\.)?\\d+$" }] }, "guestForm.email": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Email must be between 6 and 80 characters long.", "partOf": null, "min": "0", "max": "80" }, { "type": "org.hibernate.validator.constraints.Email", "message": "Please enter a valid email address.", "partOf": null, "regexp": "^\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,20}\\b$" }, { "type": "javax.validation.constraints.Pattern", "message": "org.hibernate.validator.constraints.Email.message", "partOf": "Email", "regexp": "" }] }, "addCreditSoleTraderDetailsForm.dateOfBirthDay": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter a valid date", "partOf": null }, { "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1" }, { "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "31" }] } } }; 3559 3560 ACC.price = { 3561 productPriceNotAvailable: "Pricing currently unavailable", 3562 productPriceNotAvailableContactBranch: "Please <a href='/branch-finder'>contact a branch</a> to order" 3563 }; 3564 3565 </script>
3565 3566
3566<script type="text/javascript"> 3567 /*<![CDATA[*/ 3568 ACC.addons = {}; //JS holder for addons properties 3569 3570 3571 ACC.addons.sgb2baddon = []; 3572 3573 ACC.addons.applepaymentaddon = []; 3574 3575 ACC.addons.wcmscomponentsaddon = []; 3576 3577 ACC.addons.sgtrackingaddon = []; 3578 3579 ACC.addons.smarteditaddon = []; 3580 3581 ACC.addons.sgcaptchaaddon = []; 3582 3583 ACC.addons.b2ccheckoutaddon = []; 3584 3585 ACC.addons.b2ccheckoutaddon['key.2'] = 'value 2'; 3586 3587 ACC.addons.b2ccheckoutaddon['key.1'] = 'value 1'; 3588 3589 ACC.addons.featureflagaddon = []; 3590 3591 ACC.addons.balintegrationaddon = []; 3592 3593 /*]]>*/ 3594 </script>
3594 3595
3595<script type="text/javascript" 3596 src="/_ui/shared/js/generatedVariables.js?version=d20e8b0cbdd99fb18f5d11b26cfef4cc"></script>
3596 3597
3597<script type="text/javascript" 3598 src="/_ui/addons/smarteditaddon/shared/common/js/webApplicationInjector.js?version=d20e8b0cbdd99fb18f5d11b26cfef4cc" 3599 defer></script>
3599 3600
3600<script type="text/javascript" 3601 src="/_ui/addons/smarteditaddon/shared/common/js/reprocessPage.js?version=d20e8b0cbdd99fb18f5d11b26cfef4cc" 3602 defer></script>
3602 3603
3603<script type="text/javascript" 3604 src="/_ui/responsive/common/js/vendor/polyfill.bundle.min.js?version=d20e8b0cbdd99fb18f5d11b26cfef4cc" 3605 nomodule></script>
3605 3606
3606<script type="text/javascript" 3607 src="/_ui/responsive/common/js/vendor/vendor.bundle.min.js?version=d20e8b0cbdd99fb18f5d11b26cfef4cc"></script>
3607 3608
3608<script type="text/javascript" 3609 src="/_ui/responsive/common/js/bundle.min.js?version=d20e8b0cbdd99fb18f5d11b26cfef4cc" defer 3610 onLoad="eventQueue.process()"></script>
3610 3611
3611<script> 3612 (function (win, doc, style, timeout) { 3613 var STYLE_ID = 'at-body-style'; 3614 3615 // Only initiate the hiding and showing of the page if a timeout exists, if it's zero or NaN don't bother 3616 if (timeout) { 3617 function getParent() { 3618 return doc.getElementsByTagName('head')[0]; 3619 } 3620 3621 function addStyle(parent, id, def) { 3622 if (!parent) { 3623 return; 3624 } 3625 3626 var style = doc.createElement('style'); 3627 style.id = id; 3628 style.innerHTML = def; 3629 parent.appendChild(style); 3630 } 3631 3632 function removeStyle(parent, id) { 3633 if (!parent) { 3634 return; 3635 } 3636 3637 var style = doc.getElementById(id); 3638 3639 if (!style) { 3640 return; 3641 } 3642 3643 parent.removeChild(style); 3644 } 3645 3646 addStyle(getParent(), STYLE_ID, style); 3647 setTimeout(function () { 3648 removeStyle(getParent(), STYLE_ID); 3649 }, timeout); 3650 3651 ['at-content-rendering-succeeded', 'at-content-rendering-no-offers'].forEach(function (e) { 3652 document.addEventListener(e, function (event) { 3653 removeStyle(getParent(), STYLE_ID); 3654 }, false); 3655 }); 3656 } 3657 }(window, document, "body {opacity: 0 !important}", parseInt(3000))); 3658 </script>
3658 3659
3659<script type="text/javascript" 3660 src="//assets.adobedtm.com/f177fcea2274/0ec023f9574e/launch-d6138b71f4d6.min.js?version=d20e8b0cbdd99fb18f5d11b26cfef4cc" 3661 async></script>
3661 3662
3662<script src="https://cc.cdn.civiccomputing.com/9/cookieControl-9.4.min.js" 3663 integrity="sha384-ck5f8pThYoM1f8j4JwF+l6iQPh5lbgeaEdXUv5n8bxd8kZe9DyY3vHU4nlyef0UW" 3664 crossorigin="anonymous"></script>
3664 3665 3666
3666<script type="text/javascript"> 3667 window.digitalData = window.digitalData || {}; 3668 </script>
3668 3669 3670
3670<script type="text/javascript" id="digitalDataInit"> 3671 Object.assign(window.digitalData, { "global": { "site": "jewson", "currency": "GBP", "environment": "P1", "timestamp": "08/05/2026 09:31:40" }, "page": { "pageType": "ProductPage", "statusCode": "200", "breadcrumb": "Home>Doors & Joinery>Windows>uPVC Windows", "promoBanners": [{ "position": "Velux double rewards PDP", "creative": "PDP-double-rewardslr.png,PDP-double-rewardslr.png" }, { "position": "J - Velux OOS PDP banner", "creative": "Velux 998-13.svg,Velu OOS New-13.svg" }, { "position": "Max product availability warning", "creative": "restricted to 5 v3.svg" }] }, "customer": { "loginStatus": "anonymous" }, "product": [{ "productID": "CDPW0469", "productName": "Rill HONDATOTO : Pusat Globalisasi Bandar Toto Slot Resmi Dengan Ratusan Permainan Slot Gacor", "category": "Jewson Building Trade Supplies Online / Doors & Joinery / Windows / uPVC Windows", "price": "419.92", "priceExVAT": "349.93", "location": "PDP", "transactionType": "sale", "unitOfSale": "EA", "deliveryEligibility": "eligible", "collectionEligibility": "eligible", "collectionAvailability": "unknown", "deliveryAvailability": "unknown", "promotion": [{ "name": "newaccountdiscount" }, { "name": "£10 Off - Customer Service" }] }], "site": { "version": "normal" } }); 3672 </script>
3672 3673 3674
3674<script type="text/javascript"> 3675 var ACC = ACC || {}; 3676 ACC.ctaTrackingData = {}</script>
3676 3677
3677<script type="text/javascript"> 3678 document.addEventListener("DOMContentLoaded", function () { 3679 if (typeof (_satellite) !== 'undefined' && typeof (_satellite.pageBottom) !== 'undefined') { 3680 _satellite.pageBottom(); 3681 } 3682 }); 3683 </script>
3683 3684
3684<script type="text/javascript"> 3685 window.targetPageParams = function () { 3686 return { 3687 siteUID: "jewson", 3688 store: "Jewson Site", 3689 isLoggedIn: false, 3690 isB2BUser: false, 3691 isPriceBehindPostcodeEnabled: true, 3692 hasLocationSelected: false, 3693 } 3694 }; 3695 </script>
3695 3696
3696<script type="text/javascript" 3697 src="/_Incapsula_Resource?SWJIYLWA=719d34d31c8e3a6e6fffd425f7e032f3&ns=2&cb=1747694359" async></script>
vendor: 1 bytes, line 3697
3697
3698<script defer src="https://static.cloudflareinsights.com/beacon.min.js/v833ccba57c9e4d2798f2e76cebdd09a11778172276447" integrity="sha512-57MDmcccJXYtNnH+ZiBwzC4jb2rvgVCEokYN+L/nLlmO8rfYT/gIpW2A569iJ/3b+0UEasghjuZH/ma3wIs/EQ==" data-cf-beacon='{"version":"2024.11.0","token":"e02155ff57fb4c668a69b71cdbbac7ef","r":1,"server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}' crossorigin="anonymous"></script>
3698 3699<!-- ============================================================ 3700 AKHIR DOKUMEN 3701============================================================ --> 3702 3703<audio id="slot777-custom-win-audio" preload="auto" playsinline> 3704 <source src="data:audio/mpeg;base64,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" type="audio/mpeg"> 3705</audio>
3706<script id="slot777-generator-script"> 3707(function(){ 3708 const providers=["PRAGMATIC PLAY","PGSOFT","JOKER GAMING","SPADE GAMING","HABANERO","CQ9","JILI","DLL"]; 3709 const symbols=["7","ð","ð","ð","â","BAR"]; 3710 const machine=document.getElementById("slot777-machine"); 3711 const spinButton=document.getElementById("slot777-spin"); 3712 const reels=Array.from(document.querySelectorAll(".slot777-reel")); 3713 const providerText=document.getElementById("provider-text"); 3714 const message=document.getElementById("slot777-message"); 3715 const shock=document.getElementById("slot777-shock"); 3716 const customWinAudio=document.getElementById("slot777-custom-win-audio"); 3717 if(!machine||!spinButton||reels.length!==3) return; 3718 3719 let shockTimer=null; 3720 let audioCtx=null; 3721 let spinSoundTimer=null; 3722 3723 function randomItem(list){ 3724 return list[Math.floor(Math.random()*list.length)]; 3725 } 3726 3727 function setSymbol(reel,value){ 3728 const symbol=reel.querySelector(".slot777-symbol"); 3729 if(symbol) symbol.textContent=value; 3730 } 3731 3732 function flash(){ 3733 machine.classList.remove("flash"); 3734 void machine.offsetWidth; 3735 machine.classList.add("flash"); 3736 } 3737 3738 function getAudioContext(){ 3739 try{ 3740 const AudioCtx=window.AudioContext||window.webkitAudioContext; 3741 if(!AudioCtx) return null; 3742 if(!audioCtx) audioCtx=new AudioCtx(); 3743 if(audioCtx.state==="suspended") audioCtx.resume(); 3744 return audioCtx; 3745 }catch(e){ 3746 return null; 3747 } 3748 } 3749 3750 function playTone(frequency,duration,type,volume,delay){ 3751 const ctx=getAudioContext(); 3752 if(!ctx) return; 3753 3754 const start=ctx.currentTime+(delay||0); 3755 const oscillator=ctx.createOscillator(); 3756 const gain=ctx.createGain(); 3757 3758 oscillator.type=type||"square"; 3759 oscillator.frequency.setValueAtTime(frequency,start); 3760 3761 gain.gain.setValueAtTime(.0001,start); 3762 gain.gain.exponentialRampToValueAtTime(volume||.08,start+.008); 3763 gain.gain.exponentialRampToValueAtTime(.0001,start+duration); 3764 3765 oscillator.connect(gain); 3766 gain.connect(ctx.destination); 3767 oscillator.start(start); 3768 oscillator.stop(start+duration+.03); 3769 } 3770 3771 function playButtonSound(){ 3772 playTone(190,.07,"square",.07,0); 3773 playTone(310,.08,"square",.06,.055); 3774 } 3775 3776 function playSpinTick(){ 3777 playTone(135+Math.random()*95,.045,"square",.035,0); 3778 } 3779 3780 function startSpinSound(){ 3781 stopSpinSound(); 3782 stopCustomWinAudio(); 3783 playButtonSound(); 3784 spinSoundTimer=setInterval(playSpinTick,85); 3785 } 3786 3787 function stopSpinSound(){ 3788 if(spinSoundTimer){ 3789 clearInterval(spinSoundTimer); 3790 spinSoundTimer=null; 3791 } 3792 } 3793 3794 function playReelStopSound(index){ 3795 playTone(320+(index*95),.12,"triangle",.11,0); 3796 playTone(160+(index*35),.16,"sine",.06,.035); 3797 } 3798 3799 function playLoseSound(){ 3800 playTone(240,.14,"sine",.08,0); 3801 playTone(185,.20,"sine",.07,.13); 3802 } 3803 3804 function playShockSound(){ 3805 const ctx=getAudioContext(); 3806 if(!ctx) return; 3807 3808 const now=ctx.currentTime; 3809 const master=ctx.createGain(); 3810 master.gain.setValueAtTime(.0001,now); 3811 master.gain.exponentialRampToValueAtTime(.34,now+.015); 3812 master.gain.exponentialRampToValueAtTime(.0001,now+.95); 3813 master.connect(ctx.destination); 3814
3815 [72,115,180].forEach(function(freq,i){ 3816 const osc=ctx.createOscillator(); 3817 const gain=ctx.createGain(); 3818 3819 osc.type=i===0?"sawtooth":"square"; 3820 osc.frequency.setValueAtTime(freq*3,now); 3821 osc.frequency.exponentialRampToValueAtTime(freq,now+.78); 3822 gain.gain.setValueAtTime(.30/(i+1),now); 3823 3824 osc.connect(gain); 3825 gain.connect(master); 3826 osc.start(now); 3827 osc.stop(now+.82); 3828 }); 3829 3830 /* Sambaran petir pendek. */ 3831 [0,.12,.26].forEach(function(delay,index){ 3832 playTone(900-(index*180),.10,"sawtooth",.09,delay); 3833 playTone(110+(index*25),.18,"square",.07,delay); 3834 }); 3835 } 3836 3837 function unlockCustomWinAudio(){ 3838 if(!customWinAudio || customWinAudio.dataset.unlocked==="true") return; 3839 3840 try{ 3841 const oldMuted=customWinAudio.muted; 3842 customWinAudio.muted=true; 3843 customWinAudio.currentTime=0; 3844 3845 const unlockPromise=customWinAudio.play(); 3846 if(unlockPromise && typeof unlockPromise.then==="function"){ 3847 unlockPromise.then(function(){ 3848 customWinAudio.pause(); 3849 customWinAudio.currentTime=0; 3850 customWinAudio.muted=oldMuted; 3851 customWinAudio.dataset.unlocked="true"; 3852 }).catch(function(){ 3853 customWinAudio.muted=oldMuted; 3854 }); 3855 } 3856 }catch(e){} 3857 } 3858 3859 function playCustomWinAudio(){ 3860 if(!customWinAudio) return; 3861 3862 try{ 3863 customWinAudio.pause(); 3864 customWinAudio.currentTime=0; 3865 customWinAudio.volume=1; 3866 3867 const playPromise=customWinAudio.play(); 3868 if(playPromise && typeof playPromise.catch==="function"){ 3869 playPromise.catch(function(){ 3870 customWinAudio.load(); 3871 setTimeout(function(){ 3872 customWinAudio.play().catch(function(){}); 3873 },80); 3874 }); 3875 } 3876 }catch(e){} 3877 } 3878 3879 function stopCustomWinAudio(){ 3880 if(!customWinAudio) return; 3881 3882 try{ 3883 customWinAudio.pause(); 3884 customWinAudio.currentTime=0; 3885 }catch(e){} 3886 } 3887 3888 function hideShock(){ 3889 if(!shock) return; 3890 shock.classList.remove("show"); 3891 shock.setAttribute("aria-hidden","true"); 3892 machine.classList.remove("shock-active"); 3893 if(shockTimer){ 3894 clearTimeout(shockTimer); 3895 shockTimer=null; 3896 } 3897 } 3898 3899 function showShock(){ 3900 if(!shock) return; 3901 3902 hideShock(); 3903 void shock.offsetWidth; 3904 shock.setAttribute("aria-hidden","false"); 3905 shock.classList.add("show"); 3906 machine.classList.add("shock-active"); 3907 3908 playShockSound(); 3909 playCustomWinAudio(); 3910 3911 shockTimer=setTimeout(hideShock,2650); 3912 } 3913 3914 if(shock){ 3915 shock.addEventListener("click",hideShock); 3916 } 3917 3918 document.addEventListener("keydown",function(event){ 3919 if(event.key==="Escape") hideShock(); 3920 }); 3921 3922 spinButton.addEventListener("click",function(){ 3923 if(spinButton.disabled) return; 3924 3925 /* Audio browser aktif setelah interaksi langsung pengguna. */ 3926 getAudioContext(); 3927 unlockCustomWinAudio(); 3928 stopCustomWinAudio(); 3929 hideShock(); 3930 startSpinSound(); 3931 3932 3933 spinButton.disabled=true; 3934 spinButton.textContent="MEMUTAR..."; 3935 machine.classList.remove("is-win"); 3936 machine.classList.add("is-spinning"); 3937 message.textContent="MESIN SEDANG BERPUTAR ⢠PROVIDER:"; 3938 providerText.textContent=randomItem(providers); 3939 3940 const timers=reels.map(function(reel,index){ 3941 reel.classList.add("spinning"); 3942 return setInterval(function(){ 3943 setSymbol(reel,randomItem(symbols)); 3944 },70+index*12); 3945 }); 3946 3947 /* Peluang 35% menghasilkan tiga simbol sama. */ 3948 const forceMatch=Math.random()<0.35; 3949 const matchedSymbol=randomItem(symbols); 3950 const finalSymbols=forceMatch 3951 ? [matchedSymbol,matchedSymbol,matchedSymbol] 3952 : [randomItem(symbols),randomItem(symbols),randomItem(symbols)]; 3953
3954 reels.forEach(function(reel,index){ 3955 setTimeout(function(){ 3956 clearInterval(timers[index]); 3957 reel.classList.remove("spinning"); 3958 setSymbol(reel,finalSymbols[index]); 3959 playReelStopSound(index); 3960 flash(); 3961 3962 if(index===2){ 3963 stopSpinSound(); 3964 machine.classList.remove("is-spinning"); 3965 3966 const win=finalSymbols[0]===finalSymbols[1] && 3967 finalSymbols[1]===finalSymbols[2]; 3968 3969 if(win){ 3970 machine.classList.add("is-win"); 3971 message.textContent="DAYEMMM! SAYA AKAN LAWAN! ⢠PROVIDER:"; 3972 spinButton.textContent="â¡ SPIN LAGI"; 3973 setTimeout(showShock,180); 3974 }else{ 3975 message.textContent="BELUM KEMBAR ⢠COBA LAGI ⢠PROVIDER:"; 3976 spinButton.textContent="ð° SPIN LAGI"; 3977 playLoseSound(); 3978 } 3979 3980 spinButton.disabled=false; 3981 } 3982 },900+index*520); 3983 }); 3984 }); 3985 3986 window.addEventListener("beforeunload",function(){ 3987 stopSpinSound(); 3988 if(audioCtx && audioCtx.state!=="closed"){ 3989 audioCtx.close(); 3990 } 3991 }); 3992})(); 3993</script>
3993 3994 3995 3996</body> 3997 3998</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.