Showing
3 changed files
with
73 additions
and
8 deletions
This diff is collapsed. Click to expand it.
... | @@ -339,6 +339,73 @@ function appReloadForm(resourceURI, queryGraphURI, linkElementId) { | ... | @@ -339,6 +339,73 @@ function appReloadForm(resourceURI, queryGraphURI, linkElementId) { |
339 | 339 | ||
340 | 340 | ||
341 | /** | 341 | /** |
342 | + * Selects a given node in a given tree. | ||
343 | + * Will expand if necessary, using a server-side shortest path algorithm. | ||
344 | + * @param treeId the id of the tree | ||
345 | + * @param nodeURI the URI of the resource to select | ||
346 | + */ | ||
347 | +function appSelectTreeNode(treeId, nodeURI) { | ||
348 | + | ||
349 | + // TODO: Currently this only works on the Tree that was created last | ||
350 | + // but not if multiple trees are on a page | ||
351 | + | ||
352 | + var tree = $('#' + treeId); | ||
353 | + var dataProviderURI = tree.attr('treedataprovider'); | ||
354 | + if(!dataProviderURI) { | ||
355 | + alert('Error: Element with id ' + treeId + ' does not have treedataprovider attribute'); | ||
356 | + return; | ||
357 | + } | ||
358 | + | ||
359 | + var rootURI = tree.attr('treeroot'); | ||
360 | + | ||
361 | + // Do nothing if it's already selected | ||
362 | + var sel = tree.jstree('get_selected'); | ||
363 | + if(sel) { | ||
364 | + if(sel.attr('resource') == nodeURI) { | ||
365 | + return; | ||
366 | + } | ||
367 | + } | ||
368 | + | ||
369 | + // Load path to root from the server and then call helper function | ||
370 | + var data = { | ||
371 | + _format: 'json', | ||
372 | + _viewClass: 'app:TreeShortestPathCallback', | ||
373 | + dataProvider: '<' + dataProviderURI + '>', | ||
374 | + node: '<' + nodeURI + '>' | ||
375 | + }; | ||
376 | + if(rootURI) { | ||
377 | + data.root = '<' + rootURI + '>'; | ||
378 | + } | ||
379 | + $.get(uispinServlet, data, function(path) { | ||
380 | + appSelectTreeNodeHelper(tree, tree, path, 0); | ||
381 | + }); | ||
382 | +} | ||
383 | + | ||
384 | + | ||
385 | +// Private helper function - walks an array, expanding nodes along the way | ||
386 | +function appSelectTreeNodeHelper(tree, node, path, index) { | ||
387 | + | ||
388 | + var next = path[index]; | ||
389 | + | ||
390 | + node.children("ul").children("li").each(function(i, o) { | ||
391 | + var child = $(o); | ||
392 | + if(child.attr('resource') == next) { | ||
393 | + if(index == path.length - 1) { | ||
394 | + // End reached: select this node | ||
395 | + tree.jstree('select_node', child, true); | ||
396 | + child[0].scrollIntoView(); | ||
397 | + } | ||
398 | + else { | ||
399 | + tree.jstree('open_node', child, function() { | ||
400 | + appSelectTreeNodeHelper(tree, child, path, index + 1); | ||
401 | + }); | ||
402 | + } | ||
403 | + } | ||
404 | + }); | ||
405 | +} | ||
406 | + | ||
407 | + | ||
408 | +/** | ||
342 | * Submits a form and switches it to viewing mode when done. | 409 | * Submits a form and switches it to viewing mode when done. |
343 | * @param form the id of the form | 410 | * @param form the id of the form |
344 | * @param servlet the optional name of the servlet | 411 | * @param servlet the optional name of the servlet | ... | ... |
... | @@ -5,8 +5,7 @@ | ... | @@ -5,8 +5,7 @@ |
5 | ui:view="{= ?dataProvider }" | 5 | ui:view="{= ?dataProvider }" |
6 | arg:root="{= ?root }"> | 6 | arg:root="{= ?root }"> |
7 | 7 | ||
8 | - <!-- The div that will be turned into a jsTree below --> | 8 | + <div id="{= ?id }" treedataprovider="{= ?dataProvider }" treeroot="{= ?root }"/> |
9 | - <div id="{= ?id }" /> | ||
10 | 9 | ||
11 | <script type="text/javascript"> | 10 | <script type="text/javascript"> |
12 | $(function () { | 11 | $(function () { |
... | @@ -15,12 +14,7 @@ | ... | @@ -15,12 +14,7 @@ |
15 | "plugins" : [ | 14 | "plugins" : [ |
16 | "themes", | 15 | "themes", |
17 | "json_data", | 16 | "json_data", |
18 | - "ui", | 17 | + "ui" ], |
19 | - "crrm", | ||
20 | - "cookies", | ||
21 | - "search", | ||
22 | - "types", | ||
23 | - "hotkeys" ], | ||
24 | 18 | ||
25 | "json_data" : { | 19 | "json_data" : { |
26 | "ajax" : { | 20 | "ajax" : { |
... | @@ -40,6 +34,10 @@ | ... | @@ -40,6 +34,10 @@ |
40 | 34 | ||
41 | "themes" : { | 35 | "themes" : { |
42 | "theme" : "classic" | 36 | "theme" : "classic" |
37 | + }, | ||
38 | + | ||
39 | + "ui": { | ||
40 | + "select_limit": 1 | ||
43 | } | 41 | } |
44 | }); | 42 | }); |
45 | }); | 43 | }); | ... | ... |
-
Please register or login to post a comment