Skip to content
Snippets Groups Projects
groups.js 3.04 KiB
Newer Older
$(document).ready(function () {
  function group_type_update() {
    var hosts_selectize = $("#hosts")[0].selectize;
    if ($("#type option:selected").text() == "STATIC") {
      hosts_selectize.enable();
    } else {
      hosts_selectize.clear();
      hosts_selectize.disable();
    }
  }

  // Disable or enable hosts on group type update
  $("#type").on("change", function () {
    group_type_update();
  });

  // Disable or enable hosts on page load depending on group type
  if ($("#groupForm").length || $("#editGroupForm").length) {
    group_type_update();
  }

  if ($("#groupForm").length || $("#editGroupForm").length) {
    var groupVarsEditor = CodeMirror.fromTextArea(vars, {
      lineNumbers: true,
      mode: "yaml",
    });
    groupVarsEditor.setSize(null, 120);
    var handle = cmResize(groupVarsEditor, {
      minHeight: 120,
      resizableWidth: false,
      resizableHeight: true,
  var groups_table = $("#groups_table").DataTable({
    dom:
      "<'row'<'col-sm-12 col-md-6'l><'col-sm-12 col-md-3 text-right'><'col-sm-12 col-md-3'f>>" +
      "<'row'<'col-sm-12'tr>>" +
      "<'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>",
    ajax: {
      url: $SCRIPT_ROOT + "/network/_retrieve_groups",
      type: "POST",
    processing: true,
    serverSide: true,
    searchDelay: 500,
    stateSave: true,
    orderMulti: false,
    aaSorting: [],
    paging: true,
    pagingType: "full_numbers",
    columns: [
      {
        data: "name",
        render: function (data, type, row) {
          // render funtion to create link to group view page
          if (data === null) {
            return data;
          }
          var url = $SCRIPT_ROOT + "/network/groups/view/" + data;
          return '<a href="' + url + '">' + data + "</a>";
      {
        data: "vars",
        render: function (data, type, row) {
          if (data === null) {
            return "";
          }
          return (
            '<pre style="max-width:300px;">' +
            JSON.stringify(data, null, 2) +
            "</pre>"
          );
      { data: "type" },
      {
        data: "children",
        render: function (data, type, row) {
          return data.join(", ");
      {
        data: "hosts",
        render: function (data, type, row) {
          return data.join(", ");

  if ($("#groups_table").length) {
    new $.fn.dataTable.Buttons(groups_table, {
      buttons: [
        {
          text: "Reset",
          className: "btn-outline-secondary",
          action: function (e, dt, node, conf) {
            dt.search("").order([]).draw();
          },
          init: function (api, node, config) {
            $(node).removeClass("btn-secondary");
          },
        },
      ],
    });

    groups_table
      .buttons()
      .container()
      .appendTo("#groups_table_wrapper .col-md-3:eq(0)");

    configure_search_tooltip();