aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/filelist.rs
diff options
context:
space:
mode:
authorBogdan Cuza <bogdan.cuza@hotmail.com>2015-07-23 19:52:39 +0300
committerBogdan <boghison22@gmail.com>2015-08-01 19:31:20 +0200
commit8bc66f97f86aff282caa37f7861aed20ace57cff (patch)
tree2fb1c77a5849ed0befc95fea2722b9e9ed506d52 /components/script/dom/filelist.rs
parenteffb17b3368769baaf5247908b26b7f0dd370ea3 (diff)
downloadservo-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.rs51
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
+ }
+}
+