ncbo/bioportal_web_ui

View on GitHub
app/assets/javascripts/ontologies.js

Summary

Maintainability
A
0 mins
Test Coverage
/* Ontology viewing */

jQuery('.ontologies.show').ready(function() {

  var ontologyVisitsChartCanvas = document.getElementById('visits_chart');

  if (ontologyVisitsChartCanvas) {
    var labels = JSON.parse(ontologyVisitsChartCanvas.dataset.labels);
    var visits = JSON.parse(ontologyVisitsChartCanvas.dataset.visits);
    var context = ontologyVisitsChartCanvas.getContext('2d');

    var ontologyVisitsChart = new Chart(context, {
      type: 'line',
      data: {
        labels: labels,
        datasets: [{
          label: 'Visits',
          data: visits,
          backgroundColor: 'rgba(151, 187, 205, 0.2)',
          borderColor: 'rgba(151, 187, 205, 1)',
          pointBorderColor: 'rgba(151, 187, 205, 1)',
          pointBackgroundColor: 'rgba(151, 187, 205, 1)',
        }]
      },      
      options: { 
        responsive: true,
        legend: {
          display: false
        },
        scales: {
          yAxes: [{
            ticks: {
              beginAtZero: false,
              callback: function(value, index, values) {
                return numberWithCommas(value);
              }
            }
          }]
        },
        tooltips: {
          displayColors: false,
          callbacks: {
            label: function(tooltipItem, data) {
              return numberWithCommas(tooltipItem.yLabel);
            }
          }
        }
      }
    });
  }
});

/* Ontology creation & editing */

function hideAllRestrictions() {
  jQuery(".viewing_restriction_disabled").attr("disabled", true);
  jQuery("div.viewing_restriction_types").addClass("hidden");
}

function showRestrictionPrivate() {
  jQuery("#ontology_acl").removeAttr("disabled");
  jQuery("#viewingRestrictionsPrivate").removeClass("hidden");
}

function showRestrictionLicensed() {
  jQuery("#ontology_licenseInformation").removeAttr("disabled");
  jQuery("#viewingRestrictionsLicensed").removeClass("hidden");
}

jQuery(document).ready(function() {

  // Wire up options for restriction how an ontology is viewed
  jQuery("#ontology_viewingRestriction").change(function(){
    var select = jQuery(this);
    if (select.val() == "private") {
      hideAllRestrictions()
      showRestrictionPrivate();
    } else if (select.val() == "licensed") {
      hideAllRestrictions();
      showRestrictionLicensed();
    } else if (select.val() == "public") {
      hideAllRestrictions();
    }
  });

  // Make sure you can see the account select if the select list has private selected
  if (jQuery("#ontology_viewingRestriction").val() == "private") {
    showRestrictionPrivate();
  } else if (jQuery("#ontology_viewingRestriction").val() == "licensed") {
    showRestrictionLicensed();
  }

  jQuery("#ontology_isView").live("click", function(){
    console.log(jQuery("#ontology_isView").is(":checked"))
    if (jQuery("#ontology_isView").is(":checked")) {
      jQuery("#ontology_viewOf").removeAttr('disabled').trigger("chosen:updated");
    } else {
      jQuery("#ontology_viewOf").attr('disabled', true).trigger("chosen:updated");
    }
  });

  jQuery('#ontology-browse-help').on('click', bpPopWindow);

  // Wire up chosen selectors
  jQuery("#ontology_administeredBy").chosen({width: '100%'});
  jQuery("#ontology_acl").chosen({width: '100%'});
  jQuery("#ontology_hasDomain").chosen({width: '100%'});

  // Make acronym upcase as you type
  jQuery("#ontology_acronym").on('input', function(e) {
    var input = $(this);
    var start = input[0].selectionStart;
    $(this).val(function (_, val) {
      return val.toUpperCase();
    });
    input[0].selectionStart = input[0].selectionEnd = start;
  });

  // Check acronym as you type
  var acronyms = jQuery("#ontology_acronym").data("acronyms");
  jQuery("#ontology_acronym").on('input', function(e) {
    var $this = $(this);
    var errors = [];
    var errorHTML = "";

    if ($this.val().match("^[^a-z^A-Z]{1}")) {
      errors.push("Acronym must start with a letter");
    }

    if ($this.val().match("[^-_0-9a-zA-Z]")) {
      errors.push("Acronym must only contain the folowing characters: -, _, letters, and numbers");
    }

    if ($this.val().match(".{17,}")) {
      errors.push("Acronym must be sixteen characters or less");
    }

    if (acronyms.indexOf($this.val()) > -1) {
      errors.push("Acronym already in use");
    }

    if (errors.length > 0) {
      errorHTML = "<li>" + errors.join("</li><li>") + "</li>";
    }

    jQuery("#acronym_errors").html(errorHTML);
  });

  jQuery("#ontologyForm").validate({
    errorClass: "ontologyFormError",
    errorElement: "div",
    rules: {
      "ontology[name]": "required",
      "ontology[acronym]": "required",
    },
    messages: {
      "ontology[name]": "Please enter a name",
      "ontology[acronym]": "Please enter an acronym",
    },
  });
});