1 2 3 4<!DOCTYPE html> 5<html lang="fr" data-bs-theme="light"> 6<head> 7 <meta charset="utf-8"> 8 <title>Trouver un partenaire de golf</title> 9 10 11 <meta name="author" content="Des balles et des birdies"> 12 <meta name="viewport" content="width=device-width, initial-scale=1"> 13 14 <link rel="apple-touch-icon" sizes="57x57" href="/assets/favicon/apple-icon-57x57-bCeEQqy.png"> 15<link rel="apple-touch-icon" sizes="60x60" href="/assets/favicon/apple-icon-60x60-8P020Kg.png"> 16<link rel="apple-touch-icon" sizes="72x72" href="/assets/favicon/apple-icon-72x72-APojl41.png"> 17<link rel="apple-touch-icon" sizes="76x76" href="/assets/favicon/apple-icon-76x76-6sc9Aau.png"> 18<link rel="apple-touch-icon" sizes="120x120" href="/assets/favicon/apple-icon-120x120-merJAYB.png"> 19<link rel="apple-touch-icon" sizes="152x152" href="/assets/favicon/apple-icon-152x152-s7ubxgV.png"> 20<link rel="apple-touch-icon" sizes="180x180" href="/assets/favicon/apple-icon-180x180-qtj3f8s.png"> 21<link rel="apple-touch-icon" sizes="180x180" href="/assets/favicon/apple-icon-180x180-qtj3f8s.png"> 22<link rel="icon" type="image/png" sizes="48x48" href="/assets/favicon/android-icon-48x48-RXRKwbd.png"> 23<link rel="icon" type="image/png" sizes="192x192" href="/assets/favicon/android-icon-192x192-G2mgb0l.png"> 24<link rel="icon" type="image/png" sizes="32x32" href="/assets/favicon/favicon-32x32-KVJR-2M.png"> 25<link rel="icon" type="image/png" sizes="96x96" href="/assets/favicon/favicon-96x96-bNZK04O.png"> 26<link rel="icon" type="image/png" sizes="16x16" href="/assets/favicon/favicon-16x16-PIVszve.png"> 27<meta name="msapplication-TileColor" content="#ffffff"> 28<meta name="msapplication-TileImage" content="/ms-icon-144x144.png"> 29<meta name="theme-color" content="#ffffff"> <meta name="theme-color" content="#ffffff"> 30 31 <link rel="stylesheet" media="screen" href="/assets/styles_public/boxicons/css/boxicons.min-bB4YBOI.css"> 32 <link rel="stylesheet" media="screen" href="/assets/styles_public/swiper/swiper-bundle.min-4wtl_o-.css"> 33 <link rel="stylesheet" media="screen" 34 href="/assets/styles_public/lightgallery/css/lightgallery-bundle.min-XLQ9CDp.css"> 35 36 37 <!-- Google tag (gtag.js) -->
vendor: 68 bytes, lines 37-38
37 38 <script async src="https://www.googletagmanager.com/gtag/js?id=
38G-G5GMP4XKBW
vendor: 16 bytes, lines 38-39
38"></script> 39
39<script> 40
vendor: 152 bytes, lines 40-44
40window.dataLayer = window.dataLayer || []; 41 function gtag(){dataLayer.push(arguments);} 42 gtag('js', new Date()); 43 44 gtag('config', '
44G-G5GMP4XKBW
vendor: 8 bytes, lines 44-45
44'); 45
45</script>
45 46 47 48
48<script>window.addEventListener('beforeinstallprompt', (e) => { 49 e.preventDefault(); // empêche la bannière 50 }); 51 </script>
51 52 53<link rel="stylesheet" href="/assets/styles_public/theme.min-ajoxhgE.css"> 54<link rel="stylesheet" href="/assets/styles_public/custom-lZkp8Nl.css">
55<script type="importmap"> 56{ 57 "imports": { 58 "app_public": "/assets/app_public-zSwYIHJ.js", 59 "/assets/styles_public/theme.min.css": "data:application/javascript,", 60 "/assets/styles_public/custom.css": "data:application/javascript,", 61 "app": "/assets/app-W6n8PUP.js", 62 "/assets/styles/style.bundle.css": "data:application/javascript,document.head.appendChild%28Object.assign%28document.createElement%28%22link%22%29%2C%7Brel%3A%22stylesheet%22%2Chref%3A%22%2Fassets%2Fstyles%2Fstyle.bundle-qb0kpAG.css%22%7D%29%29", 63 "/assets/styles/plugins.bundle.css": "data:application/javascript,document.head.appendChild%28Object.assign%28document.createElement%28%22link%22%29%2C%7Brel%3A%22stylesheet%22%2Chref%3A%22%2Fassets%2Fstyles%2Fplugins.bundle-lX9Ccd1.css%22%7D%29%29", 64 "/assets/styles/app.css": "data:application/javascript,document.head.appendChild%28Object.assign%28document.createElement%28%22link%22%29%2C%7Brel%3A%22stylesheet%22%2Chref%3A%22%2Fassets%2Fstyles%2Fapp-xOO7Fmj.css%22%7D%29%29", 65 "/assets/styles/datagrid.css": "data:application/javascript,document.head.appendChild%28Object.assign%28document.createElement%28%22link%22%29%2C%7Brel%3A%22stylesheet%22%2Chref%3A%22%2Fassets%2Fstyles%2Fdatagrid-Tat1gCv.css%22%7D%29%29", 66 "@vue/runtime-dom": "/assets/vendor/@vue/runtime-dom/runtime-dom.index-9lN1oLS.js", 67 "@vue/runtime-core": "/assets/vendor/@vue/runtime-core/runtime-core.index-X-lYdVE.js", 68 "@vue/shared": "/assets/vendor/@vue/shared/shared.index-opSYUQr.js", 69 "@vue/reactivity": "/assets/vendor/@vue/reactivity/reactivity.index-kT9G5vb.js", 70 "vue-autosuggest": "/assets/vendor/vue-autosuggest/vue-autosuggest.index-_wMrD-J.js", 71 "vue": "/assets/vendor/vue/vue.index-3-wYR6W.js" 72 } 73} 74</script>
74<script async> 75if (!HTMLScriptElement.supports || !HTMLScriptElement.supports('importmap')) (function () { 76 const script = document.createElement('script'); 77 script.src = 'https://ga.jspm.io/npm:[email protected]/dist/es-module-shims.js'; 78 script.setAttribute('async', 'async'); 79 script.setAttribute('crossorigin', 'anonymous'); 80 script.setAttribute('integrity', 'sha384-ie1x72Xck445i0j4SlNJ5W5iGeL3Dpa0zD48MZopgWsjNB/lt60SuG1iduZGNnJn'); 81 document.head.appendChild(script); 82})(); 83</script>
83 84<link rel="modulepreload" href="/assets/app_public-zSwYIHJ.js">
85<script type="module">import 'app_public';</script>
85 <!-- Brevo Conversations {literal} --> 86
86<script> 87 (function(d, w, c) { 88 w.BrevoConversationsID = '6781350f1d7ce294d50a5f5c'; 89 w[c] = w[c] || function() { 90 (w[c].q = w[c].q || []).push(arguments); 91 }; 92 var s = d.createElement('script'); 93 s.async = true; 94 s.src = 'https://conversations-widget.brevo.com/brevo-conversations.js'; 95 if (d.head) d.head.appendChild(s); 96 })(document, window, 'BrevoConversations'); 97 </script>
97 98 <!-- /Brevo Conversations {/literal} --> 99 100 <link rel="stylesheet" href="https://unpkg.com/[email protected]/dist/leaflet.css" /> 101</head> 102<body> 103 104<main class="page-wrapper"> 105 <header class="header d-print-none navbar navbar-expand-lg fixed-top shadow-sm bg-white "> 106 <div class="container px-3"> 107 <a href="/" class="navbar-brand pe-3"> 108 <img src="/assets/images/logopicto-ha8QagH.svg" width="47" alt="Des Balles et des Birdies"> 109 <img src="/assets/images/DBDBligth-ZH6h-A6.svg" width="127" 110 alt="Des Balles et des Birdies"> 111 </a> 112 <div id="navbarNav" class="offcanvas offcanvas-end "> 113 <div class="offcanvas-header border-bottom "> 114 <h5 class="offcanvas-titl ">Menu</h5> 115 <button type="button" class="btn-close " data-bs-dismiss="offcanvas" 116 aria-label="Close"></button> 117 </div> 118 <div class="offcanvas-body"> 119 <ul class="navbar-nav me-auto mb-2 mb-lg-0"> 120 121 <li class="nav-item"> 122 <a href="/calculScoreE1" class="nav-link">Calcul du score</a> 123 </li> 124 <li class="nav-item"> 125 <a href="/recherchePartenaire" class="nav-link">Partenaire de golf</a> 126 </li> 127 128 <li class="nav-item dropdown"> 129 <a href="#" class="nav-link dropdown-toggle " data-bs-toggle="dropdown" aria-current="page">FAQ</a> 130 <div class="dropdown-menu p-0"> 131 <div class="d-lg-flex"> 132 133 <div class="mega-dropdown-column pt-lg-3 pb-lg-4" 134 style="--si-mega-dropdown-column-width: 15rem;"> 135 <ul class="list-unstyled mb-0"> 136 <li><a href="/faq/stableford" class="dropdown-item text-wrap"> Définition du 137 stableford </a></li> 138 <li><a href="/faq/choisir-couleur-depart" class="dropdown-item text-wrap"> 139 Quel départ choisir </a></li> 140 <li>
140<a href="/faq/le-slope" class="dropdown-item text-wrap"> Définition du 141 slope </a></li> 142 <li><a href="/faq/le-sss" class="dropdown-item text-wrap"> Définition 143 SSS </a></li> 144 <li><a href="/faq/comment-calculer-index-golf-whs" 145 class="dropdown-item text-wrap"> Comment calculer son index </a></li> 146 <li><a href="/faq/fairway-en-regulation" class="dropdown-item text-wrap"> 147 Farway en régulation </a></li> 148 <li><a href="/faq/green-en-regulation" class="dropdown-item text-wrap"> 149 Green en régulation </a></li> 150 <li><a href="/faq/competition" class="dropdown-item text-wrap"> Conseils 151 pour votre première compétition de classement au golf </a></li> 152 </ul> 153 </div> 154 <div class="mega-dropdown-column d-flex justify-content-center align-items-center rounded-3 rounded-end-0 px-0" 155 style="margin: -1px; background-color: #f3f6ff;"> 156 <img src="/assets/images/faq-rHmoisr.png" alt="Landings"> 157 </div> 158 </div> 159 </div> 160 </li> 161 <li class="nav-item"> 162 <a href="/page/premium" class="nav-link">Premium</a> 163 </li> 164 <li class="nav-item"> 165 <a href="/private/" class="nav-link">Mon espace</a> 166 </li> 167 </ul> 168 </div> 169 <div class="offcanvas-header border-top border-light"> 170 <div class="d-block w-100"> 171 <a href="/register" class="btn btn-outline-white mb-3 w-100 d-block" target="_blank" rel="noopener"> 172 <i class="bx bx-user fs-4 lh-1 me-1"></i> Créer un compte 173 </a> 174 175 <a href="/private/" class="btn btn-primary w-100" target="_blank" rel="noopener"> 176 <i class="bx bx-user fs-4 lh-1 me-1"></i> Se connecter 177 </a> 178 </div> 179 </div> 180 </div> 181 182 <button type="button" class="navbar-toggler" data-bs-toggle="offcanvas" data-bs-target="#navbarNav" 183 aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation"> 184 <span class="navbar-toggler-icon"></span> 185 </button> 186 187 188 <a href="/register" class="btn btn-outline-primary text-white border-white btn-sm fs-sm rounded d-none d-lg-inline-flex me-2" 189 target="_blank" rel="noopener"> 190 <i class="bx bx-user fs-5 lh-1 me-1"></i> Créer un compte 191 </a> 192 <a href="/private/" class="btn btn-primary btn-sm fs-sm rounded d-none d-lg-inline-flex" 193 target="_blank" rel="noopener"> 194 <i class="bx bx-user fs-5 lh-1 me-1"></i> Se connecter 195 </a> 196 197 198 </div> 199 </header> 200 201 202 <section class="position-relative pt-5"> 203 <div class="container position-relative zindex-2 pt-5"> 204 205 <nav class="pt-lg-4 pb-3 mb-2 mb-sm-3" aria-label="breadcrumb"> 206 <ol class="breadcrumb mb-0"> 207 <li class="breadcrumb-item"> 208 <a href="/"><i class="bx bx-home-alt fs-lg me-1"></i>Accueil</a> 209 </li> 210 <li class="breadcrumb-item active" aria-current="page">Calcul du score</li> 211 </ol> 212 </nav> 213 214 215 </div> 216 </section> 217 218 219 220 <section class="container"> 221 <div class="row"> 222 <div class="col-lg-7 col-md-12 position-relative"> 223 224 <h2 class="h3 pb-3">Rechercher un partenaire</h2> 225 226 227 <p class=" pb-3 text-muted">Vous cherchez un nouveau partenaire de golf ? Vous avez des 228 critères de niveau, d'âge, de disponibilités ? Cet espace est fait pour vous. 229 Vous pouvez contacter les golfeurs grâce à la messagerie interne. 230 <p> 231 232 233 <p class=" pb-3 "><a href="/private/offer/new" 234 class=" m-t-10 btn btn-outline-primary btn-sm ">Déposer une 235 annonce</a></p> 236 237 238 <div class="d-block d-lg-none"> 239 <p> 240 <select id="department" class="form-control"> 241 <option value="" disabled selected>Filtrer par departement</option> 242 <option value="">Tous les departements</option> 243 <option value="01">Ain</option> 244 <option value="02">Aisne</option> 245 <option value="03">Allier</option> 246 <option value="05">Hautes-Alpes</option> 247 <option value="04">Alpes-de-Haute-Provence</option> 248 <option value="06">Alpes-Maritimes</option> 249 <option value="07">Ardèche</option> 250 <option value="08">Ardennes</option> 251 <option value="09">Ariège</option> 252 <option value="10">Aube</option> 253 <option value="11">Aude</option> 254 <option value="12">Aveyron</option> 255 <option value="13">
255Bouches-du-Rhône</option> 256 <option value="14">Calvados</option> 257 <option value="15">Cantal</option> 258 <option value="16">Charente</option> 259 <option value="17">Charente-Maritime</option> 260 <option value="18">Cher</option> 261 <option value="19">Corrèze</option> 262 <option value="2a">Corse-du-sud</option> 263 <option value="2b">Haute-corse</option> 264 <option value="21">Côte-d'or</option> 265 <option value="22">Côtes-d'armor</option> 266 <option value="23">Creuse</option> 267 <option value="24">Dordogne</option> 268 <option value="25">Doubs</option> 269 <option value="26">Drôme</option> 270 <option value="27">Eure</option> 271 <option value="28">Eure-et-Loir</option> 272 <option value="29">Finistère</option> 273 <option value="30">Gard</option> 274 <option value="31">Haute-Garonne</option> 275 <option value="32">Gers</option> 276 <option value="33">Gironde</option> 277 <option value="34">Hérault</option> 278 <option value="35">Ile-et-Vilaine</option> 279 <option value="36">Indre</option> 280 <option value="37">Indre-et-Loire</option> 281 <option value="38">Isère</option> 282 <option value="39">Jura</option> 283 <option value="40">Landes</option> 284 <option value="41">Loir-et-Cher</option> 285 <option value="42">Loire</option> 286 <option value="43">Haute-Loire</option> 287 <option value="44">Loire-Atlantique</option> 288 <option value="45">Loiret</option> 289 <option value="46">Lot</option> 290 <option value="47">Lot-et-Garonne</option> 291 <option value="48">Lozère</option> 292 <option value="49">Maine-et-Loire</option> 293 <option value="50">Manche</option> 294 <option value="51">Marne</option> 295 <option value="52">Haute-Marne</option> 296 <option value="53">Mayenne</option> 297 <option value="54">Meurthe-et-Moselle</option> 298 <option value="55">Meuse</option> 299 <option value="56">Morbihan</option> 300 <option value="57">Moselle</option> 301 <option value="58">Nièvre</option> 302 <option value="59">Nord</option> 303 <option value="60">Oise</option> 304 <option value="61">Orne</option> 305 <option value="62">Pas-de-Calais</option> 306 <option value="63">Puy-de-Dôme</option> 307 <option value="64">Pyrénées-Atlantiques</option> 308 <option value="65">Hautes-Pyrénées</option> 309 <option value="66">Pyrénées-Orientales</option> 310 <option value="67">Bas-Rhin</option> 311 <option value="68">Haut-Rhin</option> 312 <option value="69">Rhône</option> 313 <option value="70">Haute-Saône</option> 314 <option value="71">Saône-et-Loire</option> 315 <option value="72">Sarthe</option> 316 <option value="73">Savoie</option> 317 <option value="74">Haute-Savoie</option> 318 <option value="75">Paris</option> 319 <option value="76">Seine-Maritime</option> 320 <option value="77">Seine-et-Marne</option> 321 <option value="78">Yvelines</option> 322 <option value="79">Deux-Sèvres</option> 323 <option value="80">Somme</option> 324 <option value="81">Tarn</option> 325 <option value="82">Tarn-et-Garonne</option> 326 <option value="83">Var</option> 327 <option value="84">Vaucluse</option> 328 <option value="85">Vendée</option> 329 <option value="86">Vienne</option> 330 <option value="87">Haute-Vienne</option> 331 <option value="88">Vosges</option> 332 <option value="89">Yonne</option> 333 <option value="90">Territoire de Belfort</option> 334 <option value="91">Essonne</option> 335 <option value="92">Hauts-de-Seine</option> 336 <option value="93">Seine-Saint-Denis</option> 337 <option value="94">Val-de-Marne</option> 338 <option value="95">Val-d'oise</option> 339 <option value="976">Mayotte</option> 340 <option value="971">Guadeloupe</option> 341 <option value="973">Guyane</option> 342 <option value="972">Martinique</option> 343 <option value="974">Réunion</option> 344 </select> 345 </p> 346 </div> 347 348 349 350 351 <div id="app-offers" v-cloak> 352 <div v-if="loading" style="z-index:1000; background-color:rgba(255,255,255,0.36)" 353 class="w-100 h-50 position-absolute d-flex justify-content-center align-items-center"> 354 <div id="span-loading"> 355 <div class="three-balls"> 356 <div class="ball ball1"></div> 357 <div class="ball ball2"></div> 358 <div class="ball ball3"></div> 359 </div> 360 </div> 361 </div> 362 <div class="row mb-5"> 363 <div class="col-12 text-center"> 364 <div class="d-block d-lg-none"> 365 <nav aria-label="Page navigation" v-if="pageCount > 1"> 366 <ul class="pagination justify-content-center"> 367 <li class="page-item" :class="{ disabled: currentPageNumber === 1 }"> 368 <a class="page-link" href="#" 369 @click.prevent="goToPageDepartment(currentPageNumber - 1)" 370 aria-label="Previous">
371 <span aria-hidden="true">«</span> 372 </a> 373 </li> 374 <li class="page-item" v-for="page in displayedPages" :key="page" 375 :class="{ active: page === currentPageNumber }"> 376 <a class="page-link" href="#" @click.prevent="goToPageDepartment(page)">${ 377 page }$</a> 378 </li> 379 <li class="page-item" :class="{ disabled: currentPageNumber === pageCount }"> 380 <a class="page-link" href="#" 381 @click.prevent="goToPageDepartment(currentPageNumber + 1)" 382 aria-label="Next"> 383 <span aria-hidden="true">»</span> 384 </a> 385 </li> 386 </ul> 387 388 </nav> 389 </div> 390 <div class="d-lg-block d-none"> 391 <nav aria-label="Page navigation" v-if="pageCount > 1"> 392 <ul class="pagination justify-content-center"> 393 <li class="page-item" :class="{ disabled: currentPageNumber === 1 }"> 394 <a class="page-link" href="#" 395 @click.prevent="goToPage(currentPageNumber - 1)" 396 aria-label="Previous"> 397 <span aria-hidden="true">«</span> 398 </a> 399 </li> 400 <li class="page-item" v-for="page in displayedPages" :key="page" 401 :class="{ active: page === currentPageNumber }"> 402 <a class="page-link" href="#" @click.prevent="goToPage(page)">${ page }$</a> 403 </li> 404 <li class="page-item" :class="{ disabled: currentPageNumber === pageCount }"> 405 <a class="page-link" href="#" 406 @click.prevent="goToPage(currentPageNumber + 1)" 407 aria-label="Next"> 408 <span aria-hidden="true">»</span> 409 </a> 410 </li> 411 </ul> 412 413 </nav> 414 </div> 415 </div> 416 </div> 417 418 <div class="row row-cols-1 row-cols-md-2 g-4"> 419 420 <div class="col" v-for="offer in offers"> 421 <div class="card"> 422 <div class="card-body"> 423 <div class="d-flex align-items-center mb-3"> 424 <img v-bind:src="offer.photo" class="rounded-circle" width="60"> 425 <div class="d-flex ms-2 justify-content-start flex-column"> 426 <h6 class="mb-0 "> ${ offer.username }$</h6> 427 <span class="text-gray-500 fw-semibold d-block fs-xs">${ offer.civilite }$, index ${offer.index}$</span> 428 </div> 429 </div> 430 431 <div class="qui mt-2"> ${offer.cherche}$ 432 </div> 433 <div class="quand mt-1">
434 <span class="fs-sm fw-bold">Quand : </span> 435 ${ offer.quand }$ 436 437 </div> 438 <div class="ou mt-1"> 439 <span class="fs-sm fw-bold">Où : </span> 440 ${offer.ou}$ 441 </div> 442 <div class="mt-3"> 443 <a v-bind:href="offer.contact" class="btn btn-sm btn-outline-primary mr-2"><i 444 class="czi-mail mr-2"></i>Contacter</a> 445 </div> 446 447 </div> 448 </div> 449 </div> 450 451 </div> 452 453 <div class="row mt-5"> 454 <div class="col-12 text-center"> 455 <nav aria-label="Page navigation" v-if="pageCount > 1"> 456 <ul class="pagination justify-content-center"> 457 <li class="page-item" :class="{ disabled: currentPageNumber === 1 }"> 458 <a class="page-link" href="#" @click.prevent="goToPage(currentPageNumber - 1)" 459 aria-label="Previous"> 460 <span aria-hidden="true">«</span> 461 </a> 462 </li> 463 <li class="page-item" v-for="page in displayedPages" :key="page" 464 :class="{ active: page === currentPageNumber }"> 465 <a class="page-link" href="#" @click.prevent="goToPage(page)">${ page }$</a> 466 </li> 467 <li class="page-item" :class="{ disabled: currentPageNumber === pageCount }"> 468 <a class="page-link" href="#" @click.prevent="goToPage(currentPageNumber + 1)" 469 aria-label="Next"> 470 <span aria-hidden="true">»</span> 471 </a> 472 </li> 473 </ul> 474 <div class="mt-2">Page ${ currentPageNumber }$ sur ${ pageCount }$</div> 475 476 </nav> 477 </div> 478 </div> 479 </div> 480 481 482 </div> 483 484 485 <div class="col-lg-5 d-none d-lg-flex bg-white "> 486 <div class="mapfix"> 487 <div id="map"> 488 ... 489 </div> 490 </div> 491 492 </div> 493 </div> 494 </section> 495 496 497 498 499</main> 500 501 502 503 504<!-- Back to top button --> 505<a href="#top" class="btn-scroll-top" data-scroll> 506 <span class="btn-scroll-top-tooltip text-muted fs-sm me-2">Top</span> 507 <i class="btn-scroll-top-icon bx bx-chevron-up"></i> 508</a> 509 510 511<!-- Vendor Scripts -->
512<script src="/assets/styles_public/parallax-js/dist/parallax.min-PE3jSyW.js"></script>
vendor: 1 bytes, line 512
512
513<script src="/assets/styles_public/rellax/rellax.min-eqTDWrL.js"></script>
vendor: 1 bytes, line 513
513
514<script src="/assets/styles_public/swiper/swiper-bundle.min-ZzHsDC_.js"></script>
vendor: 1 bytes, line 514
514
515<script src="/assets/styles_public/lightgallery/lightgallery.min-8_HbNBf.js"></script>
515 516
517<script src="/assets/js/theme_public.min-u2o-DDa.js"></script>
517 518 519 520
520<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
520 521
521<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/3.4.21/vue.global.min.js"></script>
521 522
522<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
522 523 524
524<script src="https://unpkg.com/[email protected]/dist/leaflet.js"></script>
524 525
525<script> 526 var markers = []; 527 528 529 function debounce(func, delay) { 530 let timeoutId; 531 return function (...args) { 532 const context = this; // Capture 'this' context 533 clearTimeout(timeoutId); 534 timeoutId = setTimeout(() => { 535 func.apply(context, args); // Use captured context 536 }, delay); 537 }; 538 } 539 540 const callAjax = async (slt, slg, nlt, nlg, page) => { 541 vm.loading=true; 542 543 544 545 var sendAjax = $.ajax({ 546 type: "POST", 547 url: "/gpscourse ", 548 data: 'SO_lt=' + slt + '&SO_lg=' + slg + '&NE_lt=' + nlt + '&NE_lg=' + nlg + '&page=' + page, 549 success: function (json) { 550 var retour = JSON.parse(json); 551 var courses = retour['courses']; 552 553 for (var i = 0; i < markers.length; i++) { 554 markers[i].remove(); 555 } 556 markers = []; 557 558 // On parcourt l'objet villes 559 for (course in courses) { 560 createMarker(course, courses); 561 } 562 563 vm.offers = retour['elements']; 564 vm.currentPageNumber = retour['currentPageNumber']; 565 vm.pageCount = retour['pageCount']; 566 vm.slt = slt; 567 vm.slg = slg; 568 vm.nlt = nlt; 569 vm.nlg = nlg; 570 571 }, 572 complete: function (json) { 573 vm.loading=false; 574 575 } 576 }); 577 578 }; 579 580 const callDepartmentAjax = async (department, page) => { 581 582 583 vm.loading=true; 584 585 var sendAjax = $.ajax({ 586 type: "POST", 587 url: "/gpscoursedepartment ", 588 data: 'department=' + department + '&page=' + page, 589 success: function (json) { 590 var retour = JSON.parse(json); 591 592 vm.offers = retour['elements']; 593 vm.currentPageNumber = retour['currentPageNumber']; 594 vm.pageCount = Math.round(retour['totalItem'] / 2); 595 vm.department = department; 596 597 }, 598 complete: function (json) { 599 vm.loading=false; 600 } 601 }); 602 } 603 604 605 function createMarker(ville, villes) { 606 var icon = L.icon({ 607 iconUrl: '/images/marker.svg', 608 iconSize: [26, 33], 609 iconAnchor: [13, 33] 610 }); 611 612 var marker = L.marker( 613 [parseFloat(villes[ville].lat), parseFloat(villes[ville].lon)], 614 { title: villes[ville].nomVille, icon: icon } 615 ).addTo(map); 616 617 markers.push(marker); 618 } 619 620 var app = Vue.createApp({ 621 data() { 622 return { 623 offers: [], 624 pageCount: 1, 625 currentPageNumber: 1, 626 slt: 0, 627 slg: 0, 628 nlt: 0, 629 nlg: 0, 630 department: "", 631 maxVisiblePages: 6, 632 markerIcon: "/bundles/app/images/marker.svg", // Chemin vers votre icône 633 loading:false 634 }; 635 }, 636 delimiters: ["${", "}$"], 637 computed: { 638 displayedPages() { 639 const pages = []; 640 const startPage = Math.max(1, this.currentPageNumber - Math.floor(this.maxVisiblePages / 2)); 641 const endPage = Math.min(this.pageCount, startPage + this.maxVisiblePages - 1); 642 643 for (let i = startPage; i <= endPage; i++) { 644 pages.push(i); 645 } 646 return pages; 647 } 648 }, 649 methods: { 650 goToPage(page) { 651 if (page >= 1 && page <= this.pageCount && page !== this.currentPageNumber) { 652 this.currentPageNumber = page; 653 this.fetchOffers(); // Appel à la fonction de récupération des offres 654 } 655 }, 656 goToPageDepartment(page) { 657 if (page >= 1 && page <= this.pageCount && page !== this.currentPageNumber) { 658 this.currentPageNumber = page; 659 this.fetchOffersDepartment(); // Appel à la fonction de récupération des offres 660 } 661 }, 662 fetchOffers() { 663 callAjax(this.slt, this.slg, this.nlt, this.nlg, this.currentPageNumber); 664 }, 665 fetchOffersDepartment() { 666 callDepartmentAjax(this.department, this.currentPageNumber); 667 } 668 }, 669 mounted() { 670 671 }, 672 watch: {} 673 }); 674
675 const vm = app.mount("#app-offers"); 676 677 678 var lat = 48.852969; 679 var lon = 2.349903; 680 $('#span-loading').hide(); 681 682 let map; 683 684 685 $('#department').change(function () { 686 if ($(this).val().length > 0) { 687 vm.department = $(this).val(); 688 } else { 689 vm.department = 0; 690 691 } 692 vm.fetchOffersDepartment(); 693 }); 694 695 696 function initMap() { 697 map = L.map('map').setView([lat, lon], 8); 698 699 L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { 700 attribution: '© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>' 701 }).addTo(map); 702 703 map.on('moveend zoomend', () => { 704 const bounds = map.getBounds(); 705 const sw = bounds.getSouthWest(); 706 const ne = bounds.getNorthEast(); 707 vm.slt = sw.lat; 708 vm.nlt = ne.lat; 709 vm.slg = sw.lng; 710 vm.nlg = ne.lng; 711 vm.department = ""; 712 vm.currentPageNumber = 1; 713 vm.fetchOffers(); 714 }); 715 } 716 717 initMap(); 718 719 </script>
719 720 721 722 723 724</body> 725</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.