From 6954dbf99e66052cf7a0518355088d62bfdec5dd Mon Sep 17 00:00:00 2001 From: alexwl Date: Wed, 24 Apr 2019 21:41:50 +0300 Subject: Add an option to sort files by name/type --- javascript/app/components/file-tree.js | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) (limited to 'javascript/app/components') diff --git a/javascript/app/components/file-tree.js b/javascript/app/components/file-tree.js index c86a71d..d255229 100644 --- a/javascript/app/components/file-tree.js +++ b/javascript/app/components/file-tree.js @@ -35,23 +35,47 @@ const containsHaskellModule = function(node) { }); } +const fileExtension = function (filename) { + const idx = filename.lastIndexOf('.'); + return (idx < 1) ? "" : filename.substr(idx + 1); +} + export default Ember.Component.extend({ query: null, + sortType: "alphabetical", + sortTypeObserver : Ember.observer('sortType',function() { + Ember.run.next(this,() => { + this.jstree.refresh(); + }); + }), didInsertElement : function () { this._super(...arguments); const element = this.element.getElementsByClassName('file-tree')[0]; + const component = this; const jstreeElement = Ember.$(element).jstree({ 'core' : { 'data' : directoryTreeToJsTree(this.get('packageId'),this.get('directoryTree')) }, "plugins" : [ - "search" + "search", + "sort" ], "search": { "case_insensitive": true, "show_only_matches" : true, "show_only_matches_children": true + }, + 'sort' : function (a,b) { + const node1 = this.get_node(a).data; + const node2 = this.get_node(b).data; + if(component.get("sortType") === "alphabetical") { + return node1.name > node2.name; + } else { + const extendedName1 = (node1.tag === "Dir" ? "0" : "1") + fileExtension(node1.name) + node1.name; + const extendedName2 = (node2.tag === "Dir" ? "0" : "1") + fileExtension(node2.name) + node2.name; + return extendedName1 > extendedName2; + } } }); -- cgit v1.2.3