function encodePathString()

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;
    }