forked from joaonuno/tree-model-js
-
Notifications
You must be signed in to change notification settings - Fork 0
/
TreeModel-min.js
1 lines (1 loc) · 3.09 KB
/
TreeModel-min.js
1
!function(){"use strict";var t;t={};function TreeModel(t){t=t||{};this.config=t;this.config.childrenPropertyName=t.childrenPropertyName||"children";this.config.modelComparatorFn=t.modelComparatorFn||function(){return 0}}TreeModel.prototype.parse=function(t){var r,i,o;if(!(t instanceof Object)){throw new TypeError("Model must be of type object.")}o=new n(this.config,t);if(t[this.config.childrenPropertyName]instanceof Array){t[this.config.childrenPropertyName].sort(this.config.modelComparatorFn);for(r=0,i=t[this.config.childrenPropertyName].length;r<i;r++){e(o,this.parse(t[this.config.childrenPropertyName][r]))}}return o};function e(t,e){e.parent=t;t.children.push(e);return e}function n(t,e){this.config=t;this.model=e;this.children=[]}n.prototype.isRoot=function(){return this.parent===undefined};n.prototype.addChild=function(t){var e;t.parent=this;if(!(this.model[this.config.childrenPropertyName]instanceof Array)){this.model[this.config.childrenPropertyName]=[]}this.model[this.config.childrenPropertyName].push(t.model);this.model[this.config.childrenPropertyName].sort(this.config.modelComparatorFn);e=this.model[this.config.childrenPropertyName].lastIndexOf(t);this.children.splice(e,0,t);return t};n.prototype.getPath=function(){var t=[];!function e(n){t.unshift(n);if(!n.isRoot()){e(n.parent)}}(this);return t};function r(){var e={};if(arguments.length===1){e.fn=arguments[0]}else if(arguments.length===2){if(typeof arguments[0]==="function"){e.fn=arguments[0];e.ctx=arguments[1]}else{e.options=arguments[0];e.fn=arguments[1]}}else{e.options=arguments[0];e.fn=arguments[1];e.ctx=arguments[2]}e.options=e.options||{};if(!e.options.strategy){e.options.strategy="pre"}if(!t[e.options.strategy]){throw new Error("Unknown tree walk strategy. Valid strategies are 'pre' [default], 'post' and 'breadth'.")}return e}n.prototype.walk=function(){var e;e=r.apply(this,arguments);t[e.options.strategy].call(this,e.fn,e.ctx)};t.pre=function i(t,e){var n,r,o;o=t.call(e,this);for(n=0,r=this.children.length;n<r;n++){if(o===false){return false}o=i.call(this.children[n],t,e)}return o};t.post=function o(t,e){var n,r,i;for(n=0,r=this.children.length;n<r;n++){i=o.call(this.children[n],t,e);if(i===false){return false}}i=t.call(e,this);return i};t.breadth=function s(t,e){var n=[this];!function r(){var i,o,s;if(n.length===0){return}s=n.shift();for(i=0,o=s.children.length;i<o;i++){n.push(s.children[i])}if(t.call(e,s)!==false){r()}}()};n.prototype.all=function(){var e,n=[];e=r.apply(this,arguments);t[e.options.strategy].call(this,function(t){if(e.fn.call(e.ctx,t)){n.push(t)}},e.ctx);return n};n.prototype.first=function(){var e,n;e=r.apply(this,arguments);t[e.options.strategy].call(this,function(t){if(e.fn.call(e.ctx,t)){n=t;return false}},e.ctx);return n};n.prototype.drop=function(){var t;if(!this.isRoot()){t=this.parent.children.indexOf(this);this.parent.children.splice(t,1);this.parent.model.children.splice(t,1);this.parent=undefined;delete this.parent}return this};if(typeof exports==="object"){module.exports=TreeModel}else if(typeof define==="function"&&define.amd){define(function(){return TreeModel})}else{this.TreeModel=TreeModel}}.call(this);