181 lines
4.9 KiB
JavaScript
181 lines
4.9 KiB
JavaScript
/*if ($('.tree > ul') && !mytreebranch) {
|
|
|
|
var mytreebranch = $('.tree').find('li:has(ul)').addClass('parent_li').attr('role', 'treeitem').find(' > span').attr('title', 'Collapse this branch');
|
|
|
|
$('.tree > ul').attr('role', 'tree').find('ul').attr('role', 'group');
|
|
mytreebranch.on('click', function (e) {
|
|
var children = $(this).parent('li.parent_li').find(' > ul > li');
|
|
if (children.is(':visible')) {
|
|
children.hide('fast');
|
|
$(this).attr('title', 'Expand this branch').find(' > i').addClass('icon-plus-sign').removeClass('icon-minus-sign');
|
|
}
|
|
else {
|
|
children.show('fast');
|
|
$(this).attr('title', 'Collapse this branch').find(' > i').addClass('icon-minus-sign').removeClass('icon-plus-sign');
|
|
}
|
|
e.stopPropagation();
|
|
});
|
|
|
|
}*/
|
|
|
|
|
|
/**
|
|
* A jQuery plugin boilerplate.
|
|
* Author: Jonathan Nicol @f6design
|
|
*/
|
|
;(function($) {
|
|
// Change this to your plugin name.
|
|
var pluginName = 'treeView';
|
|
|
|
/**
|
|
* Plugin object constructor.
|
|
* Implements the Revealing Module Pattern.
|
|
*/
|
|
function Plugin(element, options) {
|
|
// References to DOM and jQuery versions of element.
|
|
var el = element;
|
|
var $el = $(element);
|
|
options = $.extend({}, $.fn[pluginName].defaults, options);
|
|
|
|
/**
|
|
* Initialize plugin.
|
|
*/
|
|
function init() {
|
|
// Add any initialization logic here...
|
|
|
|
var mytreebranch = $('.tree').find('li:has(ul)').addClass('parent_li').attr('role', 'treeitem').find(' > span').attr('title', 'Collapse this branch');
|
|
|
|
$('.tree > ul').attr('role', 'tree').find('ul').attr('role', 'group');
|
|
mytreebranch.on('click', function (e) {
|
|
var children = $(this).parent('li.parent_li').find(' > ul > li');
|
|
if (children.is(':visible')) {
|
|
children.hide('fast');
|
|
$(this).attr('title', 'Expand this branch').find(' > i').addClass('icon-plus-sign').removeClass('icon-minus-sign');
|
|
}
|
|
else {
|
|
children.show('fast');
|
|
$(this).attr('title', 'Collapse this branch').find(' > i').addClass('icon-minus-sign').removeClass('icon-plus-sign');
|
|
}
|
|
e.stopPropagation();
|
|
});
|
|
|
|
hook('onInit');
|
|
}
|
|
|
|
/**
|
|
* Example Public Method
|
|
*/
|
|
function fooPublic() {
|
|
// Code goes here...
|
|
}
|
|
|
|
/**
|
|
* Get/set a plugin option.
|
|
* Get usage: $('#el').demoplugin('option', 'key');
|
|
* Set usage: $('#el').demoplugin('option', 'key', value);
|
|
*/
|
|
function option (key, val) {
|
|
if (val) {
|
|
options[key] = val;
|
|
} else {
|
|
return options[key];
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Destroy plugin.
|
|
* Usage: $('#el').demoplugin('destroy');
|
|
*/
|
|
function destroy() {
|
|
// Iterate over each matching element.
|
|
$el.each(function() {
|
|
var el = this;
|
|
var $el = $(this);
|
|
|
|
// Add code to restore the element to its original state...
|
|
|
|
hook('onDestroy');
|
|
// Remove Plugin instance from the element.
|
|
$el.removeData('plugin_' + pluginName);
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Callback hooks.
|
|
* Usage: In the defaults object specify a callback function:
|
|
* hookName: function() {}
|
|
* Then somewhere in the plugin trigger the callback:
|
|
* hook('hookName');
|
|
*/
|
|
function hook(hookName) {
|
|
if (options[hookName] !== undefined) {
|
|
// Call the user defined function.
|
|
// Scope is set to the jQuery element we are operating on.
|
|
options[hookName].call(el);
|
|
}
|
|
}
|
|
|
|
// Initialize the plugin instance.
|
|
init();
|
|
|
|
// Expose methods of Plugin we wish to be public.
|
|
return {
|
|
option: option,
|
|
destroy: destroy,
|
|
fooPublic: fooPublic
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Plugin definition.
|
|
*/
|
|
$.fn[pluginName] = function(options) {
|
|
// If the first parameter is a string, treat this as a call to
|
|
// a public method.
|
|
if (typeof arguments[0] === 'string') {
|
|
var methodName = arguments[0];
|
|
var args = Array.prototype.slice.call(arguments, 1);
|
|
var returnVal;
|
|
this.each(function() {
|
|
// Check that the element has a plugin instance, and that
|
|
// the requested public method exists.
|
|
if ($.data(this, 'plugin_' + pluginName) && typeof $.data(this, 'plugin_' + pluginName)[methodName] === 'function') {
|
|
// Call the method of the Plugin instance, and Pass it
|
|
// the supplied arguments.
|
|
returnVal = $.data(this, 'plugin_' + pluginName)[methodName].apply(this, args);
|
|
} else {
|
|
throw new Error('Method ' + methodName + ' does not exist on jQuery.' + pluginName);
|
|
}
|
|
});
|
|
if (returnVal !== undefined){
|
|
// If the method returned a value, return the value.
|
|
return returnVal;
|
|
} else {
|
|
// Otherwise, returning 'this' preserves chainability.
|
|
return this;
|
|
}
|
|
// If the first parameter is an object (options), or was omitted,
|
|
// instantiate a new instance of the plugin.
|
|
} else if (typeof options === "object" || !options) {
|
|
return this.each(function() {
|
|
// Only allow the plugin to be instantiated once.
|
|
if (!$.data(this, 'plugin_' + pluginName)) {
|
|
$.data(this, 'plugin_' + pluginName, new Plugin(this, options));
|
|
}
|
|
});
|
|
}
|
|
};
|
|
|
|
// Default plugin options.
|
|
$.fn[pluginName].defaults = {
|
|
onInit: function() {},
|
|
onDestroy: function() {},
|
|
element: $('.tree > ul')
|
|
};
|
|
|
|
})(jQuery);
|
|
|
|
|
|
$('.tree').treeView({
|
|
element: $('.tree > ul')
|
|
}); |