diff options
Diffstat (limited to 'html/filter.js')
-rw-r--r-- | html/filter.js | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/html/filter.js b/html/filter.js new file mode 100644 index 0000000..d1c9a49 --- /dev/null +++ b/html/filter.js @@ -0,0 +1,78 @@ + + +// Filter popup +enyo.kind({ + name: "Abcd.FilterPopup", + kind: "onyx.Popup", + classes: "filter-popup", + centered: true, + modal: true, + floating: true, + published: { + filter: null, + }, + events: { + onFilterChanged: "" + }, + components: [ + {name: "box", classes: "filterBox", components: [ + ]}, + {name: "trash", kind: "Image", src: "images/trashcan.png", classes: "trashButton", ontap: "trashTaped"}, + ], + + // Constructor + create: function() { + this.inherited(arguments); + this.filterChanged(); + }, + + rendered: function() { + // Delete all + var items = []; + enyo.forEach(this.$.box.getControls(), function(item) { + items.push(item); + }); + for (var i = 0 ; i < items.length ; i++) { + items[i].destroy(); + } + + // Display themes + var length = Abcd.themes.length; + for (var i = 0 ; i < length ; i++) { + this.$.box.createComponent( + { kind: "Abcd.Theme", index: i, ontap: "displayCollections" }, + { owner: this } + ).render(); + } + + // Display letters + for (var i = 0 ; i < 26 ; i++) { + var letter = String.fromCharCode(65+i).toLowerCase(); + this.$.box.createComponent( + { kind: "Abcd.Letter", letter: letter, + selected: (this.filter != null&&this.filter.letter == letter), ontap: "filterOnLetter" }, + { owner: this } + ).render(); + } + }, + + filterChanged: function() { + this.render(); + }, + + // Trash taped, remove filter + trashTaped: function() { + this.hide(); + this.filter = null; + this.doFilterChanged(); + }, + + // Tap on a letter, filter on this letter + filterOnLetter: function(l, e) { + if (!Abcd.letters.hasOwnProperty(l.letter) || Abcd.letters[l.letter].length < 3) + return; + this.hide(); + this.filter = l; + this.doFilterChanged(); + } +});
\ No newline at end of file |