xref: /webtrees/resources/views/modules/descendancy/sidebar.phtml (revision 3f0247b283a74c64ac885446380ea81de9cf779e)
1<?php
2
3use Fisharebest\Webtrees\I18N;
4use Fisharebest\Webtrees\Tree;
5use Fisharebest\Webtrees\View;
6
7/**
8 * @var string $individual_list
9 * @var Tree   $tree
10 */
11
12?>
13
14<form method="post" action="<?= e(route('module', ['module' => 'descendancy', 'action' => 'Descendants', 'tree' => $tree->name()])) ?>" onsubmit="return false;">
15    <input type="search" name="sb_desc_name" id="sb_desc_name" placeholder="<?= I18N::translate('Search') ?>">
16
17    <?= csrf_field() ?>
18</form>
19
20<div id="sb_desc_content">
21    <ul>
22        <?= $individual_list ?>
23    </ul>
24</div>
25
26<?php View::push('javascript') ?>
27<script>
28  function dsearchQ() {
29    var query = $("#sb_desc_name").val();
30    if (query.length>1) {
31      $("#sb_desc_content").load(<?= json_encode(route('module', ['module' => 'descendancy', 'action' => 'Search', 'tree' => $tree->name(), 'search' => '']), JSON_THROW_ON_ERROR) ?> + encodeURIComponent(query));
32    }
33  }
34
35  $("#sb_desc_name").focus(function(){this.select();});
36  $("#sb_desc_name").blur(function(){if (this.value === "") this.value="<?= I18N::translate('Search') ?>";});
37  var dtimerid = null;
38  $("#sb_desc_name").keyup(function(e) {
39    if (dtimerid) window.clearTimeout(dtimerid);
40    dtimerid = window.setTimeout("dsearchQ()", 500);
41  });
42
43  $("#sb_desc_content").on("click", ".sb_desc_indi", function() {
44    var self = $(this),
45        state = self.children(".plusminus"),
46        target = self.siblings("div");
47    if(state.hasClass("icon-plus")) {
48      if (jQuery.trim(target.html())) {
49        target.show("fast"); // already got content so just show it
50      } else if (this.dataset.wtHref !== "#") {
51        target
52          .hide()
53          .load(this.dataset.wtHref, function(response, status, xhr) {
54            if(status === "success" && response !== "") {
55              target.show("fast");
56            }
57          })
58      }
59    } else {
60      target.hide("fast");
61    }
62    state.toggleClass("icon-minus icon-plus");
63    return false;
64  });
65</script>
66<?php View::endpush() ?>
67