57 lines
1.4 KiB
JavaScript
57 lines
1.4 KiB
JavaScript
|
"use strict";
|
||
|
var URL = require('./URL');
|
||
|
var URLUtils = require('./URLUtils');
|
||
|
|
||
|
module.exports = Location;
|
||
|
|
||
|
function Location(window, href) {
|
||
|
this._window = window;
|
||
|
this._href = href;
|
||
|
}
|
||
|
|
||
|
Location.prototype = Object.create(URLUtils.prototype, {
|
||
|
constructor: { value: Location },
|
||
|
|
||
|
// Special behavior when href is set
|
||
|
href: {
|
||
|
get: function() { return this._href; },
|
||
|
set: function(v) { this.assign(v); }
|
||
|
},
|
||
|
|
||
|
assign: { value: function(url) {
|
||
|
// Resolve the new url against the current one
|
||
|
// XXX:
|
||
|
// This is not actually correct. It should be resolved against
|
||
|
// the URL of the document of the script. For now, though, I only
|
||
|
// support a single window and there is only one base url.
|
||
|
// So this is good enough for now.
|
||
|
var current = new URL(this._href);
|
||
|
var newurl = current.resolve(url);
|
||
|
|
||
|
// Save the new url
|
||
|
this._href = newurl;
|
||
|
|
||
|
// Start loading the new document!
|
||
|
// XXX
|
||
|
// This is just something hacked together.
|
||
|
// The real algorithm is: http://www.whatwg.org/specs/web-apps/current-work/multipage/history.html#navigate
|
||
|
}},
|
||
|
|
||
|
replace: { value: function(url) {
|
||
|
// XXX
|
||
|
// Since we aren't tracking history yet, replace is the same as assign
|
||
|
this.assign(url);
|
||
|
}},
|
||
|
|
||
|
reload: { value: function() {
|
||
|
// XXX:
|
||
|
// Actually, the spec is a lot more complicated than this
|
||
|
this.assign(this.href);
|
||
|
}},
|
||
|
|
||
|
toString: { value: function() {
|
||
|
return this.href;
|
||
|
}}
|
||
|
|
||
|
});
|