in portal/js/shell/shell-controller.js [129:206]
function encodePathString(path, returnParams) {
var i = 0;
var segments = new Array();
var payload = null;
while (i < path.length) {
var c = path.charAt(i);
if (c == '{') {
var bracket_start = i;
i++;
var bracket_count = 1;
while ((i < path.length) && (bracket_count > 0)) {
c = path.charAt(i);
if (c == '{') {
bracket_count++;
} else if (c == '}') {
bracket_count--;
}
i++;
}
if (i > bracket_start) {
var segment = path.substring(bracket_start, i);
segments.push(JSON.parse(segment));
}
continue;
} else if (c == '/') {
i++;
var segment_start = i;
while (i < path.length) {
c = path.charAt(i);
if ((c == ' ') || (c == '/') || (c == '{')) {
break;
}
i++;
}
if (i > segment_start) {
var segment = path.substring(segment_start, i);
segments.push(segment);
}
continue;
} else if (c == ' ') {
i++;
var payload_start = i;
while (i < path.length) {
c = path.charAt(i);
i++;
}
if (i > payload_start) {
var json = path.substring(payload_start, i).trim();
payload = JSON.parse(json);
}
break;
}
i++;
}
var newPath = "";
for (i = 0; i < segments.length; i++) {
var segment = segments[i];
if (typeof segment === "string") {
newPath += "/" + segment;
} else {
if (i == (segments.length - 1)) {
if (returnParams) {
return {path : newPath, params: segment, payload: payload};
}
newPath += "?";
} else {
newPath += ";";
}
newPath += encodeParams(segment);
}
}
if (returnParams) {
return {path : newPath, params: null, payload: payload};
}
return newPath;
}