* Parses an escaped url query string into key-value pairs. * @returns {Object. }
( /**string*/ keyValue)
| 1616 | * @returns {Object.<string,boolean|Array>} |
| 1617 | */ |
| 1618 | function parseKeyValue( /**string*/ keyValue) { |
| 1619 | var obj = {}; |
| 1620 | forEach((keyValue || '').split('&'), function (keyValue) { |
| 1621 | var splitPoint, key, val; |
| 1622 | if (keyValue) { |
| 1623 | key = keyValue = keyValue.replace(/\+/g, '%20'); |
| 1624 | splitPoint = keyValue.indexOf('='); |
| 1625 | if (splitPoint !== -1) { |
| 1626 | key = keyValue.substring(0, splitPoint); |
| 1627 | val = keyValue.substring(splitPoint + 1); |
| 1628 | } |
| 1629 | key = tryDecodeURIComponent(key); |
| 1630 | if (isDefined(key)) { |
| 1631 | val = isDefined(val) ? tryDecodeURIComponent(val) : true; |
| 1632 | if (!hasOwnProperty.call(obj, key)) { |
| 1633 | obj[key] = val; |
| 1634 | } else if (isArray(obj[key])) { |
| 1635 | obj[key].push(val); |
| 1636 | } else { |
| 1637 | obj[key] = [obj[key], val]; |
| 1638 | } |
| 1639 | } |
| 1640 | } |
| 1641 | }); |
| 1642 | return obj; |
| 1643 | } |
| 1644 | |
| 1645 | function toKeyValue(obj) { |
| 1646 | var parts = []; |
no test coverage detected