Virtonomica:Lab Filter

Выделение тех лаборатоий, в которых надо нажать кнопки, что бы продолжить исследования

  1. // ==UserScript==
  2. // @name Virtonomica:Lab Filter
  3. // @namespace virtonomica
  4. // @version 0.64
  5. // @description Выделение тех лаборатоий, в которых надо нажать кнопки, что бы продолжить исследования
  6. // @description v0.6 - правки под новый дизайн списка юнитов
  7. // @include *virtonomic*.*/*/main/company/view/*/unit_list
  8. // @include *virtonomic*.*/*/main/company/view/*
  9. // @exclude *virtonomic*.*/*/main/company/view/*/unit_list/equipment
  10. // ==/UserScript==
  11.  
  12. var run = function() {
  13. var win = (typeof(unsafeWindow) != 'undefined' ? unsafeWindow : top.window);
  14. var $ = win.$;
  15.  
  16. // сортировка объекта как строки
  17. function sortObj(arr){
  18. // Setup Arrays
  19. var sortedKeys = [];
  20. var sortedObj = {};
  21.  
  22. // Separate keys and sort them
  23. for (var i in arr){sortedKeys.push(i);}
  24. sortedKeys.sort();
  25.  
  26. // Reconstruct sorted obj based on keys
  27. for (var j in sortedKeys){sortedObj[sortedKeys[j]] = arr[sortedKeys[j]];}
  28. return sortedObj;
  29. }
  30.  
  31. function find_lab( mode ) {
  32. var n = 0;
  33. var find = input.val();
  34. $('td.spec').each(function() {
  35. var show = 0;
  36. var name = /(\d+\.*\d*)%\s?(\d+)?\.?(\d+)?\s?(.+)?/.exec($(this).text().trim().replace('"','').replace('"',''));
  37. var pr = name[1];
  38. var st = name[3];
  39. var lev = name[2];
  40. if (find == "4" ) $("div.st").show();
  41. else $("div.st").hide();
  42.  
  43. $(this).removeClass("lab_round_1");
  44. switch( find ) {
  45. case "0": {
  46. $(this.parentNode).show();
  47. $("div.st").show();
  48. show = 1;
  49. $("div.st").show();
  50. break;}
  51.  
  52. case "1":
  53. case "4":{
  54. // начальная стадия исследований
  55. if ( ( pr == 0) && ( typeof st == 'undefined') ){
  56. show = 1;
  57. break;
  58. }
  59. // заверешена 1 стадия
  60. if ( (st == 1) && (pr == 100) ){
  61. show = 1;
  62. //$(this.parentNode).show();
  63. break;
  64. }
  65. // завершена 2 стадия
  66. if ( (st == 3) && (pr == 0) ){
  67. show = 1;
  68. break;
  69. }
  70. break;}
  71.  
  72. case "2": {
  73. if ( ( pr > 90) && ( pr < 100) ) {
  74. show = 1;
  75. }
  76. break;}
  77.  
  78. case "3": {
  79. if ( ( pr > 80) && ( pr < 90) ) {
  80. show = 1;
  81. }
  82. break;}
  83. case "10": {
  84. if ( ( pr > 0) && ( pr < 20) ) {
  85. show = 1;
  86. }
  87. break;}
  88.  
  89. case "5": {
  90. if ( lev< 9) {
  91. show = 1;
  92. }
  93. break;}
  94. case "17": {
  95. if ( lev > 16) {
  96. show = 1;
  97. }
  98. break;}
  99. case "38": {
  100. if ( lev > 37) {
  101. show = 1;
  102. }
  103. break;}
  104. case "6": {
  105. if ( st == 1) {
  106. show = 1;
  107. if ( pr > 89 ) {
  108. $(this).addClass("lab_round_1");
  109. }
  110. }
  111. break;}
  112. case "7": {
  113. if ( st == 2) {
  114. show = 1;
  115. }
  116. break;}
  117. case "8": {
  118. if ( st == 3) {
  119. show = 1;
  120. }
  121. break;}
  122. }
  123. var n = $(this.parentNode).next();
  124. if ( show == 0){
  125. $(this.parentNode).hide();
  126. if(/unit_comment/.test(n.attr('class'))) n.hide();
  127. } else {
  128. $(this.parentNode).show();
  129. if(/unit_comment/.test(n.attr('class'))) n.show();
  130. $("div.st").show();
  131. }
  132.  
  133. });
  134. }
  135. var container = $("td.u-l").parent().parent();
  136.  
  137. var panel = $("#extension_panel");
  138. if ( panel.length == 0 ) {
  139. // добавить панель, если её еще нет
  140. var ext_panel = "<div style='padding: 2px; border: 1px solid #0184D0; border-radius: 4px 4px 4px 4px; float:left; white-space:nowrap; color:#0184D0; display:none;' id=extension_panel></div>";
  141. container.append( "<tr><td>" +ext_panel );
  142. }
  143. // Стили
  144. var st = $("style");
  145. if ( $(".lab_round_1", st).length == 0 ) {
  146. st.append(".lab_round_1{background-color: moccasin;padding: 4px;border-radius: 8px;}");
  147. //st.append(".lab_round_1:hover{opacity:1.0}");
  148. }
  149.  
  150.  
  151. var input = $('<select>')
  152. .append('<option value=0>&nbsp;</option>')
  153. .append('<option value=5>техны ниже 9</option>')
  154. .append('<option value=17>техны выше 16</option>')
  155. .append('<option value=38>техны от 38</option>')
  156. .append('<option value=3>больше 80%</option>')
  157. .append('<option value=2>больше 90%</option>')
  158. .append('<option value=10>меньше 20%</option>')
  159. .append('<option value=6>стадия 1</option>')
  160. .append('<option value=7>стадия 2</option>')
  161. .append('<option value=8>стадия 3</option>')
  162. .append('<option value=1>найти</option>').change( function() {find_lab();})
  163. .append('<option value=4>найти (+заметки)</option>').change( function() {find_lab('' );});
  164.  
  165. // Изучаемые технологии
  166. var list = {};
  167. $('td.spec').each(function() {
  168. var name = /(\d+\.*\d*)%\s?(\d+)?\.?(\d+)?\s?(.+)?/.exec($(this).text().trim().replace('"','').replace('"','') );
  169. if (list[name[4]] != null) {list[name[4]]++;}
  170. else if (typeof name[4] != 'undefined') {list[name[4]] = 1;}
  171. });
  172.  
  173. list = sortObj(list);
  174. var filter = $(" <select>").append('<option value=0>&nbsp;</option>').change( function(){
  175. var search = $(this).val();
  176. $('td.spec').each(function() {
  177. var name = /(\d+\.*\d*)%\s?(\d+)?\.?(\d+)?\s?(.+)?/.exec($(this).text().trim().replace('"','').replace('"','') );
  178. if (name[4] == search ){
  179. $(this.parentNode).show();
  180. $("div.st").show();
  181. } else {
  182. $(this.parentNode).hide();
  183. // спрятать заметки
  184. $("div.st").hide();
  185. }
  186. });
  187. });
  188.  
  189. $.each(list,function(o,i) {
  190. var str = '<option value="'+ o +'">'+ o;
  191. str+= (i > 1)?' (' + i + ')':'';
  192. str+= '</option>';
  193. filter.append(str);
  194. });
  195.  
  196. // Число подразделений на странице
  197. var units = $("td.info");
  198. // число лаборатоий на странице
  199. var labs = $("td.i-lab");
  200.  
  201. // если на странице только лаборатории
  202. if ( labs.length == units.length) {
  203. $("#extension_panel").append('<div id=science>Исследования: ');
  204. $("#science").append(input).append(filter);
  205. $("#extension_panel").show();
  206. }
  207.  
  208. };
  209.  
  210. if(window.top == window) {
  211. var script = document.createElement("script");
  212. script.textContent = '(' + run.toString() + ')();';
  213. document.documentElement.appendChild(script);
  214. }