UNPKG

jquery.fancytree

Version:

JavaScript tree view / tree grid plugin with support for keyboard, inline editing, filtering, checkboxes, drag'n'drop, and lazy loading

123 lines (111 loc) 3.37 kB
/*! * jquery.fancytree.multi.js * * Allow multiple selection of nodes by mouse or keyboard. * (Extension module for jquery.fancytree.js: https://github.com/mar10/fancytree/) * * Copyright (c) 2008-2018, Martin Wendt (http://wwWendt.de) * * Released under the MIT license * https://github.com/mar10/fancytree/wiki/LicenseInfo * * @version 2.30.0 * @date 2018-09-02T15:42:49Z */ ;(function( factory ) { if ( typeof define === "function" && define.amd ) { // AMD. Register as an anonymous module. define( [ "jquery", "./jquery.fancytree" ], factory ); } else if ( typeof module === "object" && module.exports ) { // Node/CommonJS require("./jquery.fancytree"); module.exports = factory(require("jquery")); } else { // Browser globals factory( jQuery ); } }( function( $ ) { "use strict"; /******************************************************************************* * Private functions and variables */ // var isMac = /Mac/.test(navigator.platform); /******************************************************************************* * Extension code */ $.ui.fancytree.registerExtension({ name: "multi", version: "2.30.0", // Default options for this extension. options: { allowNoSelect: false, // mode: "sameParent", // // Events: // beforeSelect: $.noop // Return false to prevent cancel/save (data.input is available) }, treeInit: function(ctx){ this._superApply(arguments); this.$container.addClass("fancytree-ext-multi"); if( ctx.options.selectMode === 1 ) { $.error("Fancytree ext-multi: selectMode: 1 (single) is not compatible."); } }, nodeClick: function(ctx) { var //pluginOpts = ctx.options.multi, tree = ctx.tree, node = ctx.node, activeNode = tree.getActiveNode() || tree.getFirstChild(), isCbClick = ctx.targetType === "checkbox", isExpanderClick = ctx.targetType === "expander", eventStr = $.ui.fancytree.eventToString(ctx.originalEvent); switch( eventStr ) { case "click": if( isExpanderClick ) { break; } // Default handler will expand/collapse if( !isCbClick ) { tree.selectAll(false); // Select clicked node (radio-button mode) node.setSelected(); } // Default handler will toggle checkbox clicks and activate break; case "shift+click": // node.debug("click") tree.visitRows(function(n){ // n.debug("click2", n===node, node) n.setSelected(); if( n === node ) { return false; } }, { start: activeNode, reverse: activeNode.isBelowOf(node) }); break; case "ctrl+click": case "meta+click": // Mac: [Command] node.toggleSelected(); return; } return this._superApply(arguments); }, nodeKeydown: function(ctx) { var tree = ctx.tree, node = ctx.node, eventStr = $.ui.fancytree.eventToString(ctx.originalEvent); switch( eventStr ) { case "up": case "down": tree.selectAll(false); node.navigate(event.which, true); tree.getActiveNode().setSelected(); break; case "shift+up": case "shift+down": node.navigate(event.which, true); tree.getActiveNode().setSelected(); break; } return this._superApply(arguments); } }); // Value returned by `require('jquery.fancytree..')` return $.ui.fancytree; })); // End of closure