You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							197 lines
						
					
					
						
							4.1 KiB
						
					
					
				
			
		
		
	
	
							197 lines
						
					
					
						
							4.1 KiB
						
					
					
				| "use strict";
 | |
| 
 | |
| const conversions = require("webidl-conversions");
 | |
| const utils = require("./utils.js");
 | |
| const Impl = require(".//URL-impl.js");
 | |
| 
 | |
| const impl = utils.implSymbol;
 | |
| 
 | |
| function URL(url) {
 | |
|   if (!this || this[impl] || !(this instanceof URL)) {
 | |
|     throw new TypeError("Failed to construct 'URL': Please use the 'new' operator, this DOM object constructor cannot be called as a function.");
 | |
|   }
 | |
|   if (arguments.length < 1) {
 | |
|     throw new TypeError("Failed to construct 'URL': 1 argument required, but only " + arguments.length + " present.");
 | |
|   }
 | |
|   const args = [];
 | |
|   for (let i = 0; i < arguments.length && i < 2; ++i) {
 | |
|     args[i] = arguments[i];
 | |
|   }
 | |
|   args[0] = conversions["USVString"](args[0]);
 | |
|   if (args[1] !== undefined) {
 | |
|   args[1] = conversions["USVString"](args[1]);
 | |
|   }
 | |
| 
 | |
|   module.exports.setup(this, args);
 | |
| }
 | |
| 
 | |
| URL.prototype.toJSON = function toJSON() {
 | |
|   if (!this || !module.exports.is(this)) {
 | |
|     throw new TypeError("Illegal invocation");
 | |
|   }
 | |
|   const args = [];
 | |
|   for (let i = 0; i < arguments.length && i < 0; ++i) {
 | |
|     args[i] = arguments[i];
 | |
|   }
 | |
|   return this[impl].toJSON.apply(this[impl], args);
 | |
| };
 | |
| Object.defineProperty(URL.prototype, "href", {
 | |
|   get() {
 | |
|     return this[impl].href;
 | |
|   },
 | |
|   set(V) {
 | |
|     V = conversions["USVString"](V);
 | |
|     this[impl].href = V;
 | |
|   },
 | |
|   enumerable: true,
 | |
|   configurable: true
 | |
| });
 | |
| 
 | |
| URL.prototype.toString = function () {
 | |
|   if (!this || !module.exports.is(this)) {
 | |
|     throw new TypeError("Illegal invocation");
 | |
|   }
 | |
|   return this.href;
 | |
| };
 | |
| 
 | |
| Object.defineProperty(URL.prototype, "origin", {
 | |
|   get() {
 | |
|     return this[impl].origin;
 | |
|   },
 | |
|   enumerable: true,
 | |
|   configurable: true
 | |
| });
 | |
| 
 | |
| Object.defineProperty(URL.prototype, "protocol", {
 | |
|   get() {
 | |
|     return this[impl].protocol;
 | |
|   },
 | |
|   set(V) {
 | |
|     V = conversions["USVString"](V);
 | |
|     this[impl].protocol = V;
 | |
|   },
 | |
|   enumerable: true,
 | |
|   configurable: true
 | |
| });
 | |
| 
 | |
| Object.defineProperty(URL.prototype, "username", {
 | |
|   get() {
 | |
|     return this[impl].username;
 | |
|   },
 | |
|   set(V) {
 | |
|     V = conversions["USVString"](V);
 | |
|     this[impl].username = V;
 | |
|   },
 | |
|   enumerable: true,
 | |
|   configurable: true
 | |
| });
 | |
| 
 | |
| Object.defineProperty(URL.prototype, "password", {
 | |
|   get() {
 | |
|     return this[impl].password;
 | |
|   },
 | |
|   set(V) {
 | |
|     V = conversions["USVString"](V);
 | |
|     this[impl].password = V;
 | |
|   },
 | |
|   enumerable: true,
 | |
|   configurable: true
 | |
| });
 | |
| 
 | |
| Object.defineProperty(URL.prototype, "host", {
 | |
|   get() {
 | |
|     return this[impl].host;
 | |
|   },
 | |
|   set(V) {
 | |
|     V = conversions["USVString"](V);
 | |
|     this[impl].host = V;
 | |
|   },
 | |
|   enumerable: true,
 | |
|   configurable: true
 | |
| });
 | |
| 
 | |
| Object.defineProperty(URL.prototype, "hostname", {
 | |
|   get() {
 | |
|     return this[impl].hostname;
 | |
|   },
 | |
|   set(V) {
 | |
|     V = conversions["USVString"](V);
 | |
|     this[impl].hostname = V;
 | |
|   },
 | |
|   enumerable: true,
 | |
|   configurable: true
 | |
| });
 | |
| 
 | |
| Object.defineProperty(URL.prototype, "port", {
 | |
|   get() {
 | |
|     return this[impl].port;
 | |
|   },
 | |
|   set(V) {
 | |
|     V = conversions["USVString"](V);
 | |
|     this[impl].port = V;
 | |
|   },
 | |
|   enumerable: true,
 | |
|   configurable: true
 | |
| });
 | |
| 
 | |
| Object.defineProperty(URL.prototype, "pathname", {
 | |
|   get() {
 | |
|     return this[impl].pathname;
 | |
|   },
 | |
|   set(V) {
 | |
|     V = conversions["USVString"](V);
 | |
|     this[impl].pathname = V;
 | |
|   },
 | |
|   enumerable: true,
 | |
|   configurable: true
 | |
| });
 | |
| 
 | |
| Object.defineProperty(URL.prototype, "search", {
 | |
|   get() {
 | |
|     return this[impl].search;
 | |
|   },
 | |
|   set(V) {
 | |
|     V = conversions["USVString"](V);
 | |
|     this[impl].search = V;
 | |
|   },
 | |
|   enumerable: true,
 | |
|   configurable: true
 | |
| });
 | |
| 
 | |
| Object.defineProperty(URL.prototype, "hash", {
 | |
|   get() {
 | |
|     return this[impl].hash;
 | |
|   },
 | |
|   set(V) {
 | |
|     V = conversions["USVString"](V);
 | |
|     this[impl].hash = V;
 | |
|   },
 | |
|   enumerable: true,
 | |
|   configurable: true
 | |
| });
 | |
| 
 | |
| 
 | |
| module.exports = {
 | |
|   is(obj) {
 | |
|     return !!obj && obj[impl] instanceof Impl.implementation;
 | |
|   },
 | |
|   create(constructorArgs, privateData) {
 | |
|     let obj = Object.create(URL.prototype);
 | |
|     this.setup(obj, constructorArgs, privateData);
 | |
|     return obj;
 | |
|   },
 | |
|   setup(obj, constructorArgs, privateData) {
 | |
|     if (!privateData) privateData = {};
 | |
|     privateData.wrapper = obj;
 | |
| 
 | |
|     obj[impl] = new Impl.implementation(constructorArgs, privateData);
 | |
|     obj[impl][utils.wrapperSymbol] = obj;
 | |
|   },
 | |
|   interface: URL,
 | |
|   expose: {
 | |
|     Window: { URL: URL },
 | |
|     Worker: { URL: URL }
 | |
|   }
 | |
| };
 | |
| 
 |