From daf11c2c35270a51f29ffd58d85bda46e146b944 Mon Sep 17 00:00:00 2001 From: "Martin@MBP" Date: Sat, 28 Jun 2014 17:00:54 +0200 Subject: [PATCH] New option dnd.focusOnClick --- CHANGELOG.md | 7 +++++-- demo/sample-ext-dnd.html | 4 +++- src/jquery.fancytree.dnd.js | 21 +++++++++++++++++++++ 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5fa1c112..f8938a44 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,11 @@ # 2.2.0 / Unreleased * [Improved] #245 tree.generateInput() now returns data using PHPs array convention, i.e. by appending brackets to the name: 'ft_1[]'. - * [Fixed] #250: Children lazy empty nodes remain checked when parent is unchecked with hierarchical multi-selection - + * [Fixed] #250: Children lazy empty nodes remain checked when parent is + unchecked with hierarchical multi-selection + * [Added] Option dnd.focusOnClick sets focus to tree widget, even when dragging + is enabled + * [Added] node.info() # 2.1.0 / 2014-05-29 * [Added] #210: [ext-persist] optionally store information in sessionStorage or localStorage diff --git a/demo/sample-ext-dnd.html b/demo/sample-ext-dnd.html index 5b1bb828..5980790d 100644 --- a/demo/sample-ext-dnd.html +++ b/demo/sample-ext-dnd.html @@ -42,13 +42,15 @@ // and pass the tree options as an argument to the fancytree() function: $("#tree").fancytree({ extensions: ["dnd"], + // titlesTabbable: true, source: { url: "ajax-tree-fs.json" }, dnd: { + autoExpandMS: 400, + focusOnClick: true, preventVoidMoves: true, // Prevent dropping nodes 'before self', etc. preventRecursiveMoves: true, // Prevent dropping nodes on own descendants - autoExpandMS: 400, dragStart: function(node, data) { /** This function MUST be defined to enable dragging for the tree. * Return false to cancel dragging of node. diff --git a/src/jquery.fancytree.dnd.js b/src/jquery.fancytree.dnd.js index 0ded1a3e..1650c9c6 100644 --- a/src/jquery.fancytree.dnd.js +++ b/src/jquery.fancytree.dnd.js @@ -204,6 +204,7 @@ $.ui.fancytree.registerExtension({ autoExpandMS: 1000, // Expand nodes after n milliseconds of hovering. preventVoidMoves: true, // Prevent dropping nodes 'before self', etc. preventRecursiveMoves: true, // Prevent dropping nodes on own descendants + focusOnClick: false, // Focus, although draggable cancels mousedown event (#270) dragEnter: null, // Callback(targetNode, data) dragOver: null, // Callback(targetNode, data) dragDrop: null, // Callback(targetNode, data) @@ -216,6 +217,20 @@ $.ui.fancytree.registerExtension({ treeInit: function(ctx){ var tree = ctx.tree; this._super(ctx); + // issue #270: draggable eats mousedown events + if( tree.options.dnd.dragStart ){ + tree.$container.on("mousedown", function(event){ + if( !tree.hasFocus() && ctx.options.dnd.focusOnClick ) { + var node = $.ui.fancytree.getNode(event); + node.debug("Re-enable focus that was prevented by jQuery UI draggable."); + // node.setFocus(); + // $(node.span).closest(":tabbable").focus(); + // $(event.target).trigger("focus"); + // $(event.target).closest(":tabbable").trigger("focus"); + $(event.target).closest(":tabbable").focus(); + } + }); + } _initDragAndDrop(tree); }, /* Override key handler in order to cancel dnd on escape.*/ @@ -226,6 +241,12 @@ $.ui.fancytree.registerExtension({ } return this._super(ctx); }, + nodeClick: function(ctx) { + // if( ctx.options.dnd.dragStart ){ + // ctx.tree.$container.focus(); + // } + return this._super(ctx); + }, /* Display drop marker according to hitMode ('after', 'before', 'over', 'out', 'start', 'stop'). */ _setDndStatus: function(sourceNode, targetNode, helper, hitMode, accept) { var posOpts,