AlmaScript

Fixes for Alma's GUI

目前為 2015-11-03 提交的版本,檢視 最新版本

  1. // ==UserScript==
  2. // @name AlmaScript
  3. // @namespace https://greasyfork.org/en/scripts/13589-almascript
  4. // @version 0.2
  5. // @description Fixes for Alma's GUI
  6. // @author Ryan Meyers
  7. // @match https://gss.getalma.com/assignment/*/grades
  8. // @grant none
  9. // ==/UserScript==
  10.  
  11. // Add jQuery, unless it already exists
  12. if(typeof jQuery === 'undefined'|| !jQuery){
  13. (function(){
  14. var s=document.createElement('script');
  15. s.setAttribute('src','https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js');
  16. if(typeof jQuery=='undefined'){
  17. document.getElementsByTagName('head')[0].appendChild(s);
  18. }
  19. })();
  20. }
  21. var namesList = [];
  22.  
  23. (function(){
  24. var codeToExecute = function(){
  25. /***********************/
  26. // YOUR CODE HERE
  27. /***********************/
  28. var elements = $('select[name^="StudentGrades"').not('[name$="[Status]"]');
  29. elements.after(' <a href="#" style="font-size:large">&varr;</a> <a href="#" style="font-size:large">&harr;</a>');
  30. var elementSorter = [];
  31. var idOrder = $('input[name$="[StudentId]"');
  32. console.log(idOrder);
  33. for(var i=0; i<idOrder.length; i++)
  34. {
  35. namesList[idOrder[i].value] = idOrder[i].parentElement.innerText;
  36. }
  37. // console.log(namesList);
  38. elements.sort(SortByName);
  39. // console.log(elements);
  40. for(var ii=0; ii<elements.length; ii++)
  41. {
  42. elements[ii].tabIndex=ii+1;
  43. $(elements[ii]).next().click(function(){
  44. var profselector = $(this).prev().attr('name').split('[Proficiencies][')[1];
  45. var fillelements = $('select[name$="'+profselector+'"]');
  46. fillelements.val($(this).prev().val());
  47. //console.log(fillelements);
  48. //a.name.split('[Proficiencies][')[1]
  49. });
  50. $(elements[ii]).next().next().click(function(){
  51. var profselector = $(this).prev().prev().attr('name').split('[Proficiencies][')[0];
  52. var fillelements = $('select[name^="'+profselector+'"]').not('[name$="[Status]"]');
  53. fillelements.val($(this).prev().prev().val());
  54. //console.log(fillelements);
  55. //a.name.split('[Proficiencies][')[1]
  56. });
  57. // $(elements[ii]).after('<a href="#" style="font-size:x-small">FILL</a>');
  58. }
  59. $('.line-clamp-3').removeClass('line-clamp-3');
  60. // $('.pure-table').fixedHeaderTable({fixedColumn: true });
  61. };
  62. function onlyUnique(value, index, self) {
  63. return self.indexOf(value) === index;
  64. }
  65.  
  66. //idOrder.sort(SortByParentTitle);
  67. // function
  68. function SortByName(a, b){
  69. //console.log(idOrder);
  70. //console.log(idIndex);
  71. //console.log(a.name);
  72. var aName = a.name.split('[Proficiencies]')[1]+' '+namesList[a.name.split('StudentGrades[')[1].split('][Proficiencies')[0]];
  73. var bName = b.name.split('[Proficiencies]')[1]+' '+namesList[b.name.split('StudentGrades[')[1].split('][Proficiencies')[0]];
  74. // console.log(aName);
  75. return ((aName < bName) ? -1 : ((aName > bName) ? 1 : 0));
  76. }
  77.  
  78. var intervalInt = window.setInterval(function(){
  79. if(typeof jQuery !== 'undefined' && jQuery){
  80. // Clear this interval
  81. window.clearInterval(intervalInt);
  82. codeToExecute();
  83. }
  84. }, 100);
  85. })();