1 2 3 4 5 6 <!DOCTYPE html> 7 <html lang="ca" class="html"> 8 <head> 9 <meta charset="utf-8"/> 10 <title> 11 Catalonia Logistics | 12 </title> 13 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 14 <meta content="width=device-width, initial-scale=1" name="viewport"/> 15 <meta content="Timtul" name="author"/> 16 17 18 <meta name="robots" content="noindex, nofollow, noarchive, nosnippet"> 19 <meta name="googlebot" content="noindex, nofollow, noarchive, nosnippet"> 20 21
21<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
21 22
22<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery-migrate/3.4.1/jquery-migrate.min.js" integrity="sha512-KgffulL3mxrOsDicgQWA11O6q6oKeWcV00VxgfJw4TcM8XRQT8Df9EsrYxDf7tpVpfl3qcYD96BpyPvA4d1FDQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
22 23 24 <link href="//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css" rel="stylesheet" type="text/css"/> 25 <link href="//cdnjs.cloudflare.com/ajax/libs/fotorama/4.6.4/fotorama.css" rel="stylesheet">
vendor: 119 bytes, lines 25-28
25 26 <script src="https://www.google.com/recaptcha/api.js?onload=tt_recaptcha&render=explicit" async defer></script> 27 28
28<link rel="stylesheet" href="/static/CACHE/css/c4e0c354ad38.css" type="text/css" /> 29 <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.11.2/css/bootstrap-select.min.css"> 30
30<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.4/js/bootstrap.min.js"></script>
30 31
31<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.11.2/js/bootstrap-select.min.js"></script>
31 32 <link rel="shortcut icon" href="/favicon.ico"/> 33
33<script type="text/javascript" src="/static/admin/js/i18n-periodpicker.js"></script>
33 34 35 36 <!-- Google tag (gtag.js) -->
vendor: 65 bytes, lines 36-37
36 37<script async src="https://www.googletagmanager.com/gtag/js?id=
37G-WDVGHP0LKF
vendor: 13 bytes, line 37
37"></script>
38<script> 39
vendor: 138 bytes, lines 39-43
39window.dataLayer = window.dataLayer || []; 40 function gtag(){dataLayer.push(arguments);} 41 gtag('js', new Date()); 42 43 gtag('config', '
43G-WDVGHP0LKF
vendor: 5 bytes, line 43
43');
44</script>
44 45 46 47 </head> 48 49 <body style="margin-bottom:0px;padding-top:0px;" class="modal-base-body"> 50 <div class="login-container"> 51 52 53
54<script type="text/javascript"> 55 56 57var tt_recaptcha = function() { 58 $( ".g-recaptcha-modal" ).each(function( index ) { 59 var key = $(this).attr("data-sitekey"); 60 var lang = "ca" 61 if( lang == "pr") { 62 lang = "pt"; 63 } 64 recaptcha = grecaptcha.render(this, { 65 'sitekey' : key, 66 'hl': lang 67 }); 68 }); 69}; 70 71 72$( document ).ready(function() { 73 74 75 76 77 78 79 80 81 var $dateInputs = $('#signup_form').find('.date-field'); 82 var dt_format = 'D/MM/YYYY'; 83 84 var $datetimeInputs = $('#signup_form').find('.datetime-field'); 85 var dtime_format = 'D/MM/YYYY HH:mm'; 86 var lang = $('html').attr('lang'); 87 88 $.each($dateInputs, function(i, e){ 89 var mindate = $(this).attr('min') != "" ? $(this).attr('min') : null; 90 var maxdate = $(this).attr('max') != "" ? $(this).attr('max') : null; 91 92 $(e).periodpicker({ 93 minDate: mindate, 94 maxDate: maxdate, 95 norange: true, 96 cells: [1, 1], 97 withoutBottomPanel: true, 98 yearsLine: true, 99 yearsPeriod: [1900, 2100], 100 title: false,
101 resizeButton: false, 102 fullsizeButton: false, 103 closeButton: false, 104 hideAfterSelect: true, 105 dayOfWeekStart: 1, 106 formatDate: dt_format, 107 i18n: i18langs, 108 lang:lang, 109 }) 110 }) 111 112 $.each($datetimeInputs, function(i, e){ 113 114 $(e).periodpicker({ 115 norange: true, 116 cells: [1, 1], 117 lang: lang, 118 title: false, 119 resizeButton: false, 120 fullsizeButton: false, 121 closeButton: false, 122 fullsizeOnDblClick: false, 123 timepicker: true, 124 yearsPeriod: [1900, 2040], 125 i18n: i18langs, 126 clearButtonInButton: true, 127 formatDateTime: dtime_format, 128 timepickerOptions: { 129 hours: true, 130 minutes: true, 131 seconds: false, 132 ampm: true 133 }, 134 onAfterHide: function(){} 135 }) 136 }) 137 138 $('.tt-selectpicker').selectpicker({ 139 liveSearch: true, 140 liveSearchNormalize: true, 141 size: 'auto', 142 selectedTextFormat: 'count > 3', 143 noneSelectedText: 'Escull una opció', 144 noneResultsText: 'No hi ha resultats', 145 countSelectedText: '{0} Seleccionat(s)', 146 width: 'auto' 147 }); 148 149 150 function validateDNIi18n(dni) { 151 var numero, letr, letra; 152 var expresion_regular_dni = /^[XYZ]?\d{5,8}[A-Z]$/; 153 154 dni = dni.toUpperCase(); 155 156 if(expresion_regular_dni.test(dni) === true){ 157 numero = dni.substr(0,dni.length-1); 158 numero = numero.replace('X', 0); 159 numero = numero.replace('Y', 1); 160 numero = numero.replace('Z', 2); 161 letr = dni.substr(dni.length-1, 1); 162 numero = numero % 23; 163 letra = 'TRWAGMYFPDXBNJZSQVHLCKET'; 164 letra = letra.substring(numero, numero+1); 165 if (letra != letr) { 166 return false; 167 }else{ 168 return true; 169 } 170 }else{ 171 return false; 172 } 173 } 174 175 $("#id_custom_DNI").blur(function() { 176 var dni = $("#id_custom_DNI").val(); 177 if(!validateDNIi18n(dni)) { 178 $("#signup-btn").attr("disabled", true); 179 $("#error-text").html("El DNI no es correcte. Si us plau, introdueix un DNI và lid."); 180 } else { 181 $("#error-text").html(""); 182 $("#signup-btn").attr("disabled", false); 183 } 184 }); 185 186 187 188 189}); 190</script>
190 191 192 193<!-- 194 <div> 195 <ul> 196 197 <li><a href="/accounts/login/">Sign In</a></li> 198 <li><a href="/accounts/signup/">Sign Up</a></li> 199 200 </ul> 201 </div> 202 --> 203 204<h3>Registrar-se</h3> 205 206<p>Ja tens un compte? <a href="/accounts/login/">Inicia sessió</a>.</p> 207 208<form class="signup" id="signup_form" method="post" enctype="multipart/form-data" action="/accounts/signup/"> 209 <input type='hidden' name='csrfmiddlewaretoken' value='iT5sVGCvwh72y2GXTxalgqMhKHZ2xtbDULBMLTs4tb3sL0xhD0lQs9cWSakm5M12' /> 210 <p><label for="id_first_name">Nom:</label> <input autofocus="autofocus" id="id_first_name" name="first_name" placeholder="Nom" type="text" required /></p> 211<p><label for="id_last_name">Cognoms:</label> <input autofocus="autofocus" id="id_last_name" name="last_name" placeholder="Cognoms" type="text" /></p> 212<p><label for="id_email">Email:</label> <input id="id_email" name="email" placeholder="Adreça electrònica" type="email" required /></p> 213<p><label for="id_password1">Contrasenya:</label> <input id="id_password1" name="password1" placeholder="Contrasenya" type="password" required /></p> 214<p><label for="id_password2">Contrasenya (de nou):</label> <input id="id_password2" name="password2" placeholder="Contrasenya (de nou)" type="password" required /><input id="id_timestamp" name="timestamp" type="hidden" value="1791104986.84" /><input id="id_confirmation_key" maxlength="40" name="confirmation_key" type="hidden" /><input id="id_g-recaptcha-response" maxlength="4096" name="g-recaptcha-response" type="hidden" /></p> 215 216 217 <h4 style="padding-top: 25px;border-top: 1px solid #d2d2d2;" class="form-title">Informació addicional</h4> 218 219 220 221 222 223 224 225 <div class="form-group custom-field"> 226 <label class="control-label">Nombre del proyecto</label> 227 <div class="input-group field-type-string"> 228 <input class="form-control" id="id_custom_NOM-DEL-PROJECTE" maxlength="" minlength="" name="custom_NOM-DEL-PROJECTE" placeholder="Nombre del proyecto del que quieres información" type="string" /> 229 230 <span class="input-group-addon" 231 232 title="Aquesta informació serà pública"> 233 <span class="fa fa-globe"></span> 234 235 </span> 236 237 </div> 238 </div> 239 240 241 242 243 244 245 246 <div class="form-group custom-field"> 247 <label class="control-label">Cargo en la empresa</label> 248 <div class="input-group field-type-string"> 249 <input class="form-control" id="id_custom_CRREC" maxlength="" minlength="" name="custom_CRREC" placeholder="" type="string" /> 250 251 <span class="input-group-addon" 252 253 title="Aquesta informació serà pública"> 254 <span class="fa fa-globe"></span> 255 256 </span> 257 258 </div> 259 </div> 260 261 262 263 264 265 266 267 <div class="form-group custom-field"> 268 <label class="control-label">EMPRESA</label> 269 <div class="input-group field-type-string"> 270 <input class="form-control" id="id_custom_EMPRESA" maxlength="" minlength="" name="custom_EMPRESA" placeholder="" type="string" /> 271 272 <span class="input-group-addon" 273 274 title="Aquesta informació serà privada i ningú la veurà "> 275 <span class="fa fa-lock"></span> 276 277 </span> 278 279 </div> 280 </div> 281 282 283 284 285 286 287 288 <div class="form-group custom-field"> 289 <label class="control-label">Seguidor twitter @ccatlogist</label> 290 <div class="input-group field-type-boolean"> 291 <input class="" data-required="0" id="id_custom_SEGUIDOR-TWITTER" name="custom_SEGUIDOR-TWITTER" type="checkbox" /> 292 293 </div> 294 </div> 295 296 297 298 299 300 <p id="id_terms_p"> 301 <label for="id_terms"> 302 303 304He llegit i ACCEPTO el tractament de les meves dades personals d'acord amb la <a href="/politica-de-privacidad/" target="_blank">polÃtica de privacitat.</a> 305 </label> 306 <input id="id_terms" name="terms" type="checkbox" required=""> 307 </p> 308 <p> 309 <div class="g-recaptcha-modal" data-sitekey="6LewnxoUAAAAAOG8yF9cFzVe0kKH9YLvDq75SdwU" 310 style="align-items: center;text-align: center;margin: auto;width: 305px;"></div> 311 </p> 312 313 314 <span id="error-text" style="color:red;display:block;"> 315 316 </span> 317 <button type="button" class="btn btn-danger" data-dismiss="modal" aria-hidden="true">Cancel·lar</button> 318 <button type="submit" id="signup-btn">Registrar-se »</button> 319 320 321</form> 322 323 324 325 326 327 328 329 330 331 </div> 332 </body> 333</html> 334 335
336<script type="text/javascript"> 337 338 try { 339 $(".page-noticies .widget-article-list .content") 340 .addClass("template-big-list-a") 341 .removeClass("template-big-list-b"); 342 343$(document).ready(function () { 344 var scrollTop = 0; 345 $(window).scroll(function () { 346 scrollTop = $(window).scrollTop(); 347 if (scrollTop >= 1) { 348 $(".region-header").addClass("scrolled-nav"); 349 } else if (scrollTop < 1) { 350 $(".region-header").removeClass("scrolled-nav"); 351 } 352 }); 353}); 354 355$(".navbar-default .navbar-nav > li").mouseenter(function () { 356 if ($(this).find("a").hasClass("dropdown-toggle")) { 357 $(this).addClass("open"); 358 } 359 360 $(this).mouseleave(function () { 361 $(".navbar-default .navbar-nav > li").removeClass("open"); 362 }); 363}); 364 365function removeEmptyMoreInfo() { 366 const moreInfos = document.querySelectorAll(".more-info"); 367 368 moreInfos.forEach((el) => { 369 if (el.children.length > 0) return; 370 const text = (el.textContent || "").replace(/\u00A0/g, " ").trim(); 371 if (text.length > 0) return; 372 el.remove(); 373 }); 374} 375removeEmptyMoreInfo(); 376 377function shareApiBtn(btnSel = "share-btn", statusSel = ".share-response") { 378 const btn = document.querySelector(btnSel); 379 const statusContainer = document.querySelector(statusSel); 380 381 if (!btn) return; 382 383 const show = (msg, cls = "") => { 384 if (!statusContainer) return; 385 statusContainer.textContent = msg; 386 statusContainer.className = `hint ${cls}`.trim(); 387 }; 388 389 btn.addEventListener("click", async () => { 390 const title = btn.dataset.title || document.title || "Comparto este enlace"; 391 const rawUrl = window.location.href; 392 const url = new URL(rawUrl, window.location.origin).href; 393 const baseTxt = btn.dataset.text || ""; 394 395 const text = baseTxt ? `${baseTxt} ` : url; 396 397 const shareData = { title, text, url }; 398 399 if (!navigator.share) { 400 await copyUrlFallback(url, show); 401 return; 402 } 403 404 try { 405 await navigator.share(shareData); 406 } catch (err) { 407 if (err && err.name !== "AbortError") { 408 show("No se pudo compartir. Copiando al portapapeles...", "err"); 409 await copyUrlFallback(url, show); 410 } 411 } 412 }); 413 414 async function copyUrlFallback(url, showFn) { 415 try { 416 if (navigator.clipboard?.writeText) { 417 await navigator.clipboard.writeText(url); 418 showFn("URL copiada al portapapeles â ", "ok"); 419 return; 420 } 421 } catch (_) {} 422 423 const ta = document.createElement("textarea"); 424 ta.value = url; 425 ta.setAttribute("readonly", ""); 426 ta.style.position = "fixed"; 427 ta.style.left = "-9999px"; 428 document.body.appendChild(ta); 429 ta.select(); 430 try { 431 document.execCommand("copy"); 432 showFn("URL copiada al portapapeles â ", "ok"); 433 } catch { 434 showFn("Copia fallida. Puedes copiar este enlace: " + url, "err"); 435 } finally { 436 document.body.removeChild(ta); 437 } 438 } 439} 440 441function initShareNewsButtons(selector = ".share-news") { 442 const buttons = document.querySelectorAll(selector); 443 444 buttons.forEach((button) => { 445 // Evita registrar el evento más de una vez. 446 if (button.dataset.shareInitialized === "true") { 447 return; 448 } 449 450 button.dataset.shareInitialized = "true"; 451 452 button.addEventListener("click", async () => { 453 const title = 454 button.dataset.title?.trim() || 455 document.title || 456 "Comparto este enlace"; 457 458 const text = button.dataset.text?.trim() || "Comparto esta noticia:"; 459 460 const url = resolveShareUrl(button.dataset.url); 461 462 const shareData = { 463 title, 464 text, 465 url, 466 }; 467 468 if (typeof navigator.share !== "function") { 469 await copyUrlFallback(url, button); 470 return; 471 } 472 473 try { 474 await navigator.share(shareData); 475 } catch (error) { 476 // No mostramos ningún error cuando el usuario cierra 477 // voluntariamente el diálogo de compartir. 478 if (error?.name === "AbortError") { 479 return; 480 } 481 482 showShareStatus( 483 button, 484 "No se pudo compartir. Copiando al portapapeles...", 485 "err", 486 ); 487 488 await copyUrlFallback(url, button); 489 } 490 });
491 }); 492} 493 494function resolveShareUrl(rawUrl) { 495 const url = rawUrl?.trim() || window.location.href; 496 497 try { 498 return new URL(url, window.location.origin).href; 499 } catch { 500 return window.location.href; 501 } 502} 503 504async function copyUrlFallback(url, button) { 505 try { 506 if (navigator.clipboard?.writeText) { 507 await navigator.clipboard.writeText(url); 508 509 showShareStatus(button, "URL copiada al portapapeles", "ok"); 510 511 return; 512 } 513 } catch { 514 515 } 516 517 const textarea = document.createElement("textarea"); 518 519 textarea.value = url; 520 textarea.setAttribute("readonly", ""); 521 textarea.setAttribute("aria-hidden", "true"); 522 523 Object.assign(textarea.style, { 524 position: "fixed", 525 left: "-9999px", 526 top: "0", 527 }); 528 529 document.body.appendChild(textarea); 530 531 textarea.select(); 532 textarea.setSelectionRange(0, textarea.value.length); 533 534 try { 535 const copied = document.execCommand("copy"); 536 537 if (!copied) { 538 throw new Error("El navegador no pudo copiar el enlace"); 539 } 540 541 showShareStatus(button, "URL copiada al portapapeles", "ok"); 542 } catch { 543 showShareStatus(button, `No se pudo copiar el enlace: ${url}`, "err"); 544 } finally { 545 textarea.remove(); 546 } 547} 548 549function showShareStatus(button, message, className = "") { 550 let status = button.nextElementSibling; 551 552 if (!status?.classList.contains("share-response")) { 553 status = document.createElement("p"); 554 555 status.className = "hint share-response"; 556 status.setAttribute("aria-live", "polite"); 557 status.setAttribute("role", "status"); 558 559 button.insertAdjacentElement("afterend", status); 560 } 561 562 status.textContent = message; 563 status.className = `hint share-response ${className}`.trim(); 564} 565 566const hasEventClass = [...document.body.classList] 567 .some(className => className.includes('event-')); 568 const hasEntryClass = [...document.body.classList] 569 .some(className => className.includes('entry-')); 570 571if (hasEntryClass || hasEventClass) { 572 shareApiBtn(); 573} 574 575initShareNewsButtons(); 576initShareNewsButtons(".share-event"); 577 } 578 catch(err) { 579 console.log("[ERROR Custom JS]", err.message); 580 } 581</script>
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.