diff options
author | alexwl <alexey.a.kiryushin@gmail.com> | 2019-04-24 21:41:50 +0300 |
---|---|---|
committer | alexwl <alexey.a.kiryushin@gmail.com> | 2019-04-24 21:41:50 +0300 |
commit | 6954dbf99e66052cf7a0518355088d62bfdec5dd (patch) | |
tree | 1d7c9b9e25d806334bc1d34ad82ec850e49ec78d /javascript/app/components | |
parent | 6b647e644625a999cf1b072700fcc132939face8 (diff) |
Add an option to sort files by name/type
Diffstat (limited to 'javascript/app/components')
-rw-r--r-- | javascript/app/components/file-tree.js | 26 |
1 files changed, 25 insertions, 1 deletions
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; + } } }); |