You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

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')
});