tree.js
来源:互联网 发布:php参考文献近两年 编辑:程序博客网 时间:2024/06/05 08:55
千辛万苦,才找到为混淆版的treejs
/*
* Fuel UX Spinner
* https://github.com/ExactTarget/fuelux
* Improved by keenthemes for metronic theme
* Copyright (c) 2012 ExactTarget
* Licensed under the MIT license.
*/
!function ($) {
var Tree = function (element, options) {
this.$element = $(element);
this.options = $.extend({
}, $.fn.tree.defaults, options);
this.$element.on('click', '.tree-item', $.proxy( function(ev) {
this.selectItem(ev.currentTarget);
} ,this));
this.$element.on('click', '.tree-folder-header', $.proxy( function(ev) {
this.selectFolder(ev.currentTarget);
}, this));
this.render();
};
Tree.prototype = {
constructor: Tree,
render: function () {
this.populate(this.$element);
},
populate: function ($el) {
var self = this;
var $parent = $el.parent();
var loader = $parent.find('.tree-loader:eq(0)');
loader.show();
this.options.dataSource.data($el.data(), function (items) {
loader.hide();
$.each( items.data, function(index, value) {
var $entity;
if(value.type === "folder") {
$entity = self.$element.find('.tree-folder:eq(0)').clone().show();
$entity.find('.tree-folder-name').html(value.name);
$entity.find('.tree-loader').html(self.options.loadingHTML);
$entity.find('.tree-folder-header').data(value);
} else if (value.type === "item") {
$entity = self.$element.find('.tree-item:eq(0)').clone().show();
$entity.find('.tree-item-name').html(value.name);
$entity.data(value);
}
// Decorate $entity with data making the element
// easily accessable with libraries like jQuery.
//
// Values are contained within the object returned
// for folders and items as dataAttributes:
//
// {
// name: "An Item",
// type: 'item',
// dataAttributes = {
// 'classes': 'required-item red-text',
// 'data-parent': parentId,
// 'guid': guid
//}
//};
var dataAttributes = value.dataAttributes || [];
$.each(dataAttributes, function(key, value) {
switch (key) {
case 'class':
case 'classes':
case 'className':
$entity.addClass(value);
break;
// id, style, data-*
default:
$entity.attr(key, value);
break;
}
});
if($el.hasClass('tree-folder-header')) {
//这里反复的追加自身的数据-只是用来测试的
//$parent.find('.tree-folder-content:eq(0)').append($entity);
} else {
$el.append($entity);
}
});
// return newly populated folder
self.$element.trigger('loaded', $parent);
});
},
selectItem: function (el) {
var $el = $(el);
var $all = this.$element.find('.tree-selected');
var data = [];
if (this.options.multiSelect) {
$.each($all, function(index, value) {
var $val = $(value);
if($val[0] !== $el[0]) {
data.push( $(value).data() );
}
});
} else if ($all[0] !== $el[0]) {
$all.removeClass('tree-selected')
.find('i').removeClass('fa fa-check').addClass('tree-dot');
data.push($el.data());
}
if (this.options.selectable) {
var eventType = 'selected';
if($el.hasClass('tree-selected')) {
eventType = 'unselected';
$el.removeClass('tree-selected');
$el.find('i').removeClass('fa fa-check').addClass('tree-dot');
} else {
$el.addClass ('tree-selected');
$el.find('i').removeClass('tree-dot').addClass('fa fa-check');
if (this.options.multiSelect) {
data.push( $el.data() );
}
}
}
if(data.length) {
this.$element.trigger('selected', {
info: data
});
}
// Return new list of selected items, the item
// clicked, and the type of event:
$el.trigger('updated', {
info: data,
item: $el,
eventType: eventType
});
},
selectFolder: function (el) {
var $el = $(el);
var $parent = $el.parent();
var $treeFolderContent = $parent.find('.tree-folder-content');
var $treeFolderContentFirstChild = $treeFolderContent.eq(0);
var eventType, classToTarget, classToAdd;
if ($el.find('.fa.fa-folder').length) {
eventType = 'opened';
classToTarget = '.fa.fa-folder';
classToAdd = 'fa fa-folder-open';
$treeFolderContentFirstChild.show();
if (!$treeFolderContent.children().length) {
this.populate($el);
}
} else {
eventType = 'closed';
classToTarget = '.fa.fa-folder-open';
classToAdd = 'fa fa-folder';
$treeFolderContentFirstChild.hide();
if (!this.options.cacheItems) {
$treeFolderContentFirstChild.empty();
}
}
$parent.find(classToTarget).eq(0)
.removeClass('fa fa-folder fa-folder-open')
.addClass(classToAdd);
this.$element.trigger(eventType, $el.data());
},
selectedItems: function () {
var $sel = this.$element.find('.tree-selected');
var data = [];
$.each($sel, function (index, value) {
data.push($(value).data());
});
return data;
},
// collapses open folders
collapse: function () {
var cacheItems = this.options.cacheItems;
// find open folders
this.$element.find('.fa.fa-folder-open').each(function () {
// update icon class
var $this = $(this)
.removeClass('fa fa-folder fa-folder-open')
.addClass('fa fa-folder');
// "close" or empty folder contents
var $parent = $this.parent().parent();
var $folder = $parent.children('.tree-folder-content');
$folder.hide();
if (!cacheItems) {
$folder.empty();
}
});
}
};
// TREE PLUGIN DEFINITION
$.fn.tree = function (option, value) {
var methodReturn;
var $set = this.each(function () {
var $this = $(this);
var data = $this.data('tree');
var options = typeof option === 'object' && option;
if (!data) $this.data('tree', (data = new Tree(this, options)));
if (typeof option === 'string') methodReturn = data[option](value);
});
return (methodReturn === undefined) ? $set : methodReturn;
};
$.fn.tree.defaults = {
selectable: true,
multiSelect: false,
loadingHTML: '<div>Loading...</div>',
cacheItems: true
};
$.fn.tree.Constructor = Tree;
}(window.jQuery);
阅读全文
0 0
- js Tree
- js tree
- Tree.js
- tree.js
- js tree代码下载
- js - Tree of LeftMenu
- js - Tree of Document
- tree.js 使用
- JS-Tree控件总结
- js iframe ExtJs tree
- ext js tree应用
- jeasyui.extensions.tree.js
- D3.js--Tree(树)
- EasyUI JS加载Tree
- Binary Tree Paths - JS
- Binary Tree Preorder -JS
- d3.js tree
- easyUI.js tree
- Android学习笔记二十之Toast吐司、Notification通知、PopupWindow弹出窗
- 前端之js-nodejs
- 使用Retrofit和Okhttp实现网络缓存。无网读缓存,有网根据过期时间重新请求
- jsp的隐含对象
- 下一代WLAN网络干扰管理方法
- tree.js
- nyoj-2357 插塔憋憋乐(贪心)
- 用JS来获取地址栏的属性值;
- 开发中最常用的GitHub上 优秀的 Android 开源项目整理(精品)
- SeaSar2之系统拦截器-yellowcong
- java实现定时任务的三种方法
- HTML 多行文本省略显示代码
- 编程语言中,取余和取模的区别到底是什么?
- 接口性能测试实战小结(附点评)