2023-03-09 22:32:28 +01:00
|
|
|
package xrfragment;
|
|
|
|
|
|
2023-03-31 12:58:53 +02:00
|
|
|
import xrfragment.Parser;
|
|
|
|
|
|
2023-03-30 19:51:32 +02:00
|
|
|
@:expose // <- makes the class reachable from plain JavaScript
|
|
|
|
|
@:keep // <- avoids accidental removal by dead code elimination
|
2023-03-09 22:32:28 +01:00
|
|
|
|
2023-03-10 18:49:16 +01:00
|
|
|
class Url {
|
2023-03-09 22:32:28 +01:00
|
|
|
|
2023-03-30 19:51:32 +02:00
|
|
|
public static var error:String = "";
|
2023-03-10 18:49:16 +01:00
|
|
|
|
2023-03-31 13:31:55 +02:00
|
|
|
@:keep // # URI parser (the gist of it)
|
2023-03-31 12:58:53 +02:00
|
|
|
public static function parse(qs:String):haxe.DynamicAccess<Dynamic> { //
|
2023-03-30 19:51:32 +02:00
|
|
|
var fragment:Array<String> = qs.split("#"); // 1. fragment URI starts with `#`
|
|
|
|
|
var splitArray:Array<String> = fragment[1].split('&'); // 1. fragments are split by `&`
|
|
|
|
|
var resultMap:haxe.DynamicAccess<Dynamic> = {};
|
|
|
|
|
for (i in 0...splitArray.length) {
|
|
|
|
|
var splitByEqual = splitArray[i].split('='); // 1. `=` is used to split fragment key/values
|
2023-03-31 12:58:53 +02:00
|
|
|
var regexPlus = ~/\+/g; // 1. fragment-values are urlencoded (space becomes `+` using `encodeUriComponent` e.g.)
|
2023-03-30 19:51:32 +02:00
|
|
|
var key:String = splitByEqual[0];
|
2023-03-10 18:49:16 +01:00
|
|
|
|
2023-03-30 19:51:32 +02:00
|
|
|
if (splitByEqual.length > 1) {
|
|
|
|
|
var value:String = StringTools.urlDecode(regexPlus.split(splitByEqual[1]).join(" "));
|
2023-03-31 12:58:53 +02:00
|
|
|
var ok:Bool = Parser.parse(key,value,resultMap); // 1. every recognized fragment key/value-pair is added to a central map/associative array/object
|
2023-03-09 22:32:28 +01:00
|
|
|
}
|
2023-03-30 19:51:32 +02:00
|
|
|
}
|
|
|
|
|
return resultMap;
|
2023-03-09 22:32:28 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|