mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
Implement URL.searchParams
Spec: https://url.spec.whatwg.org/#dom-url-searchparams
This commit is contained in:
parent
b38fafcf11
commit
7b38f289b0
5 changed files with 50 additions and 18 deletions
|
@ -6,11 +6,13 @@ use dom::bindings::cell::DOMRefCell;
|
|||
use dom::bindings::codegen::Bindings::URLBinding::{self, URLMethods};
|
||||
use dom::bindings::error::{Error, ErrorResult, Fallible};
|
||||
use dom::bindings::global::GlobalRef;
|
||||
use dom::bindings::js::Root;
|
||||
use dom::bindings::reflector::{Reflector, reflect_dom_object};
|
||||
use dom::bindings::js::{JS, MutNullableHeap, Root};
|
||||
use dom::bindings::reflector::{Reflectable, Reflector, reflect_dom_object};
|
||||
use dom::bindings::str::USVString;
|
||||
use dom::urlhelper::UrlHelper;
|
||||
use dom::urlsearchparams::URLSearchParams;
|
||||
use std::borrow::ToOwned;
|
||||
use std::default::Default;
|
||||
use url::{Host, ParseResult, Url, UrlParser};
|
||||
use util::str::DOMString;
|
||||
|
||||
|
@ -24,6 +26,9 @@ pub struct URL {
|
|||
|
||||
// https://url.spec.whatwg.org/#concept-urlutils-get-the-base
|
||||
base: Option<Url>,
|
||||
|
||||
// https://url.spec.whatwg.org/#dom-url-searchparams
|
||||
search_params: MutNullableHeap<JS<URLSearchParams>>,
|
||||
}
|
||||
|
||||
impl URL {
|
||||
|
@ -32,6 +37,7 @@ impl URL {
|
|||
reflector_: Reflector::new(),
|
||||
url: DOMRefCell::new(url),
|
||||
base: base,
|
||||
search_params: Default::default(),
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -39,6 +45,10 @@ impl URL {
|
|||
reflect_dom_object(box URL::new_inherited(url, base),
|
||||
global, URLBinding::Wrap)
|
||||
}
|
||||
|
||||
pub fn set_query(&self, query: String) {
|
||||
self.url.borrow_mut().query = Some(query);
|
||||
}
|
||||
}
|
||||
|
||||
impl URL {
|
||||
|
@ -69,8 +79,13 @@ impl URL {
|
|||
return Err(Error::Type(format!("could not parse URL: {}", error)));
|
||||
}
|
||||
};
|
||||
// Steps 5-8.
|
||||
Ok(URL::new(global, parsed_url, parsed_base))
|
||||
// Step 5: Skip (see step 8 below).
|
||||
// Steps 6-7.
|
||||
let result = URL::new(global, parsed_url, parsed_base);
|
||||
// Step 8: Instead of construcing a new `URLSearchParams` object here, construct it
|
||||
// on-demand inside `URL::SearchParams`.
|
||||
// Step 9.
|
||||
Ok(result)
|
||||
}
|
||||
|
||||
// https://url.spec.whatwg.org/#dom-url-domaintoasciidomain
|
||||
|
@ -189,6 +204,14 @@ impl URLMethods for URL {
|
|||
// https://url.spec.whatwg.org/#dom-url-search
|
||||
fn SetSearch(&self, value: USVString) {
|
||||
UrlHelper::SetSearch(&mut self.url.borrow_mut(), value);
|
||||
if let Some(search_params) = self.search_params.get() {
|
||||
search_params.set_list(self.url.borrow().query_pairs().unwrap_or_else(|| vec![]));
|
||||
}
|
||||
}
|
||||
|
||||
// https://url.spec.whatwg.org/#dom-url-searchparams
|
||||
fn SearchParams(&self) -> Root<URLSearchParams> {
|
||||
self.search_params.or_init(|| URLSearchParams::new(self.global().r(), Some(self)))
|
||||
}
|
||||
|
||||
// https://url.spec.whatwg.org/#dom-url-href
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue