From 8bc66f97f86aff282caa37f7861aed20ace57cff Mon Sep 17 00:00:00 2001 From: Bogdan Cuza Date: Thu, 23 Jul 2015 19:52:39 +0300 Subject: Implement the FileList interface. Fixes #6708 --- components/script/dom/filelist.rs | 51 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 components/script/dom/filelist.rs (limited to 'components/script/dom/filelist.rs') 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> +} + +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 + } +} + -- cgit v1.2.3