angularjs-tree 1.1.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.babelrc ADDED
@@ -0,0 +1,3 @@
1
+ {
2
+ "presets": ["@babel/preset-env"]
3
+ }
@@ -2,17 +2,19 @@ on:
2
2
  release:
3
3
  types: [published]
4
4
  name: Publish
5
+ permissions:
6
+ id-token: write
7
+ contents: read
5
8
  jobs:
6
9
  publish:
7
10
  runs-on: ubuntu-latest
8
11
  steps:
9
- - uses: actions/checkout@v3
10
- - uses: actions/setup-node@v3
12
+ - uses: actions/checkout@v4
13
+ - uses: actions/setup-node@v4
11
14
  with:
12
- node-version: '16.x'
15
+ node-version: '20'
13
16
  registry-url: 'https://registry.npmjs.org'
14
- scope: '@amalfra'
17
+ - name: Update npm
18
+ run: npm install -g npm@latest
15
19
  - run: npm ci
16
20
  - run: npm publish
17
- env:
18
- NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
package/README.md CHANGED
@@ -2,7 +2,7 @@ Angularjs tree
2
2
  ====
3
3
  [![npm](https://img.shields.io/npm/v/angularjs-tree.svg)](https://www.npmjs.com/package/angularjs-tree)
4
4
 
5
- A simple directive for creating tree lists with angularjs
5
+ A simple directive for creating tree lists with Angularjs version 1.
6
6
 
7
7
  ![screenshot](https://raw.githubusercontent.com/amalfra/angularjs-tree/master/examples/screenshot.png)
8
8
 
@@ -1,7 +1,6 @@
1
- /**
2
- * angularjs-tree - v1.1.0
3
- * (c) 2025-11-24. https://github.com/amalfra/angularjs-tree
4
- * License: MIT
5
- */
6
-
7
- !function(i){"use strict";i.module("angularjs.tree",[]).directive("tree",["$document",function(e){return{restrict:"A",scope:{callback:"&treeCallback"},link:function(a,e){i.forEach(i.element(e).children(),function(e,n){var l=i.element(e)[0].querySelector("a"),t=i.element(e)[0].querySelector(".treeview-menu"),c=i.element(e).hasClass("active");c?i.element(t).css("display","block"):i.element(t).css("display","none"),null!=t&&i.element(l).bind("click",function(e){e.preventDefault(),c?(i.element(t).css("display","none"),c=!1,i.element(l).parent("li").removeClass("active")):(i.element(t).css("display","block"),c=!0,i.element(l).parent("li").addClass("active")),a.callback({event:e})})})}}}])}((window,window.angular));
1
+ /*!
2
+ * angularjs-tree - v2.0.0
3
+ * (c) 2026. Amal Francis
4
+ * License: MIT
5
+ */
6
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("angular")):"function"==typeof define&&define.amd?define(["angular"],t):"object"==typeof exports?exports["angularjs.tree"]=t(require("angular")):e["angularjs.tree"]=t(e.angular)}(this,e=>(()=>{"use strict";var t={526(t){t.exports=e}},r={};function n(e){var l=r[e];if(void 0!==l)return l.exports;var o=r[e]={exports:{}};return t[e](o,o.exports,n),o.exports}n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var l={};n.r(l),n.d(l,{default:()=>c});var o=n(526),a="angularjs.tree";o.module(a,[]).directive("tree",["$document",function(e){return{restrict:"A",scope:{callback:"&treeCallback"},link:function(e,t){o.forEach(o.element(t).children(),function(t,r){var n=o.element(t)[0].querySelector("a"),l=o.element(t)[0].querySelector(".treeview-menu"),a=o.element(t).hasClass("active");a?o.element(l).css("display","block"):o.element(l).css("display","none"),null!=l&&o.element(n).bind("click",function(t){t.preventDefault(),a?(o.element(l).css("display","none"),a=!1,o.element(n).parent("li").removeClass("active")):(o.element(l).css("display","block"),a=!0,o.element(n).parent("li").addClass("active")),e.callback({event:t})})})}}}]);const c=a;return l})());
@@ -2,7 +2,7 @@
2
2
  <html>
3
3
  <head>
4
4
  <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.22/angular.min.js"></script>
5
- <script src="../src/angularjs-tree.js"></script>
5
+ <script src="../dist/angularjs-tree.min.js"></script>
6
6
  <title>Angular tree demo</title>
7
7
  <script>
8
8
  angular.module('demoApp', ['angularjs.tree']).controller('demoController', ['$scope', function($scope) {
@@ -2,7 +2,7 @@
2
2
  <html>
3
3
  <head>
4
4
  <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.8.2/angular.min.js"></script>
5
- <script src="../src/angularjs-tree.js"></script>
5
+ <script src="../dist/angularjs-tree.min.js"></script>
6
6
  <title>Angular tree demo</title>
7
7
  <script>
8
8
  angular.module('demoApp', ['angularjs.tree']).controller('demoController', ['$scope', function($scope) {
package/package.json CHANGED
@@ -1,18 +1,35 @@
1
1
  {
2
2
  "name": "angularjs-tree",
3
- "version": "1.1.0",
3
+ "version": "2.0.0",
4
4
  "description": "A simple directive for creating tree lists with angularjs",
5
5
  "author": "Amal Francis",
6
+ "type": "module",
6
7
  "bugs": {
7
8
  "url": "https://github.com/amalfra/angularjs-tree/issues"
8
9
  },
9
10
  "repository": {
10
11
  "type": "git",
11
- "url": "https://github.com/amalfra/angularjs-tree"
12
+ "url": "git@github.com:amalfra/angularjs-tree.git"
12
13
  },
14
+ "scripts": {
15
+ "build": "webpack --mode production",
16
+ "dev": "webpack --mode development"
17
+ },
18
+ "keywords": [
19
+ "angularjs",
20
+ "tree",
21
+ "view"
22
+ ],
13
23
  "license": "MIT",
14
24
  "devDependencies": {
15
- "grunt": "^1.3.0",
16
- "grunt-contrib-uglify": "^5.0.1 "
25
+ "@babel/core": "^7.29.0",
26
+ "@babel/preset-env": "^7.29.2",
27
+ "babel-loader": "^10.1.1",
28
+ "terser-webpack-plugin": "^5.4.0",
29
+ "webpack": "^5.105.4",
30
+ "webpack-cli": "^7.0.2"
31
+ },
32
+ "peerDependencies": {
33
+ "angular": "^1.8.3"
17
34
  }
18
35
  }
package/src/index.js ADDED
@@ -0,0 +1,49 @@
1
+ import angular from 'angular';
2
+
3
+ const moduleName = 'angularjs.tree';
4
+
5
+ const mod = angular.module(moduleName, []);
6
+
7
+ mod.directive('tree', ['$document', function($document) {
8
+ return {
9
+ restrict: 'A',
10
+ scope: {
11
+ callback: '&treeCallback'
12
+ },
13
+ link: function(scope, elem) {
14
+ angular.forEach(angular.element(elem).children(), function(value, key) {
15
+ var btn = angular.element(value)[0].querySelector('a');
16
+ var menu = angular.element(value)[0].querySelector('.treeview-menu');
17
+ var isActive = angular.element(value).hasClass('active');
18
+
19
+ // initialize already active menus
20
+ if (isActive) {
21
+ angular.element(menu).css('display', 'block');
22
+ } else {
23
+ angular.element(menu).css('display', 'none');
24
+ }
25
+
26
+ if (menu != null) {
27
+ // open or close the sub menu on link click
28
+ angular.element(btn).bind("click", function(e){
29
+ e.preventDefault();
30
+ if (isActive) {
31
+ // close sub menu
32
+ angular.element(menu).css('display', 'none');
33
+ isActive = false;
34
+ angular.element(btn).parent('li').removeClass('active');
35
+ } else {
36
+ // open sub menu
37
+ angular.element(menu).css('display', 'block');
38
+ isActive = true;
39
+ angular.element(btn).parent('li').addClass('active');
40
+ }
41
+ scope.callback({event: e});
42
+ });
43
+ }
44
+ });
45
+ }
46
+ }
47
+ }]);
48
+
49
+ export default moduleName;
@@ -0,0 +1,65 @@
1
+ import path from 'path';
2
+ import { fileURLToPath } from 'url';
3
+ import TerserPlugin from 'terser-webpack-plugin';
4
+ import webpack from 'webpack';
5
+ import { createRequire } from 'module';
6
+
7
+ const require = createRequire(import.meta.url);
8
+ const pkg = require('./package.json');
9
+
10
+ const __filename = fileURLToPath(import.meta.url);
11
+ const __dirname = path.dirname(__filename);
12
+
13
+ export default (env, argv) => {
14
+ const isProd = argv.mode === 'production';
15
+
16
+ const banner = `
17
+ ${pkg.name} - v${pkg.version}
18
+ (c) ${new Date().getFullYear()}. ${pkg.author || ''}
19
+ License: ${pkg.license || 'MIT'}
20
+ `.trim();
21
+
22
+ return {
23
+ entry: './src/index.js',
24
+ output: {
25
+ path: path.resolve(__dirname, 'dist'),
26
+ filename: isProd
27
+ ? 'angularjs-tree.min.js'
28
+ : 'angularjs-tree.js',
29
+ library: {
30
+ name: 'angularjs.tree',
31
+ type: 'umd'
32
+ },
33
+ globalObject: 'this'
34
+ },
35
+ externals: {
36
+ angular: 'angular'
37
+ },
38
+ module: {
39
+ rules: [
40
+ {
41
+ test: /\.js$/,
42
+ exclude: /node_modules/,
43
+ use: {
44
+ loader: 'babel-loader'
45
+ }
46
+ }
47
+ ]
48
+ },
49
+ plugins: [
50
+ new webpack.BannerPlugin({
51
+ banner,
52
+ raw: false,
53
+ entryOnly: true
54
+ })
55
+ ],
56
+ optimization: {
57
+ minimize: isProd,
58
+ minimizer: [new TerserPlugin({
59
+ extractComments: false // prevent separate LICENSE file
60
+ })]
61
+ },
62
+ devtool: isProd ? false : 'source-map',
63
+ mode: isProd ? 'production' : 'development'
64
+ };
65
+ };
package/Gruntfile.js DELETED
@@ -1,21 +0,0 @@
1
- module.exports = function(grunt) {
2
- grunt.initConfig({
3
- pkg: grunt.file.readJSON('package.json'),
4
- uglify: {
5
- options: {
6
- banner: '/** \n'+
7
- '* <%= pkg.name %> - v<%= pkg.version %> \n' +
8
- '* (c) <%= grunt.template.today("yyyy-mm-dd") %>. <%= pkg.repository.url %> \n' +
9
- '* License: <%= pkg.license %> \n*/\n'
10
- },
11
- my_target: {
12
- files: {
13
- './dist/angularjs-tree.min.js': ['./src/angularjs-tree.js']
14
- }
15
- }
16
- }
17
- });
18
-
19
- grunt.loadNpmTasks('grunt-contrib-uglify');
20
- grunt.registerTask('default', ['uglify:my_target']);
21
- }
@@ -1,49 +0,0 @@
1
- (function(window, angular, undefined) {
2
- 'use strict';
3
- angular.module("angularjs.tree",[]).directive('tree', ["$document", function($document) {
4
- return {
5
- restrict: 'A',
6
- scope: {
7
- callback: '&treeCallback'
8
- },
9
- link: function(scope, elem) {
10
- angular.forEach(angular.element(elem).children(), function(value, key){
11
-
12
- var btn = angular.element(value)[0].querySelector("a");
13
- var menu = angular.element(value)[0].querySelector(".treeview-menu");
14
- var isActive = angular.element(value).hasClass('active');
15
-
16
- //initialize already active menus
17
- if (isActive)
18
- {
19
- angular.element(menu).css('display', 'block');
20
- }
21
- else
22
- {
23
- angular.element(menu).css('display', 'none');
24
- }
25
-
26
- if (menu != null)
27
- {
28
- //open or close the sub menu on link click
29
- angular.element(btn).bind("click", function(e){
30
- e.preventDefault();
31
- if (isActive) {
32
- //close sub menu
33
- angular.element(menu).css('display', 'none');
34
- isActive = false;
35
- angular.element(btn).parent("li").removeClass("active");
36
- } else {
37
- //open sub menu
38
- angular.element(menu).css('display', 'block');
39
- isActive = true;
40
- angular.element(btn).parent("li").addClass("active");
41
- }
42
- scope.callback({event: e});
43
- });
44
- }
45
- });
46
- }
47
- }
48
- }]);
49
- })(window, window.angular);