npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

ng-js-tree

v0.0.10

Published

Angular Directive for the famous JsTree

Downloads

3,966

Readme

Bower version Build Status Dependency Status Coverage Status Code Climate Built with Grunt NPM

ngJsTree

Angular Directive for the famous JS Tree library.

##Dependencies

The ngJsTree depends on the following libraries:

  • Angular
  • JsTree

##Install

You can install the ngJsTree with bower:

bower install ng-js-tree --save

or with npm:

npm install ng-js-tree --save

or you can add the ngJsTree.min.js file to your HTML page:

<script src="jquery.js"/>
<script src="angular.js"/>
<script src="jstree.min.js"/>
<script src="ngJsTree.min.js"/>

Add the ngJsTree to your module dependencies

#Documentation

You can find the JSTree documentation at this link

Usage

<div js-tree="treeConfig" ng-model="treeData" should-apply="ignoreModelChanges()" tree="treeInstance" tree-events="ready:readyCB;create_node:createNodeCB"></div>
  • treeConfig - This is the configuration object of the JsTree, if you will not supply one, an empty one will be created (not mandatory).
  • treeData - The array with the elements of the tree, will be used for data binding (adding / removing / updating this data will be reflected in the tree).
  • ignoreModelChanges() - A method that returns true or false. when returning false, model changes will not be reflected in the tree (not mandatory).
  • treeInstance - The Js Tree instance will be assigned to this variable in your controller scope (not mandatory).
  • ready:readyCB;create_node:createNodeCB - List of Js Tree events and callbacks in your controller scope that will be called for each event (not mandatory.

Registering for events

You can register a callback for any Js Tree event in one of the following ways:

  • add the tree-events attribute and specify the name of the events to register for and a callback for each event.

Example:

<div ng-controller='myCtrl'>
    <div js-tree="treeConfig" ng-model="treeData" should-apply="ignoreModelChanges()" tree="treeInstance" tree-events="ready:readyCB;create_node:createNodeCB"></div>
</div>
angular.module('myApp').controller('myCtrl', function($scope,$log) {
    $scope.readyCB = function() {
        $log.info('ready called');
    };

    $scope.createNodeCB = function(e,item) {
        $log.info('create_node called');
    };
);
  • add the tree-events-obj attribute passing an object containing the list of events with the callback objects.

Example:

<div ng-controller='myCtrl'>
    <div js-tree="treeConfig" ng-model="treeData" should-apply="ignoreModelChanges()" tree="treeInstance" tree-events-obj="treeEventsObj"></div>
</div>
angular.module('myApp').controller('myCtrl', function($scope,$log) {

    $scope.treeEventsObj = {
      'ready': readyCB,
      'create_node': createNodeCB
    }

    function readyCB() {
        $log.info('ready called');
    };

    function createNodeCB(e,item) {
        $log.info('create_node called');
    };
);

NOTE: Only one of the methods can be used to pass event callbacks, tree-events will take precedence.

Using the Js Tree API from your controller

Add the tree attribute to the jstree directive and assign it with a name of a variable in your controller that will hold the jstree instance.

<div ng-controller='myCtrl'>
    <div js-tree="treeConfig" ng-model="treeData" tree="treeInstance"></div>
</div>
function yourCtrl($scope)  {
    var selected_nodes = $scope.treeInstance.jstree(true).get_selected();
}

Recreating the Tree

If from some reason you would like to recreate the tree, the right way to do it is update the tree configuration object. Once the directive will detect a change to the tree configuration it will destory the tree and recreate it.

this.treeConfig = {
    core : {
        multiple : false,
        animation: true,
        error : function(error) {
            $log.error('treeCtrl: error from js tree - ' + angular.toJson(error));
        },
        check_callback : true,
        worker : true
    },
    version : 1
};
this.reCreateTree = function() {
    this.treeConfig.version++;
}
  • The reason I am using the version property is because it is not a JsTree config property, so it will not effect the tree.

Development

Prepare your environment

  • Install Node.js and NPM (should come with)
  • Install global dev dependencies: npm install -g grunt-cli karma
  • Install local dev dependencies: npm install while current directory is ngJsTree
  • Install javascript dependencies: bower install while current directory is ngJsTree

Build

  • Build the whole project: grunt - this will run jshint and test and will build the project

TDD

  • Run test: grunt watch

License

MIT