cms/app-client/mirage/serializers/utils.js
author ymh <ymh.work@gmail.com>
Fri, 07 Oct 2016 02:07:34 +0200
changeset 324 92fc9d077f95
child 543 aaaf9b0b09f6
permissions -rw-r--r--
add pagination info for document list, move it to meta sub object
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
324
92fc9d077f95 add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
// taken from http://blog.stevenlevithan.com/archives/parseuri
92fc9d077f95 add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
// parseUri 1.2.2
92fc9d077f95 add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
// (c) Steven Levithan <stevenlevithan.com>
92fc9d077f95 add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
// MIT License
92fc9d077f95 add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
import _ from 'lodash';
92fc9d077f95 add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
92fc9d077f95 add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
const PARSEURI_DEFAULT_OPTIONS = {
92fc9d077f95 add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
  strictMode: false,
92fc9d077f95 add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
  key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],
92fc9d077f95 add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
  q: {
92fc9d077f95 add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
    name:   "queryKey",
92fc9d077f95 add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
    parser: /(?:^|&)([^&=]*)=?([^&]*)/g
92fc9d077f95 add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
  },
92fc9d077f95 add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
  parser: {
92fc9d077f95 add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
    strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,
92fc9d077f95 add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
    loose:  /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/
92fc9d077f95 add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
  }
92fc9d077f95 add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
};
92fc9d077f95 add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
92fc9d077f95 add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
export default {
92fc9d077f95 add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
  parseUri : function (str, options) {
92fc9d077f95 add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
    var o = _.defaultsDeep(options || {}, PARSEURI_DEFAULT_OPTIONS);
92fc9d077f95 add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
    var	m   = o.parser[o.strictMode ? "strict" : "loose"].exec(str),
92fc9d077f95 add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
        uri = {},
92fc9d077f95 add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
        i   = 14;
92fc9d077f95 add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
92fc9d077f95 add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
    while (i--) { uri[o.key[i]] = m[i] || ""; }
92fc9d077f95 add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
92fc9d077f95 add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
    uri[o.q.name] = {};
92fc9d077f95 add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
    uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {
92fc9d077f95 add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
      if ($1) { uri[o.q.name][$1] = $2; }
92fc9d077f95 add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
    });
92fc9d077f95 add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
92fc9d077f95 add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
    return uri;
92fc9d077f95 add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
  },
92fc9d077f95 add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
  mergeUri : function(uriParts) {
92fc9d077f95 add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
    let res = "";
92fc9d077f95 add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
    if(uriParts.protocol) {
92fc9d077f95 add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
      res += uriParts.protocol+":";
92fc9d077f95 add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
    }
92fc9d077f95 add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
    if(uriParts.host) {
92fc9d077f95 add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
      res += "//" + uriParts.host;
92fc9d077f95 add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
    }
92fc9d077f95 add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
    if(uriParts.port) {
92fc9d077f95 add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
      res += ":" + uriParts.port;
92fc9d077f95 add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
    }
92fc9d077f95 add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
    if(uriParts.path) {
92fc9d077f95 add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
      res += uriParts.path;
92fc9d077f95 add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
    }
92fc9d077f95 add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
    if(uriParts.queryKey) {
92fc9d077f95 add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
      res += "?" + _.map(uriParts.queryKey, function(v,k) {
92fc9d077f95 add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
        return k + "=" + v;
92fc9d077f95 add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
      }).join("&");
92fc9d077f95 add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
    }
92fc9d077f95 add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
92fc9d077f95 add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
    return res;
92fc9d077f95 add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
  }
92fc9d077f95 add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
};