You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
320 lines
8.4 KiB
320 lines
8.4 KiB
/* ------------------------------------------------------------------------------ |
|
* |
|
* # Dynamic tree views |
|
* |
|
* Specific JS code additions for extra_trees.html page |
|
* |
|
* Version: 1.0 |
|
* Latest update: Aug 1, 2015 |
|
* |
|
* ---------------------------------------------------------------------------- */ |
|
|
|
$(function() { |
|
|
|
|
|
// Basic setup |
|
// ------------------------------ |
|
|
|
// Basic example |
|
$(".tree-default").fancytree({ |
|
init: function(event, data) { |
|
$('.has-tooltip .fancytree-title').tooltip(); |
|
} |
|
}); |
|
|
|
|
|
// Load JSON data |
|
$(".tree-ajax").fancytree({ |
|
source: { |
|
url: "assets/demo_data/fancytree/fancytree.json" |
|
}, |
|
init: function(event, data) { |
|
$('.has-tooltip .fancytree-title').tooltip(); |
|
} |
|
}); |
|
|
|
|
|
// Embed JSON data |
|
$(".tree-json").fancytree({ |
|
init: function(event, data) { |
|
$('.has-tooltip .fancytree-title').tooltip(); |
|
} |
|
}); |
|
|
|
|
|
// Child counter |
|
$(".tree-child-count").fancytree({ |
|
extensions: ["childcounter"], |
|
source: { |
|
url: "assets/demo_data/fancytree/fancytree.json" |
|
}, |
|
childcounter: { |
|
deep: true, |
|
hideZeros: true, |
|
hideExpanded: true |
|
}, |
|
init: function(event, data) { |
|
$('.has-tooltip .fancytree-title').tooltip(); |
|
} |
|
}); |
|
|
|
|
|
// Drag and drop support |
|
$(".tree-drag").fancytree({ |
|
extensions: ["dnd"], |
|
source: { |
|
url: "assets/demo_data/fancytree/fancytree.json" |
|
}, |
|
dnd: { |
|
autoExpandMS: 400, |
|
focusOnClick: true, |
|
preventVoidMoves: true, // Prevent dropping nodes 'before self', etc. |
|
preventRecursiveMoves: true, // Prevent dropping nodes on own descendants |
|
dragStart: function(node, data) { |
|
return true; |
|
}, |
|
dragEnter: function(node, data) { |
|
return true; |
|
}, |
|
dragDrop: function(node, data) { |
|
|
|
// This function MUST be defined to enable dropping of items on the tree. |
|
data.otherNode.moveTo(node, data.hitMode); |
|
} |
|
}, |
|
init: function(event, data) { |
|
$('.has-tooltip .fancytree-title').tooltip(); |
|
} |
|
}); |
|
|
|
|
|
// Editable nodes |
|
$(".tree-editable").fancytree({ |
|
extensions: ["edit"], |
|
source: { |
|
url: "assets/demo_data/fancytree/fancytree.json" |
|
}, |
|
edit: { |
|
adjustWidthOfs: 0, |
|
inputCss: {minWidth: "0"}, |
|
triggerStart: ["f2", "dblclick", "shift+click", "mac+enter"], |
|
save: function(event, data) { |
|
alert("save " + data.input.val()); // Save data.input.val() or return false to keep editor open |
|
} |
|
} |
|
}); |
|
|
|
|
|
|
|
// Selectable nodes |
|
// ------------------------------ |
|
|
|
// Single selection |
|
$(".tree-radio").fancytree({ |
|
checkbox: true, |
|
selectMode: 1, |
|
source: { |
|
url: "assets/demo_data/fancytree/fancytree.json" |
|
} |
|
}); |
|
|
|
|
|
// Multiple selection |
|
$(".tree-checkbox").fancytree({ |
|
checkbox: true, |
|
selectMode: 2, |
|
source: { |
|
url: "assets/demo_data/fancytree/fancytree.json" |
|
} |
|
}); |
|
|
|
|
|
// Disable selections |
|
$(".tree-checkbox-options").fancytree({ |
|
checkbox: true, |
|
selectMode: 2 |
|
}); |
|
|
|
|
|
// Hierarchical select |
|
$(".tree-checkbox-hierarchical").fancytree({ |
|
checkbox: true, |
|
selectMode: 3 |
|
}); |
|
|
|
|
|
// |
|
// Toggle checkbox state |
|
// |
|
|
|
// Initialize |
|
$(".tree-checkbox-toggle").fancytree({ |
|
checkbox: true, |
|
selectMode: 2, |
|
source: { |
|
url: "assets/demo_data/fancytree/fancytree.json" |
|
} |
|
}); |
|
|
|
// Initialize switchery toggle |
|
var switcherySelect = document.querySelector('.switchery-select'); |
|
var initSelect = new Switchery(switcherySelect); |
|
|
|
// Change checkbox states |
|
switcherySelect.onchange = function() { |
|
if(switcherySelect.checked) { |
|
$(".tree-checkbox-toggle").fancytree("getTree").visit(function(node){ |
|
node.setSelected(true); |
|
}); |
|
return false; |
|
} |
|
else { |
|
$(".tree-checkbox-toggle").fancytree("getTree").visit(function(node){ |
|
node.setSelected(false); |
|
}); |
|
return false; |
|
} |
|
}; |
|
|
|
|
|
|
|
// Advanced examples |
|
// ------------------------------ |
|
|
|
// |
|
// Toggle state |
|
// |
|
|
|
// Initialize switchery toggle |
|
var switchery = document.querySelector('#tree-disabled'); |
|
var init = new Switchery(switchery); |
|
|
|
// Do something on state change |
|
switchery.onchange = function() { |
|
if(switchery.checked) { |
|
$(".tree-toggle").fancytree("disable"); |
|
} |
|
else { |
|
$(".tree-toggle").fancytree("enable"); |
|
} |
|
}; |
|
|
|
// Initialize |
|
$(".tree-toggle").fancytree({ |
|
source: { |
|
url: "assets/demo_data/fancytree/fancytree.json" |
|
}, |
|
init: function(event, data) { |
|
$('.has-tooltip .fancytree-title').tooltip(); |
|
} |
|
}); |
|
|
|
|
|
// |
|
// Sorting |
|
// |
|
|
|
// Initialize |
|
$(".tree-sorting").fancytree(); |
|
|
|
// Sort tree |
|
$('.sort-tree').on('click', function() { |
|
var node = $(".tree-sorting").fancytree("getRootNode"); |
|
node.sortChildren(null, true); |
|
}); |
|
|
|
// Sort active nodes |
|
$('.sort-branch').on('click', function() { |
|
var node = $(".tree-sorting").fancytree("getActiveNode"); |
|
|
|
// Custom compare function (optional) that sorts case insensitive |
|
var cmp = function(a, b) { |
|
a = a.title.toLowerCase(); |
|
b = b.title.toLowerCase(); |
|
return a > b ? 1 : a < b ? -1 : 0; |
|
}; |
|
node.sortChildren(cmp, false); |
|
}); |
|
|
|
|
|
// |
|
// Tree persistence |
|
// |
|
|
|
// Initialize |
|
$(".tree-persistence").fancytree({ |
|
extensions: ["persist"], |
|
source: { |
|
url: "assets/demo_data/fancytree/fancytree.json" |
|
}, |
|
checkbox: true, |
|
persist: { |
|
overrideSource: false, // true: cookie takes precedence over `source` data attributes. |
|
store: "auto" // 'cookie', 'local': use localStore, 'session': sessionStore |
|
}, |
|
postProcess: function(event, data) { |
|
var prefix = data.node.getIndexHier() + "."; |
|
$.each(data.response, function(idx, childEntry) { |
|
if( childEntry.key == null ) { |
|
childEntry.key = prefix + (idx + 1); |
|
childEntry.title += " (" + childEntry.key + ")"; |
|
} |
|
}) |
|
} |
|
}); |
|
var tree5 = $(".tree-persistence").fancytree("getTree"); |
|
|
|
// Reset cookies on button click |
|
$('.reset-cookies').on('click', function() { |
|
tree5.clearCookies(); |
|
}); |
|
|
|
|
|
// |
|
// Table tree |
|
// |
|
|
|
$(".tree-table").fancytree({ |
|
extensions: ["table"], |
|
checkbox: true, |
|
table: { |
|
indentation: 20, // indent 20px per node level |
|
nodeColumnIdx: 2, // render the node title into the 2nd column |
|
checkboxColumnIdx: 0 // render the checkboxes into the 1st column |
|
}, |
|
source: { |
|
url: "assets/demo_data/fancytree/fancytree.json" |
|
}, |
|
lazyLoad: function(event, data) { |
|
data.result = {url: "ajax-sub2.json"} |
|
}, |
|
renderColumns: function(event, data) { |
|
var node = data.node, |
|
$tdList = $(node.tr).find(">td"); |
|
|
|
// (index #0 is rendered by fancytree by adding the checkbox) |
|
$tdList.eq(1).text(node.getIndexHier()).addClass("alignRight"); |
|
|
|
// (index #2 is rendered by fancytree) |
|
$tdList.eq(3).text(node.key); |
|
$tdList.eq(4).addClass('text-center').html("<input type='checkbox' class='styled' name='like' value='" + node.key + "'>"); |
|
|
|
// Style checkboxes |
|
$(".styled").uniform({radioClass: 'choice'}); |
|
} |
|
}); |
|
|
|
// Handle custom checkbox clicks |
|
$(".tree-table").delegate("input[name=like]", "click", function (e){ |
|
var node = $.ui.fancytree.getNode(e), |
|
$input = $(e.target); |
|
e.stopPropagation(); // prevent fancytree activate for this row |
|
if($input.is(":checked")){ |
|
alert("like " + $input.val()); |
|
} |
|
else{ |
|
alert("dislike " + $input.val()); |
|
} |
|
}); |
|
|
|
});
|
|
|