Bonjour,
Pour une application dans un site web, j’ai besoin de récupérer le Token qui se trouve être en document.location.hash
sous le format d’une querystring
.
C’est le passage clé de mon site si je m’y prends mal, l’application ne fonctionnera pas. Je voulais savoir si vous remarquiez un potentiel oubli dans mon parsing ou un format que je ne supporte pas.
Pour test : https://jsfiddle.net/v2w18tao/79/
function querystringParser(hash, opt) {
var set = function (defVal, optVal) {
return (typeof optVal === "undefined") ? defVal : optVal;
};
var options = {
starter: set("?", opt && opt.starter),
sep: set("&", opt && opt.sep),
eq: set("=", opt && opt.eq)
};
var obj = {},
enableStarter = (typeof options.starter === "string");
for (var i = 0, varName = null, val = null, char, key; i <= hash.length; i++) {
char = hash[i];
if (i === 0 && char === options.starter && enableStarter) { // Enlève le "#"
continue;
} else if (val === null && char === options.eq) { // On passe à la suite si "="
val = "";
} else if (val === null) {
varName = ((varName === null) ? "" : varName) + char;
} else if (varName !== null && char !== options.sep && i !== hash.length) {
val = val + char;
} else {
if (varName !== "") {
key = decodeURIComponent(varName);
switch (typeof obj[key]) {
case "undefined":
obj[key] = decodeURIComponent(val);
break;
case "string":
obj[key] = [decodeURIComponent(val)];
default:
obj[key].push(decodeURIComponent(val));
}
}
varName = null;
val = null;
}
}
return obj;
}
var querystring = "#token=a567082ca54abf223a77da38&scope=user%3Aread+channel%3Amoderate&token_type=auth2&token_type=auth";
document.getElementById("json").textContent = JSON.stringify(querystringParser(querystring, {starter:"#"}), null, 4);
Pour le côté apprentissage, je souhaiterais mettre ma fonction sur github (sous forme de bibliothèque par exemple) et faire automatiquement des tests quand je PR (comme le zds) via : https://qunitjs.com/ est-ce possible ? Dois-je changer de lib ? Faut-il des connaissances avancées ?
J’ai aussi pensé à faire un script node pour tester le résultat.
Bon vol,
A.
EDIT : Rajout des tags.