Guest User

Untitled

a guest
Dec 8th, 2018
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.03 KB | None | 0 0
  1.  
  2. var URL = (function() {
  3.  
  4. function parseSearch(s) {
  5. var result = [];
  6. var k = 0;
  7. var parts = s.slice(1).split('&');
  8. for (var i = 0; i < parts.length; i++) {
  9. var part = parts[i];
  10. var key = part.split('=', 1)[0];
  11. if (key) {
  12. var value = part.slice(key.length + 1);
  13. result[k++] = [key, value];
  14. }
  15. }
  16. return result;
  17. }
  18.  
  19. function serializeParsed(array) {
  20. return array.map(function(pair) {
  21. return pair[1] !== '' ? pair.join('=') : pair[0];
  22. }).join('&');
  23. }
  24.  
  25. function URL(url, base) {
  26. if (!url)
  27. throw new TypeError('Invalid argument');
  28.  
  29. var doc = document.implementation.createHTMLDocument('');
  30. if (base) {
  31. var baseElement = doc.createElement('base');
  32. baseElement.href = base || window.lo;
  33. doc.head.appendChild(baseElement);
  34. }
  35. var anchorElement = doc.createElement('a');
  36. anchorElement.href = url;
  37. doc.body.appendChild(anchorElement);
  38.  
  39. if (anchorElement.href === '')
  40. throw new TypeError('Invalid URL');
  41.  
  42. Object.defineProperty(this, '_anchorElement', {value: anchorElement});
  43. }
  44.  
  45. URL.prototype = {
  46. toString: function() {
  47. return this.href;
  48. },
  49. get href() {
  50. return this._anchorElement.href;
  51. },
  52. set href(value) {
  53. this._anchorElement.href = value;
  54. },
  55.  
  56. get protocol() {
  57. return this._anchorElement.protocol;
  58. },
  59. set protocol(value) {
  60. this._anchorElement.protocol = value;
  61. },
  62.  
  63. // NOT IMPLEMENTED
  64. // get username() {
  65. // return this._anchorElement.username;
  66. // },
  67. // set username(value) {
  68. // this._anchorElement.username = value;
  69. // },
  70.  
  71. // get password() {
  72. // return this._anchorElement.password;
  73. // },
  74. // set password(value) {
  75. // this._anchorElement.password = value;
  76. // },
  77.  
  78. // get origin() {
  79. // return this._anchorElement.origin;
  80. // },
  81.  
  82. get host() {
  83. return this._anchorElement.host;
  84. },
  85. set host(value) {
  86. this._anchorElement.host = value;
  87. },
  88.  
  89. get hostname() {
  90. return this._anchorElement.hostname;
  91. },
  92. set hostname(value) {
  93. this._anchorElement.hostname = value;
  94. },
  95.  
  96. get port() {
  97. return this._anchorElement.port;
  98. },
  99. set port(value) {
  100. this._anchorElement.port = value;
  101. },
  102.  
  103. get pathname() {
  104. return this._anchorElement.pathname;
  105. },
  106. set pathname(value) {
  107. this._anchorElement.pathname = value;
  108. },
  109.  
  110. get search() {
  111. return this._anchorElement.search;
  112. },
  113. set search(value) {
  114. this._anchorElement.search = value;
  115. },
  116.  
  117. get hash() {
  118. return this._anchorElement.hash;
  119. },
  120. set hash(value) {
  121. this._anchorElement.hash = value;
  122. },
  123.  
  124. get filename() {
  125. var match;
  126. if ((match = this.pathname.match(/\/([^\/]+)$/)))
  127. return match[1];
  128. return '';
  129. },
  130. set filename(value) {
  131. var match, pathname = this.pathname;
  132. if ((match = pathname.match(/\/([^\/]+)$/)))
  133. this.pathname = pathname.slice(0, -match[1].length) + value;
  134. else
  135. this.pathname = value;
  136. },
  137.  
  138. get parameterNames() {
  139. var seen = Object.create(null);
  140. return parseSearch(this.search).map(function(pair) {
  141. return pair[0];
  142. }).filter(function(key) {
  143. if (key in seen)
  144. return false;
  145. seen[key] = true;
  146. return true;
  147. });
  148. },
  149.  
  150. getParameter: function(name) {
  151. return this.getParameterAll(name).pop();
  152. },
  153.  
  154. getParameterAll: function(name) {
  155. name = String(name);
  156. var result = [];
  157. var k = 0;
  158. parseSearch(this.search).forEach(function(pair) {
  159. if (pair[0] === name)
  160. result[k++] = pair[1];
  161. });
  162. return result;
  163. },
  164.  
  165. appendParameter: function(name, values) {
  166. if (!Array.isArray(values))
  167. values = [values];
  168. var parsed = parseSearch(this.search);
  169. for (var i = 0; i < values.length; i++) {
  170. parsed.push([name, values[i]]);
  171. }
  172. this.search = serializeParsed(parsed);
  173. },
  174.  
  175. clearParameter: function(name) {
  176. this.search = serializeParsed(
  177. parseSearch(this.search).filter(function(pair) {
  178. return pair[0] !== name;
  179. }));
  180. },
  181. };
  182.  
  183. var oldURL = window.URL || window.webkitURL || window.mozURL;
  184.  
  185. URL.createObjectURL = function(blob) {
  186. return oldURL.createObjectURL.apply(oldURL, arguments);
  187. };
  188.  
  189. URL.revokeObjectURL = function(url) {
  190. return oldURL.revokeObjectURL.apply(oldURL, arguments);
  191. };
  192.  
  193. // Methods should not be enumerable.
  194. Object.defineProperty(URL.prototype, 'toString', {enumerable: false});
  195. Object.defineProperty(URL.prototype, 'getParameter', {enumerable: false});
  196. Object.defineProperty(URL.prototype, 'getParameterAll', {enumerable: false});
  197. Object.defineProperty(URL.prototype, 'appendParameter', {enumerable: false});
  198. Object.defineProperty(URL.prototype, 'clearParameter', {enumerable: false});
  199. Object.defineProperty(URL, 'createObjectURL', {enumerable: false});
  200. Object.defineProperty(URL, 'revokeObjectURL', {enumerable: false});
  201.  
  202. return URL;
  203. })();
Add Comment
Please, Sign In to add comment