diff --git a/servo/components/script/dom/filelist.rs b/servo/components/script/dom/filelist.rs new file mode 100644 index 000000000000..75e06d026d5a --- /dev/null +++ b/servo/components/script/dom/filelist.rs @@ -0,0 +1,51 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +use dom::bindings::codegen::Bindings::FileListBinding; +use dom::bindings::codegen::Bindings::FileListBinding::FileListMethods; +use dom::bindings::global::GlobalRef; +use dom::bindings::js::{JS, Root}; +use dom::bindings::utils::{Reflector, reflect_dom_object}; +use dom::file::File; +use dom::window::Window; + +// https://w3c.github.io/FileAPI/#dfn-filelist +#[dom_struct] +pub struct FileList { + reflector_: Reflector, + list: Vec> +} + +impl FileList { + fn new_inherited(files: Vec>) -> FileList { + FileList { + reflector_: Reflector::new(), + list: files + } + } + + pub fn new(window: &Window, files: Vec>) -> Root { + reflect_dom_object(box FileList::new_inherited(files), GlobalRef::Window(window), FileListBinding::Wrap) + } +} + +impl<'a> FileListMethods for &'a FileList { + // https://w3c.github.io/FileAPI/#dfn-length + fn Length(self) -> u32 { + self.list.len() as u32 + } + + // https://w3c.github.io/FileAPI/#dfn-item + fn Item(self, index: u32) -> Option> { + Some(self.list[index as usize].root()) + } + + // check-tidy: no specs after this line + fn IndexedGetter(self, index: u32, found: &mut bool) -> Option> { + let item = self.Item(index); + *found = item.is_some(); + item + } +} + diff --git a/servo/components/script/dom/mod.rs b/servo/components/script/dom/mod.rs index b6e9667e0345..663d14784a62 100644 --- a/servo/components/script/dom/mod.rs +++ b/servo/components/script/dom/mod.rs @@ -215,6 +215,7 @@ pub mod event; pub mod eventdispatcher; pub mod eventtarget; pub mod file; +pub mod filelist; pub mod filereader; pub mod formdata; pub mod htmlanchorelement; diff --git a/servo/components/script/dom/webidls/FileList.webidl b/servo/components/script/dom/webidls/FileList.webidl new file mode 100644 index 000000000000..aa1f97914276 --- /dev/null +++ b/servo/components/script/dom/webidls/FileList.webidl @@ -0,0 +1,11 @@ +/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +// https://w3c.github.io/FileAPI/#dfn-filelist + +interface FileList { + getter File? item(unsigned long index); + readonly attribute unsigned long length; +}; diff --git a/servo/python/tidy.py b/servo/python/tidy.py index 8f185483d1da..21b7c74e36cf 100644 --- a/servo/python/tidy.py +++ b/servo/python/tidy.py @@ -202,6 +202,7 @@ def check_webidl_spec(file_name, contents): "//xhr.spec.whatwg.org", "//www.whatwg.org/html", "//www.whatwg.org/specs", + "//w3c.github.io", # Not a URL "// This interface is entirely internal to Servo, and should not be" + " accessible to\n// web pages."