Uploaded image for project: 'Jenkins'
  1. Jenkins
  2. JENKINS-74483

[benchmark] Extract inline script blocks in org/jenkinsci/plugins/benchmark/core/BenchmarkResultAction/index.jelly

      Note

      While testing this plugin, evaluate whether the third-party libraries in src/main/webapp are compatible with CSP in restrictive mode. The plugin may need to be upgraded from jQuery 1.x to 3.x to fully function in CSP restrictive mode.

      Problems

      == Inline Script Block
      Line: 37
      ----
      <script>jQuery.noConflict();</script>
      ----
      
      == Inline Script Block
      Line: 52
      ----
      <script>
                      // Following form is necessary with jQuery.noConflict() to avoid conflict with prototype.js
                      jQuery(function ($) {
                      <j:if test="${it.HasResult == false}">
                          // Redirect in case no result is selected
                          window.location.href="${it.TablePageURL}";
                      </j:if>
                      $(document).ready(function() {
                      <j:if test="${it.IsNumeral == true}">
                          var chart = new Chart(document.getElementById("line_chart"), {
                              type: 'line',
                              data: {
                                  labels: ${it.ChartLabels},
                                  datasets: [{
                                      data: ${it.ChartData}
                                  }]
                              },
                              options: {
                                  elements: {
                                      line: {
                                          tension: 0
                                      }
                                  },
                                  animation: false,
                                  legend: {
                                      display:    false
                                  },
                                  title: {
                                      display:    true,
                                      text:       '${it.GraphTitle}'
                                  },
                                  scales:{
                                      yAxes:[{
                                          display: true,
                                          ticks: {
                                              callback: function(value, index, values) {
                                                  return parseFloat(value).toFixed(2);
                                              },
                                              autoSkip: true,
                                              maxTicksLimit: 10,
                                              min:        ${it.GraphYMinimum},
                                              max:        ${it.GraphYMaximum}
                                          }
                                      }]
                                  }
                              }
                          });
                      </j:if>
                          var table = $('#rawResults').DataTable( {
                              scrollX:        true,
                              scrollCollapse: true,
                              sDom:           't',
                              ordering:       false,
                              fixedColumns:   {
                                  leftColumns:  1
                              }
                          } );
      
                          var left = $('#rawResults').width();
                          $('#rawResults').scrollLeft(left);
      
                          // Sent ping to the backend to reset the clock that counts down content deletion
                          var BchPub = <st:bind value="${it}"/>
                          setInterval(BchPub.resetClock, 30000); // Every 30s
      
                          BchPub.getBuildSelected( function(t){
                              var build = t.responseObject();
                              var nodes = table.column(build).nodes();
                              nodes.to$$().addClass('highlight');
                              document.getElementById('build_index').innerHTML = build;
                          });
      
                          BchPub.getBuildNumber( function(t){
                              document.getElementById('build_number').innerHTML = t.responseObject();
                              document.getElementById('build_number_2').innerHTML = t.responseObject();
                          });
      
                          BchPub.getResultDetails( function(t){
                              document.getElementById('resultDetails').innerHTML = t.responseObject();
                          });
                          BchPub.getParameters( function(t){
                              var text = t.responseObject();
                              if (!!text){
                                  document.getElementById('parameters').innerHTML = t.responseObject();
                                  $$("#title_parameters").show();
                              }else{
                                  document.getElementById('parameters').innerHTML = "";
                                  $$("#title_parameters").hide();
                              }
                          });
                          $$('.expand_chart').click(function(){
                              $$('#line_chart').slideToggle('fast');
                              if (document.getElementById("icon_chart").getAttribute("number") == 0) {
                                  document.getElementById("icon_chart").src = "${rootURL}/plugin/benchmark/images/sort_both.png";
                                  document.getElementById("icon_chart").setAttribute("number", "1");
                              } else {
                                  document.getElementById("icon_chart").src = "${rootURL}/plugin/benchmark/images/sort_desc.png";
                                  document.getElementById("icon_chart").setAttribute("number", "0");
                              }
                          });
                          $$('.expand_resultDetails').click(function(){
                              $$('#resultDetails').slideToggle('fast');
                              if (document.getElementById("icon_resultDetails").getAttribute("number") == 0) {
                                  document.getElementById("icon_resultDetails").src = "${rootURL}/plugin/benchmark/images/sort_both.png";
                                  document.getElementById("icon_resultDetails").setAttribute("number", "1");
                              } else {
                                  document.getElementById("icon_resultDetails").src = "${rootURL}/plugin/benchmark/images/sort_desc.png";
                                  document.getElementById("icon_resultDetails").setAttribute("number", "0");
                              }
                          });
                          $$('.expand_parameters').click(function(){
                              $$('#parameters').slideToggle('fast');
                              if (document.getElementById("icon_parameters").getAttribute("number") == 0) {
                                  document.getElementById("icon_parameters").src = "${rootURL}/plugin/benchmark/images/sort_both.png";
                                  document.getElementById("icon_parameters").setAttribute("number", "1");
                              } else {
                                  document.getElementById("icon_parameters").src = "${rootURL}/plugin/benchmark/images/sort_desc.png";
                                  document.getElementById("icon_parameters").setAttribute("number", "0");
                              }
                          });
                          $$('.expand_condensedResults').click(function(){
                              $$('#condensedResults').slideToggle('fast');
                              if (document.getElementById("icon_condensedResults").getAttribute("number") == 0) {
                                  document.getElementById("icon_condensedResults").src = "${rootURL}/plugin/benchmark/images/sort_both.png";
                                  document.getElementById("icon_condensedResults").setAttribute("number", "1");
                              } else {
                                  document.getElementById("icon_condensedResults").src = "${rootURL}/plugin/benchmark/images/sort_desc.png";
                                  document.getElementById("icon_condensedResults").setAttribute("number", "0");
                              }
                          });
                          table.on( 'click', 'td', function () {
                              var idx = table.cell( this ).index().column;
                              var curBuild = document.getElementById('build_index').innerHTML;
                              if (idx != curBuild){
                                  if (idx > 0){
                                      var nodes = table.column(curBuild).nodes();
                                      nodes.to$$().removeClass('highlight');
                                      BchPub.setBuildSelected(idx)
                                      setTimeout(function(){
                                          BchPub.getBuildNumber( function(t){
                                              document.getElementById('build_number').innerHTML = t.responseObject();
                                              document.getElementById('build_number_2').innerHTML = t.responseObject();
                                          });
                                          BchPub.getResultDetails( function(t){
                                              document.getElementById('resultDetails').innerHTML = t.responseObject();
                                          });
                                          BchPub.getParameters( function(t){
                                              var text = t.responseObject();
                                              if (!!text){
                                                  document.getElementById('parameters').innerHTML = t.responseObject();
                                                  $$("#title_parameters").show();
                                              }else{
                                                  document.getElementById('parameters').innerHTML = "";
                                                  $$("#title_parameters").hide();
                                              }
                                          });
                                          var newNodes = table.column(idx).nodes();
                                          newNodes.to$$().addClass('highlight');
                                          document.getElementById('build_index').innerHTML = idx;
                                      }, 500);
                                  }
                              }
                          } );
                      } );
                      } );
                  </script>
      ----
      

      Solution

      https://www.jenkins.io/doc/developer/security/csp/#inline-javascript-blocks

          [JENKINS-74483] [benchmark] Extract inline script blocks in org/jenkinsci/plugins/benchmark/core/BenchmarkResultAction/index.jelly

          Basil Crow created issue -
          Basil Crow made changes -
          Assignee Original: Daniel Mercier [ damercie ]
          Basil Crow made changes -
          Description Original: h4. Problems

          {noformat}
          == Inline Script Block
          Line: 37
          ----
          <script>jQuery.noConflict();</script>
          ----

          == Inline Script Block
          Line: 52
          ----
          <script>
                          // Following form is necessary with jQuery.noConflict() to avoid conflict with prototype.js
                          jQuery(function ($) {
                          <j:if test="${it.HasResult == false}">
                              // Redirect in case no result is selected
                              window.location.href="${it.TablePageURL}";
                          </j:if>
                          $(document).ready(function() {
                          <j:if test="${it.IsNumeral == true}">
                              var chart = new Chart(document.getElementById("line_chart"), {
                                  type: 'line',
                                  data: {
                                      labels: ${it.ChartLabels},
                                      datasets: [{
                                          data: ${it.ChartData}
                                      }]
                                  },
                                  options: {
                                      elements: {
                                          line: {
                                              tension: 0
                                          }
                                      },
                                      animation: false,
                                      legend: {
                                          display: false
                                      },
                                      title: {
                                          display: true,
                                          text: '${it.GraphTitle}'
                                      },
                                      scales:{
                                          yAxes:[{
                                              display: true,
                                              ticks: {
                                                  callback: function(value, index, values) {
                                                      return parseFloat(value).toFixed(2);
                                                  },
                                                  autoSkip: true,
                                                  maxTicksLimit: 10,
                                                  min: ${it.GraphYMinimum},
                                                  max: ${it.GraphYMaximum}
                                              }
                                          }]
                                      }
                                  }
                              });
                          </j:if>
                              var table = $('#rawResults').DataTable( {
                                  scrollX: true,
                                  scrollCollapse: true,
                                  sDom: 't',
                                  ordering: false,
                                  fixedColumns: {
                                      leftColumns: 1
                                  }
                              } );

                              var left = $('#rawResults').width();
                              $('#rawResults').scrollLeft(left);

                              // Sent ping to the backend to reset the clock that counts down content deletion
                              var BchPub = <st:bind value="${it}"/>
                              setInterval(BchPub.resetClock, 30000); // Every 30s

                              BchPub.getBuildSelected( function(t){
                                  var build = t.responseObject();
                                  var nodes = table.column(build).nodes();
                                  nodes.to$$().addClass('highlight');
                                  document.getElementById('build_index').innerHTML = build;
                              });

                              BchPub.getBuildNumber( function(t){
                                  document.getElementById('build_number').innerHTML = t.responseObject();
                                  document.getElementById('build_number_2').innerHTML = t.responseObject();
                              });

                              BchPub.getResultDetails( function(t){
                                  document.getElementById('resultDetails').innerHTML = t.responseObject();
                              });
                              BchPub.getParameters( function(t){
                                  var text = t.responseObject();
                                  if (!!text){
                                      document.getElementById('parameters').innerHTML = t.responseObject();
                                      $$("#title_parameters").show();
                                  }else{
                                      document.getElementById('parameters').innerHTML = "";
                                      $$("#title_parameters").hide();
                                  }
                              });
                              $$('.expand_chart').click(function(){
                                  $$('#line_chart').slideToggle('fast');
                                  if (document.getElementById("icon_chart").getAttribute("number") == 0) {
                                      document.getElementById("icon_chart").src = "${rootURL}/plugin/benchmark/images/sort_both.png";
                                      document.getElementById("icon_chart").setAttribute("number", "1");
                                  } else {
                                      document.getElementById("icon_chart").src = "${rootURL}/plugin/benchmark/images/sort_desc.png";
                                      document.getElementById("icon_chart").setAttribute("number", "0");
                                  }
                              });
                              $$('.expand_resultDetails').click(function(){
                                  $$('#resultDetails').slideToggle('fast');
                                  if (document.getElementById("icon_resultDetails").getAttribute("number") == 0) {
                                      document.getElementById("icon_resultDetails").src = "${rootURL}/plugin/benchmark/images/sort_both.png";
                                      document.getElementById("icon_resultDetails").setAttribute("number", "1");
                                  } else {
                                      document.getElementById("icon_resultDetails").src = "${rootURL}/plugin/benchmark/images/sort_desc.png";
                                      document.getElementById("icon_resultDetails").setAttribute("number", "0");
                                  }
                              });
                              $$('.expand_parameters').click(function(){
                                  $$('#parameters').slideToggle('fast');
                                  if (document.getElementById("icon_parameters").getAttribute("number") == 0) {
                                      document.getElementById("icon_parameters").src = "${rootURL}/plugin/benchmark/images/sort_both.png";
                                      document.getElementById("icon_parameters").setAttribute("number", "1");
                                  } else {
                                      document.getElementById("icon_parameters").src = "${rootURL}/plugin/benchmark/images/sort_desc.png";
                                      document.getElementById("icon_parameters").setAttribute("number", "0");
                                  }
                              });
                              $$('.expand_condensedResults').click(function(){
                                  $$('#condensedResults').slideToggle('fast');
                                  if (document.getElementById("icon_condensedResults").getAttribute("number") == 0) {
                                      document.getElementById("icon_condensedResults").src = "${rootURL}/plugin/benchmark/images/sort_both.png";
                                      document.getElementById("icon_condensedResults").setAttribute("number", "1");
                                  } else {
                                      document.getElementById("icon_condensedResults").src = "${rootURL}/plugin/benchmark/images/sort_desc.png";
                                      document.getElementById("icon_condensedResults").setAttribute("number", "0");
                                  }
                              });
                              table.on( 'click', 'td', function () {
                                  var idx = table.cell( this ).index().column;
                                  var curBuild = document.getElementById('build_index').innerHTML;
                                  if (idx != curBuild){
                                      if (idx > 0){
                                          var nodes = table.column(curBuild).nodes();
                                          nodes.to$$().removeClass('highlight');
                                          BchPub.setBuildSelected(idx)
                                          setTimeout(function(){
                                              BchPub.getBuildNumber( function(t){
                                                  document.getElementById('build_number').innerHTML = t.responseObject();
                                                  document.getElementById('build_number_2').innerHTML = t.responseObject();
                                              });
                                              BchPub.getResultDetails( function(t){
                                                  document.getElementById('resultDetails').innerHTML = t.responseObject();
                                              });
                                              BchPub.getParameters( function(t){
                                                  var text = t.responseObject();
                                                  if (!!text){
                                                      document.getElementById('parameters').innerHTML = t.responseObject();
                                                      $$("#title_parameters").show();
                                                  }else{
                                                      document.getElementById('parameters').innerHTML = "";
                                                      $$("#title_parameters").hide();
                                                  }
                                              });
                                              var newNodes = table.column(idx).nodes();
                                              newNodes.to$$().addClass('highlight');
                                              document.getElementById('build_index').innerHTML = idx;
                                          }, 500);
                                      }
                                  }
                              } );
                          } );
                          } );
                      </script>
          ----

          == Inline Script Block
          Line: 37
          ----
          <script>jQuery.noConflict();</script>
          ----

          == Inline Script Block
          Line: 52
          ----
          <script>
                          // Following form is necessary with jQuery.noConflict() to avoid conflict with prototype.js
                          jQuery(function ($) {
                          <j:if test="${it.HasResult == false}">
                              // Redirect in case no result is selected
                              window.location.href="${it.TablePageURL}";
                          </j:if>
                          $(document).ready(function() {
                          <j:if test="${it.IsNumeral == true}">
                              var chart = new Chart(document.getElementById("line_chart"), {
                                  type: 'line',
                                  data: {
                                      labels: ${it.ChartLabels},
                                      datasets: [{
                                          data: ${it.ChartData}
                                      }]
                                  },
                                  options: {
                                      elements: {
                                          line: {
                                              tension: 0
                                          }
                                      },
                                      animation: false,
                                      legend: {
                                          display: false
                                      },
                                      title: {
                                          display: true,
                                          text: '${it.GraphTitle}'
                                      },
                                      scales:{
                                          yAxes:[{
                                              display: true,
                                              ticks: {
                                                  callback: function(value, index, values) {
                                                      return parseFloat(value).toFixed(2);
                                                  },
                                                  autoSkip: true,
                                                  maxTicksLimit: 10,
                                                  min: ${it.GraphYMinimum},
                                                  max: ${it.GraphYMaximum}
                                              }
                                          }]
                                      }
                                  }
                              });
                          </j:if>
                              var table = $('#rawResults').DataTable( {
                                  scrollX: true,
                                  scrollCollapse: true,
                                  sDom: 't',
                                  ordering: false,
                                  fixedColumns: {
                                      leftColumns: 1
                                  }
                              } );

                              var left = $('#rawResults').width();
                              $('#rawResults').scrollLeft(left);

                              // Sent ping to the backend to reset the clock that counts down content deletion
                              var BchPub = <st:bind value="${it}"/>
                              setInterval(BchPub.resetClock, 30000); // Every 30s

                              BchPub.getBuildSelected( function(t){
                                  var build = t.responseObject();
                                  var nodes = table.column(build).nodes();
                                  nodes.to$$().addClass('highlight');
                                  document.getElementById('build_index').innerHTML = build;
                              });

                              BchPub.getBuildNumber( function(t){
                                  document.getElementById('build_number').innerHTML = t.responseObject();
                                  document.getElementById('build_number_2').innerHTML = t.responseObject();
                              });

                              BchPub.getResultDetails( function(t){
                                  document.getElementById('resultDetails').innerHTML = t.responseObject();
                              });
                              BchPub.getParameters( function(t){
                                  var text = t.responseObject();
                                  if (!!text){
                                      document.getElementById('parameters').innerHTML = t.responseObject();
                                      $$("#title_parameters").show();
                                  }else{
                                      document.getElementById('parameters').innerHTML = "";
                                      $$("#title_parameters").hide();
                                  }
                              });
                              $$('.expand_chart').click(function(){
                                  $$('#line_chart').slideToggle('fast');
                                  if (document.getElementById("icon_chart").getAttribute("number") == 0) {
                                      document.getElementById("icon_chart").src = "${rootURL}/plugin/benchmark/images/sort_both.png";
                                      document.getElementById("icon_chart").setAttribute("number", "1");
                                  } else {
                                      document.getElementById("icon_chart").src = "${rootURL}/plugin/benchmark/images/sort_desc.png";
                                      document.getElementById("icon_chart").setAttribute("number", "0");
                                  }
                              });
                              $$('.expand_resultDetails').click(function(){
                                  $$('#resultDetails').slideToggle('fast');
                                  if (document.getElementById("icon_resultDetails").getAttribute("number") == 0) {
                                      document.getElementById("icon_resultDetails").src = "${rootURL}/plugin/benchmark/images/sort_both.png";
                                      document.getElementById("icon_resultDetails").setAttribute("number", "1");
                                  } else {
                                      document.getElementById("icon_resultDetails").src = "${rootURL}/plugin/benchmark/images/sort_desc.png";
                                      document.getElementById("icon_resultDetails").setAttribute("number", "0");
                                  }
                              });
                              $$('.expand_parameters').click(function(){
                                  $$('#parameters').slideToggle('fast');
                                  if (document.getElementById("icon_parameters").getAttribute("number") == 0) {
                                      document.getElementById("icon_parameters").src = "${rootURL}/plugin/benchmark/images/sort_both.png";
                                      document.getElementById("icon_parameters").setAttribute("number", "1");
                                  } else {
                                      document.getElementById("icon_parameters").src = "${rootURL}/plugin/benchmark/images/sort_desc.png";
                                      document.getElementById("icon_parameters").setAttribute("number", "0");
                                  }
                              });
                              $$('.expand_condensedResults').click(function(){
                                  $$('#condensedResults').slideToggle('fast');
                                  if (document.getElementById("icon_condensedResults").getAttribute("number") == 0) {
                                      document.getElementById("icon_condensedResults").src = "${rootURL}/plugin/benchmark/images/sort_both.png";
                                      document.getElementById("icon_condensedResults").setAttribute("number", "1");
                                  } else {
                                      document.getElementById("icon_condensedResults").src = "${rootURL}/plugin/benchmark/images/sort_desc.png";
                                      document.getElementById("icon_condensedResults").setAttribute("number", "0");
                                  }
                              });
                              table.on( 'click', 'td', function () {
                                  var idx = table.cell( this ).index().column;
                                  var curBuild = document.getElementById('build_index').innerHTML;
                                  if (idx != curBuild){
                                      if (idx > 0){
                                          var nodes = table.column(curBuild).nodes();
                                          nodes.to$$().removeClass('highlight');
                                          BchPub.setBuildSelected(idx)
                                          setTimeout(function(){
                                              BchPub.getBuildNumber( function(t){
                                                  document.getElementById('build_number').innerHTML = t.responseObject();
                                                  document.getElementById('build_number_2').innerHTML = t.responseObject();
                                              });
                                              BchPub.getResultDetails( function(t){
                                                  document.getElementById('resultDetails').innerHTML = t.responseObject();
                                              });
                                              BchPub.getParameters( function(t){
                                                  var text = t.responseObject();
                                                  if (!!text){
                                                      document.getElementById('parameters').innerHTML = t.responseObject();
                                                      $$("#title_parameters").show();
                                                  }else{
                                                      document.getElementById('parameters').innerHTML = "";
                                                      $$("#title_parameters").hide();
                                                  }
                                              });
                                              var newNodes = table.column(idx).nodes();
                                              newNodes.to$$().addClass('highlight');
                                              document.getElementById('build_index').innerHTML = idx;
                                          }, 500);
                                      }
                                  }
                              } );
                          } );
                          } );
                      </script>
          ----
          {noformat}

          h4. Solution

          [https://www.jenkins.io/doc/developer/security/csp/#inline-javascript-blocks]
          New: h4. Problems

          {noformat}
          == Inline Script Block
          Line: 37
          ----
          <script>jQuery.noConflict();</script>
          ----

          == Inline Script Block
          Line: 52
          ----
          <script>
                          // Following form is necessary with jQuery.noConflict() to avoid conflict with prototype.js
                          jQuery(function ($) {
                          <j:if test="${it.HasResult == false}">
                              // Redirect in case no result is selected
                              window.location.href="${it.TablePageURL}";
                          </j:if>
                          $(document).ready(function() {
                          <j:if test="${it.IsNumeral == true}">
                              var chart = new Chart(document.getElementById("line_chart"), {
                                  type: 'line',
                                  data: {
                                      labels: ${it.ChartLabels},
                                      datasets: [{
                                          data: ${it.ChartData}
                                      }]
                                  },
                                  options: {
                                      elements: {
                                          line: {
                                              tension: 0
                                          }
                                      },
                                      animation: false,
                                      legend: {
                                          display: false
                                      },
                                      title: {
                                          display: true,
                                          text: '${it.GraphTitle}'
                                      },
                                      scales:{
                                          yAxes:[{
                                              display: true,
                                              ticks: {
                                                  callback: function(value, index, values) {
                                                      return parseFloat(value).toFixed(2);
                                                  },
                                                  autoSkip: true,
                                                  maxTicksLimit: 10,
                                                  min: ${it.GraphYMinimum},
                                                  max: ${it.GraphYMaximum}
                                              }
                                          }]
                                      }
                                  }
                              });
                          </j:if>
                              var table = $('#rawResults').DataTable( {
                                  scrollX: true,
                                  scrollCollapse: true,
                                  sDom: 't',
                                  ordering: false,
                                  fixedColumns: {
                                      leftColumns: 1
                                  }
                              } );

                              var left = $('#rawResults').width();
                              $('#rawResults').scrollLeft(left);

                              // Sent ping to the backend to reset the clock that counts down content deletion
                              var BchPub = <st:bind value="${it}"/>
                              setInterval(BchPub.resetClock, 30000); // Every 30s

                              BchPub.getBuildSelected( function(t){
                                  var build = t.responseObject();
                                  var nodes = table.column(build).nodes();
                                  nodes.to$$().addClass('highlight');
                                  document.getElementById('build_index').innerHTML = build;
                              });

                              BchPub.getBuildNumber( function(t){
                                  document.getElementById('build_number').innerHTML = t.responseObject();
                                  document.getElementById('build_number_2').innerHTML = t.responseObject();
                              });

                              BchPub.getResultDetails( function(t){
                                  document.getElementById('resultDetails').innerHTML = t.responseObject();
                              });
                              BchPub.getParameters( function(t){
                                  var text = t.responseObject();
                                  if (!!text){
                                      document.getElementById('parameters').innerHTML = t.responseObject();
                                      $$("#title_parameters").show();
                                  }else{
                                      document.getElementById('parameters').innerHTML = "";
                                      $$("#title_parameters").hide();
                                  }
                              });
                              $$('.expand_chart').click(function(){
                                  $$('#line_chart').slideToggle('fast');
                                  if (document.getElementById("icon_chart").getAttribute("number") == 0) {
                                      document.getElementById("icon_chart").src = "${rootURL}/plugin/benchmark/images/sort_both.png";
                                      document.getElementById("icon_chart").setAttribute("number", "1");
                                  } else {
                                      document.getElementById("icon_chart").src = "${rootURL}/plugin/benchmark/images/sort_desc.png";
                                      document.getElementById("icon_chart").setAttribute("number", "0");
                                  }
                              });
                              $$('.expand_resultDetails').click(function(){
                                  $$('#resultDetails').slideToggle('fast');
                                  if (document.getElementById("icon_resultDetails").getAttribute("number") == 0) {
                                      document.getElementById("icon_resultDetails").src = "${rootURL}/plugin/benchmark/images/sort_both.png";
                                      document.getElementById("icon_resultDetails").setAttribute("number", "1");
                                  } else {
                                      document.getElementById("icon_resultDetails").src = "${rootURL}/plugin/benchmark/images/sort_desc.png";
                                      document.getElementById("icon_resultDetails").setAttribute("number", "0");
                                  }
                              });
                              $$('.expand_parameters').click(function(){
                                  $$('#parameters').slideToggle('fast');
                                  if (document.getElementById("icon_parameters").getAttribute("number") == 0) {
                                      document.getElementById("icon_parameters").src = "${rootURL}/plugin/benchmark/images/sort_both.png";
                                      document.getElementById("icon_parameters").setAttribute("number", "1");
                                  } else {
                                      document.getElementById("icon_parameters").src = "${rootURL}/plugin/benchmark/images/sort_desc.png";
                                      document.getElementById("icon_parameters").setAttribute("number", "0");
                                  }
                              });
                              $$('.expand_condensedResults').click(function(){
                                  $$('#condensedResults').slideToggle('fast');
                                  if (document.getElementById("icon_condensedResults").getAttribute("number") == 0) {
                                      document.getElementById("icon_condensedResults").src = "${rootURL}/plugin/benchmark/images/sort_both.png";
                                      document.getElementById("icon_condensedResults").setAttribute("number", "1");
                                  } else {
                                      document.getElementById("icon_condensedResults").src = "${rootURL}/plugin/benchmark/images/sort_desc.png";
                                      document.getElementById("icon_condensedResults").setAttribute("number", "0");
                                  }
                              });
                              table.on( 'click', 'td', function () {
                                  var idx = table.cell( this ).index().column;
                                  var curBuild = document.getElementById('build_index').innerHTML;
                                  if (idx != curBuild){
                                      if (idx > 0){
                                          var nodes = table.column(curBuild).nodes();
                                          nodes.to$$().removeClass('highlight');
                                          BchPub.setBuildSelected(idx)
                                          setTimeout(function(){
                                              BchPub.getBuildNumber( function(t){
                                                  document.getElementById('build_number').innerHTML = t.responseObject();
                                                  document.getElementById('build_number_2').innerHTML = t.responseObject();
                                              });
                                              BchPub.getResultDetails( function(t){
                                                  document.getElementById('resultDetails').innerHTML = t.responseObject();
                                              });
                                              BchPub.getParameters( function(t){
                                                  var text = t.responseObject();
                                                  if (!!text){
                                                      document.getElementById('parameters').innerHTML = t.responseObject();
                                                      $$("#title_parameters").show();
                                                  }else{
                                                      document.getElementById('parameters').innerHTML = "";
                                                      $$("#title_parameters").hide();
                                                  }
                                              });
                                              var newNodes = table.column(idx).nodes();
                                              newNodes.to$$().addClass('highlight');
                                              document.getElementById('build_index').innerHTML = idx;
                                          }, 500);
                                      }
                                  }
                              } );
                          } );
                          } );
                      </script>
          ----
          {noformat}

          h4. Solution

          [https://www.jenkins.io/doc/developer/security/csp/#inline-javascript-blocks]
          Basil Crow made changes -
          Description Original: h4. Problems

          {noformat}
          == Inline Script Block
          Line: 37
          ----
          <script>jQuery.noConflict();</script>
          ----

          == Inline Script Block
          Line: 52
          ----
          <script>
                          // Following form is necessary with jQuery.noConflict() to avoid conflict with prototype.js
                          jQuery(function ($) {
                          <j:if test="${it.HasResult == false}">
                              // Redirect in case no result is selected
                              window.location.href="${it.TablePageURL}";
                          </j:if>
                          $(document).ready(function() {
                          <j:if test="${it.IsNumeral == true}">
                              var chart = new Chart(document.getElementById("line_chart"), {
                                  type: 'line',
                                  data: {
                                      labels: ${it.ChartLabels},
                                      datasets: [{
                                          data: ${it.ChartData}
                                      }]
                                  },
                                  options: {
                                      elements: {
                                          line: {
                                              tension: 0
                                          }
                                      },
                                      animation: false,
                                      legend: {
                                          display: false
                                      },
                                      title: {
                                          display: true,
                                          text: '${it.GraphTitle}'
                                      },
                                      scales:{
                                          yAxes:[{
                                              display: true,
                                              ticks: {
                                                  callback: function(value, index, values) {
                                                      return parseFloat(value).toFixed(2);
                                                  },
                                                  autoSkip: true,
                                                  maxTicksLimit: 10,
                                                  min: ${it.GraphYMinimum},
                                                  max: ${it.GraphYMaximum}
                                              }
                                          }]
                                      }
                                  }
                              });
                          </j:if>
                              var table = $('#rawResults').DataTable( {
                                  scrollX: true,
                                  scrollCollapse: true,
                                  sDom: 't',
                                  ordering: false,
                                  fixedColumns: {
                                      leftColumns: 1
                                  }
                              } );

                              var left = $('#rawResults').width();
                              $('#rawResults').scrollLeft(left);

                              // Sent ping to the backend to reset the clock that counts down content deletion
                              var BchPub = <st:bind value="${it}"/>
                              setInterval(BchPub.resetClock, 30000); // Every 30s

                              BchPub.getBuildSelected( function(t){
                                  var build = t.responseObject();
                                  var nodes = table.column(build).nodes();
                                  nodes.to$$().addClass('highlight');
                                  document.getElementById('build_index').innerHTML = build;
                              });

                              BchPub.getBuildNumber( function(t){
                                  document.getElementById('build_number').innerHTML = t.responseObject();
                                  document.getElementById('build_number_2').innerHTML = t.responseObject();
                              });

                              BchPub.getResultDetails( function(t){
                                  document.getElementById('resultDetails').innerHTML = t.responseObject();
                              });
                              BchPub.getParameters( function(t){
                                  var text = t.responseObject();
                                  if (!!text){
                                      document.getElementById('parameters').innerHTML = t.responseObject();
                                      $$("#title_parameters").show();
                                  }else{
                                      document.getElementById('parameters').innerHTML = "";
                                      $$("#title_parameters").hide();
                                  }
                              });
                              $$('.expand_chart').click(function(){
                                  $$('#line_chart').slideToggle('fast');
                                  if (document.getElementById("icon_chart").getAttribute("number") == 0) {
                                      document.getElementById("icon_chart").src = "${rootURL}/plugin/benchmark/images/sort_both.png";
                                      document.getElementById("icon_chart").setAttribute("number", "1");
                                  } else {
                                      document.getElementById("icon_chart").src = "${rootURL}/plugin/benchmark/images/sort_desc.png";
                                      document.getElementById("icon_chart").setAttribute("number", "0");
                                  }
                              });
                              $$('.expand_resultDetails').click(function(){
                                  $$('#resultDetails').slideToggle('fast');
                                  if (document.getElementById("icon_resultDetails").getAttribute("number") == 0) {
                                      document.getElementById("icon_resultDetails").src = "${rootURL}/plugin/benchmark/images/sort_both.png";
                                      document.getElementById("icon_resultDetails").setAttribute("number", "1");
                                  } else {
                                      document.getElementById("icon_resultDetails").src = "${rootURL}/plugin/benchmark/images/sort_desc.png";
                                      document.getElementById("icon_resultDetails").setAttribute("number", "0");
                                  }
                              });
                              $$('.expand_parameters').click(function(){
                                  $$('#parameters').slideToggle('fast');
                                  if (document.getElementById("icon_parameters").getAttribute("number") == 0) {
                                      document.getElementById("icon_parameters").src = "${rootURL}/plugin/benchmark/images/sort_both.png";
                                      document.getElementById("icon_parameters").setAttribute("number", "1");
                                  } else {
                                      document.getElementById("icon_parameters").src = "${rootURL}/plugin/benchmark/images/sort_desc.png";
                                      document.getElementById("icon_parameters").setAttribute("number", "0");
                                  }
                              });
                              $$('.expand_condensedResults').click(function(){
                                  $$('#condensedResults').slideToggle('fast');
                                  if (document.getElementById("icon_condensedResults").getAttribute("number") == 0) {
                                      document.getElementById("icon_condensedResults").src = "${rootURL}/plugin/benchmark/images/sort_both.png";
                                      document.getElementById("icon_condensedResults").setAttribute("number", "1");
                                  } else {
                                      document.getElementById("icon_condensedResults").src = "${rootURL}/plugin/benchmark/images/sort_desc.png";
                                      document.getElementById("icon_condensedResults").setAttribute("number", "0");
                                  }
                              });
                              table.on( 'click', 'td', function () {
                                  var idx = table.cell( this ).index().column;
                                  var curBuild = document.getElementById('build_index').innerHTML;
                                  if (idx != curBuild){
                                      if (idx > 0){
                                          var nodes = table.column(curBuild).nodes();
                                          nodes.to$$().removeClass('highlight');
                                          BchPub.setBuildSelected(idx)
                                          setTimeout(function(){
                                              BchPub.getBuildNumber( function(t){
                                                  document.getElementById('build_number').innerHTML = t.responseObject();
                                                  document.getElementById('build_number_2').innerHTML = t.responseObject();
                                              });
                                              BchPub.getResultDetails( function(t){
                                                  document.getElementById('resultDetails').innerHTML = t.responseObject();
                                              });
                                              BchPub.getParameters( function(t){
                                                  var text = t.responseObject();
                                                  if (!!text){
                                                      document.getElementById('parameters').innerHTML = t.responseObject();
                                                      $$("#title_parameters").show();
                                                  }else{
                                                      document.getElementById('parameters').innerHTML = "";
                                                      $$("#title_parameters").hide();
                                                  }
                                              });
                                              var newNodes = table.column(idx).nodes();
                                              newNodes.to$$().addClass('highlight');
                                              document.getElementById('build_index').innerHTML = idx;
                                          }, 500);
                                      }
                                  }
                              } );
                          } );
                          } );
                      </script>
          ----
          {noformat}

          h4. Solution

          [https://www.jenkins.io/doc/developer/security/csp/#inline-javascript-blocks]
          New: h1. Note

          *While testing this plugin, evaluate whether the third-party libraries in {{src/main/webapp}} are compatible with CSP in restrictive mode. The plugin may need to be upgraded from jQuery 1.x to 3.x to fully function in CSP restrictive mode.*

          h4. Problems

          {noformat}
          == Inline Script Block
          Line: 37
          ----
          <script>jQuery.noConflict();</script>
          ----

          == Inline Script Block
          Line: 52
          ----
          <script>
                          // Following form is necessary with jQuery.noConflict() to avoid conflict with prototype.js
                          jQuery(function ($) {
                          <j:if test="${it.HasResult == false}">
                              // Redirect in case no result is selected
                              window.location.href="${it.TablePageURL}";
                          </j:if>
                          $(document).ready(function() {
                          <j:if test="${it.IsNumeral == true}">
                              var chart = new Chart(document.getElementById("line_chart"), {
                                  type: 'line',
                                  data: {
                                      labels: ${it.ChartLabels},
                                      datasets: [{
                                          data: ${it.ChartData}
                                      }]
                                  },
                                  options: {
                                      elements: {
                                          line: {
                                              tension: 0
                                          }
                                      },
                                      animation: false,
                                      legend: {
                                          display: false
                                      },
                                      title: {
                                          display: true,
                                          text: '${it.GraphTitle}'
                                      },
                                      scales:{
                                          yAxes:[{
                                              display: true,
                                              ticks: {
                                                  callback: function(value, index, values) {
                                                      return parseFloat(value).toFixed(2);
                                                  },
                                                  autoSkip: true,
                                                  maxTicksLimit: 10,
                                                  min: ${it.GraphYMinimum},
                                                  max: ${it.GraphYMaximum}
                                              }
                                          }]
                                      }
                                  }
                              });
                          </j:if>
                              var table = $('#rawResults').DataTable( {
                                  scrollX: true,
                                  scrollCollapse: true,
                                  sDom: 't',
                                  ordering: false,
                                  fixedColumns: {
                                      leftColumns: 1
                                  }
                              } );

                              var left = $('#rawResults').width();
                              $('#rawResults').scrollLeft(left);

                              // Sent ping to the backend to reset the clock that counts down content deletion
                              var BchPub = <st:bind value="${it}"/>
                              setInterval(BchPub.resetClock, 30000); // Every 30s

                              BchPub.getBuildSelected( function(t){
                                  var build = t.responseObject();
                                  var nodes = table.column(build).nodes();
                                  nodes.to$$().addClass('highlight');
                                  document.getElementById('build_index').innerHTML = build;
                              });

                              BchPub.getBuildNumber( function(t){
                                  document.getElementById('build_number').innerHTML = t.responseObject();
                                  document.getElementById('build_number_2').innerHTML = t.responseObject();
                              });

                              BchPub.getResultDetails( function(t){
                                  document.getElementById('resultDetails').innerHTML = t.responseObject();
                              });
                              BchPub.getParameters( function(t){
                                  var text = t.responseObject();
                                  if (!!text){
                                      document.getElementById('parameters').innerHTML = t.responseObject();
                                      $$("#title_parameters").show();
                                  }else{
                                      document.getElementById('parameters').innerHTML = "";
                                      $$("#title_parameters").hide();
                                  }
                              });
                              $$('.expand_chart').click(function(){
                                  $$('#line_chart').slideToggle('fast');
                                  if (document.getElementById("icon_chart").getAttribute("number") == 0) {
                                      document.getElementById("icon_chart").src = "${rootURL}/plugin/benchmark/images/sort_both.png";
                                      document.getElementById("icon_chart").setAttribute("number", "1");
                                  } else {
                                      document.getElementById("icon_chart").src = "${rootURL}/plugin/benchmark/images/sort_desc.png";
                                      document.getElementById("icon_chart").setAttribute("number", "0");
                                  }
                              });
                              $$('.expand_resultDetails').click(function(){
                                  $$('#resultDetails').slideToggle('fast');
                                  if (document.getElementById("icon_resultDetails").getAttribute("number") == 0) {
                                      document.getElementById("icon_resultDetails").src = "${rootURL}/plugin/benchmark/images/sort_both.png";
                                      document.getElementById("icon_resultDetails").setAttribute("number", "1");
                                  } else {
                                      document.getElementById("icon_resultDetails").src = "${rootURL}/plugin/benchmark/images/sort_desc.png";
                                      document.getElementById("icon_resultDetails").setAttribute("number", "0");
                                  }
                              });
                              $$('.expand_parameters').click(function(){
                                  $$('#parameters').slideToggle('fast');
                                  if (document.getElementById("icon_parameters").getAttribute("number") == 0) {
                                      document.getElementById("icon_parameters").src = "${rootURL}/plugin/benchmark/images/sort_both.png";
                                      document.getElementById("icon_parameters").setAttribute("number", "1");
                                  } else {
                                      document.getElementById("icon_parameters").src = "${rootURL}/plugin/benchmark/images/sort_desc.png";
                                      document.getElementById("icon_parameters").setAttribute("number", "0");
                                  }
                              });
                              $$('.expand_condensedResults').click(function(){
                                  $$('#condensedResults').slideToggle('fast');
                                  if (document.getElementById("icon_condensedResults").getAttribute("number") == 0) {
                                      document.getElementById("icon_condensedResults").src = "${rootURL}/plugin/benchmark/images/sort_both.png";
                                      document.getElementById("icon_condensedResults").setAttribute("number", "1");
                                  } else {
                                      document.getElementById("icon_condensedResults").src = "${rootURL}/plugin/benchmark/images/sort_desc.png";
                                      document.getElementById("icon_condensedResults").setAttribute("number", "0");
                                  }
                              });
                              table.on( 'click', 'td', function () {
                                  var idx = table.cell( this ).index().column;
                                  var curBuild = document.getElementById('build_index').innerHTML;
                                  if (idx != curBuild){
                                      if (idx > 0){
                                          var nodes = table.column(curBuild).nodes();
                                          nodes.to$$().removeClass('highlight');
                                          BchPub.setBuildSelected(idx)
                                          setTimeout(function(){
                                              BchPub.getBuildNumber( function(t){
                                                  document.getElementById('build_number').innerHTML = t.responseObject();
                                                  document.getElementById('build_number_2').innerHTML = t.responseObject();
                                              });
                                              BchPub.getResultDetails( function(t){
                                                  document.getElementById('resultDetails').innerHTML = t.responseObject();
                                              });
                                              BchPub.getParameters( function(t){
                                                  var text = t.responseObject();
                                                  if (!!text){
                                                      document.getElementById('parameters').innerHTML = t.responseObject();
                                                      $$("#title_parameters").show();
                                                  }else{
                                                      document.getElementById('parameters').innerHTML = "";
                                                      $$("#title_parameters").hide();
                                                  }
                                              });
                                              var newNodes = table.column(idx).nodes();
                                              newNodes.to$$().addClass('highlight');
                                              document.getElementById('build_index').innerHTML = idx;
                                          }, 500);
                                      }
                                  }
                              } );
                          } );
                          } );
                      </script>
          ----
          {noformat}

          h4. Solution

          [https://www.jenkins.io/doc/developer/security/csp/#inline-javascript-blocks]

            Unassigned Unassigned
            basil Basil Crow
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated: