diff options
author | Bogdan Cuza <bogdan.cuza@hotmail.com> | 2015-07-23 19:52:39 +0300 |
---|---|---|
committer | Bogdan <boghison22@gmail.com> | 2015-08-01 19:31:20 +0200 |
commit | 8bc66f97f86aff282caa37f7861aed20ace57cff (patch) | |
tree | 2fb1c77a5849ed0befc95fea2722b9e9ed506d52 /components/script/dom/filelist.rs | |
parent | effb17b3368769baaf5247908b26b7f0dd370ea3 (diff) | |
download | servo-8bc66f97f86aff282caa37f7861aed20ace57cff.tar.gz servo-8bc66f97f86aff282caa37f7861aed20ace57cff.zip |
Implement the FileList interface. Fixes #6708
Diffstat (limited to 'components/script/dom/filelist.rs')
-rw-r--r-- | components/script/dom/filelist.rs | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/components/script/dom/filelist.rs b/components/script/dom/filelist.rs new file mode 100644 index 00000000000..75e06d026d5 --- /dev/null +++ b/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<JS<File>> +} + +impl FileList { + fn new_inherited(files: Vec<JS<File>>) -> FileList { + FileList { + reflector_: Reflector::new(), + list: files + } + } + + pub fn new(window: &Window, files: Vec<JS<File>>) -> Root<FileList> { + 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<Root<File>> { + Some(self.list[index as usize].root()) + } + + // check-tidy: no specs after this line + fn IndexedGetter(self, index: u32, found: &mut bool) -> Option<Root<File>> { + let item = self.Item(index); + *found = item.is_some(); + item + } +} + |