Skip to content

Instantly share code, notes, and snippets.

@bohwaz
Created January 7, 2025 14:37
Show Gist options
  • Save bohwaz/06e7e98461d38bca5625f2e9f2ef6f79 to your computer and use it in GitHub Desktop.
Save bohwaz/06e7e98461d38bca5625f2e9f2ef6f79 to your computer and use it in GitHub Desktop.
Userscript pour 12Train.com, pour mémoriser les infos
// ==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));
}
});
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment