diff options
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; +        }        }      }); | 
