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.

Revisions

  1. bohwaz created this gist Jan 7, 2025.
    110 changes: 110 additions & 0 deletions 12train.userscript.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,110 @@
    // ==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));
    }
    });
    })();