// ==UserScript== // @name Se souvenir des champs remplis sur 12Train.com // @namespace http://tampermonkey.net/ // @version 2025-01-07 // @description Mémorise les dates, heures, gares et passagers, pour aller plus vite. // @author BohwaZ // @match https://www.12train.com/ // @icon https://www.google.com/s2/favicons?sz=64&domain=12train.com // @grant none // ==/UserScript== (function() { 'use strict'; var fields = [ // IDs only, no name in inputs, weird '#origin', '#destination', '#departure_date', '#departure_hour', '#return_date', '#return_hour', ]; window.addEventListener('load', () => { for (var i = 0; i < fields.length; i++) { var key = fields[i]; var v = localStorage.getItem('_form_' + key); var el = document.querySelector(key); if (v && el) { el.value = v; } } var passengers = document.querySelector('#journey_planner_form_query_passengers'); var passengers_saved = JSON.parse(localStorage.getItem('_form_passengers') ?? 'null'); if (passengers && passengers_saved) { if (passengers_saved.length > 1) { var src = passengers.querySelector('.j-p-form-passenger-control-box'); for (var j = 1; j < passengers_saved.length; j++) { passengers.appendChild(src.cloneNode(true)); } } var k = 0; passengers.querySelectorAll('.j-p-form-passenger-control-box').forEach (row => { var p = passengers_saved[k++]; row.querySelector('.j-p-form-passenger-age').value = p.age; var type = row.querySelector('.rail-search-passenger-type'); for (var dkey in p.type_dataset) { type.dataset[dkey] = p.type_dataset[dkey]; } type.innerHTML = p.type_value; row.querySelector('.j-p-form-passenger-card-control').innerHTML = p.cards; row.querySelectorAll('.j-p-form-passenger-card-control:has(.j-p-f-delete-card)').forEach(c => { var btn = c.querySelector('.j-p-f-delete-card'); btn.onclick = () => c.remove(); }); if (k > 1) { var btn = row.querySelector('.rail-search-passenger-delete'); row.onmousedown = (e) => { if (e.target.contains(btn)) { return; } alert('Ce passager ne peut être modifié (<== script greasemonkey).'); e.preventDefault(); return false; }; btn.onclick = (e) => row.remove(); } }); } }); window.addEventListener('beforeunload', () => { for (var i = 0; i < fields.length; i++) { var key = fields[i]; var el = document.querySelector(key); if (el) { localStorage.setItem('_form_' + key, el.value); } } var passengers = null; document.querySelectorAll('.j-p-form-passenger-control-box').forEach(e => { var type = e.querySelector('.rail-search-passenger-type'); passengers = passengers ?? []; var p = { 'type_dataset': Object.assign({}, type.dataset), 'type_value': type.innerHTML, 'age': e.querySelector('.j-p-form-passenger-age').value, 'cards': e.querySelector('.j-p-form-passenger-card-control').innerHTML }; //console.log(p); passengers.push(p); }); if (null !== passengers) { localStorage.setItem('_form_passengers', JSON.stringify(passengers)); } }); })();