NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name La Banque Postale - No Virtual Keyboard
// @license MIT
// @namespace org.bouil
// @author bouil
// @collaborator foudfou
// @copyright 2013-2023, https://github.com/bouil/userscripts
// @description Remove virtual keyboard and add a classic input text field for the password on La Banque Postale website https://www.labanquepostale.fr/
// @match https://voscomptesenligne.labanquepostale.fr/wsost/OstBrokerWeb/loginform?TAM_OP=login&ERROR_CODE=0x00000000&URL=%2Fvoscomptes%2FcanalXHTML%2Fidentif.ea%3Forigin%3Dparticuliers
// @version 0.6.0
// @updateURL https://openuserjs.org/install/bouil/La_Banque_Postale_-_No_Virtual_Keyboard.user.js
// @oujs:author bouil
// @oujs:collaborator foudfou
// ==/UserScript==
//#include "parts/LaBanquePostaleHeader.js"
var debug = false;
function metaData(str) {
if ("undefined" !== typeof (GM_info)) {
return GM_info.script[str];
} else if ("undefined" !== typeof (GM_getMetadata)) {
return GM_getMetadata(str);
} else {
console.log("GM_ API unsupported");
return "unknown";
}
}
/**
* replaces the img/map grid with a simple password input. The login input
* remains unchanged.
*/
function customizeUI(gridButtons) {
JQ.$('main *').removeClass('tb-volet-hidden');
JQ.$('#btnContinuer').addClass('tb-volet-hidden');
// display the password input and allow to type in it
const passwordInput = document.getElementById("password");
// passwordInput.removeAttribute("hidden");
// passwordInput.setAttribute("type", "password");
// passwordInput.setAttribute("style", "display: inline-block");
// remove the span that display the dots
if (!debug) {
passwordInput.nextSibling.remove();
document.getElementsByClassName("puces")[0].setAttribute("style", "display: none");
}
// add a new passwordInput
const newPasswordInput = document.createElement("input");
passwordInput.parentElement.appendChild(newPasswordInput);
newPasswordInput.setAttribute("style", "display: inline-block; background-color: lightgreen;");
newPasswordInput.setAttribute("type", "password");
// remove the grid
if (!debug) {
document.getElementById("label-password").nextElementSibling.nextElementSibling.nextElementSibling.setAttribute("style", "display: none");
}
// replace the submit password
const btnConnexionParent = document.getElementById("btnConfirmer").parentElement;
document.getElementById("btnConfirmer").setAttribute("style", "display: none");
const newButton = document.createElement("button");
newButton.setAttribute("class", "tb-btn-p w100");
newButton.setAttribute("type", "submit");
newButton.setAttribute("data-lien-user", "actif");
newButton.innerText = "Se connecter (!)";
btnConnexionParent.appendChild(newButton)
if (debug) {
console.log(passwordInput);
}
// attach the submit handler, that translates the password to a positional string, and replace the dedicated password field with it.
function createSubmitHandler(form, gridButtons, newPasswordInput) {
return function (event) {
// map the input to the scrabbled value
let newPasswordValue = "";
for (let i = 0; i < newPasswordInput.value.length; i++) {
let gridElement = gridButtons[newPasswordInput.value[i]];
newPasswordValue += gridElement.getAttribute("data-tb-index");
}
if (debug) {
console.log(newPasswordValue);
}
passwordInput.value = newPasswordValue;
submitFormulaire();
}
}
const form = document.forms['formAccesCompte'];
const submitHandler = createSubmitHandler(form, gridButtons, newPasswordInput);
form.addEventListener('submit', submitHandler, false);
}
function main() {
var allButtons = document.getElementsByTagName("button");
var gridButtons = {};
for (let button of allButtons) {
if (button.hasAttribute("data-tb-index")) {
let buttonRealValue = button.getAttribute("data-tb-index");
gridButtons[button.innerText] = button;
}
}
if (debug) {
console.log("Grid is");
console.log(gridButtons);
}
customizeUI(gridButtons);
}
main();