search.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312
  1. $(function() {
  2. $(".selectBox").on("click", function (e) {
  3. if($(this).siblings(".checkboxes").find("label").css("display") == "block") {
  4. if($(this).siblings(".checkboxes").css("display") == "none") {
  5. $(".checkboxes").css("display", "none");
  6. $(this).siblings(".checkboxes").css("display", "block");
  7. } else {
  8. $(".checkboxes").css("display", "none");
  9. }
  10. }
  11. });
  12. $("body").on("click", function (event) {
  13. if (!$(event.target).hasClass("overSelect")) {
  14. if (($(event.target).closest(".checkboxes").length == 0)) {
  15. $(".checkboxes").css("display", "none");
  16. }
  17. }
  18. });
  19. $(".multiselect #category-any").on("change", function() {
  20. $("#notes").slideUp(200);
  21. if(this.checked) {
  22. search_data["category"] = get_value_list_by_key(db_table["category"], null, -1, "category_id");
  23. search_data["project"] = get_value_list_by_key(db_table["project"], null, -1, "project_id");
  24. search_data["type"] = get_value_list_by_key(db_table["type"], null, -1, "type_id");
  25. $(".category-option").prop("checked", true);
  26. show_select_option("project", search_data["project"], "p", true);
  27. $("#project-any").prop("checked", true);
  28. show_select_option("type", search_data["type"], "t", true);
  29. $("#type-any").prop("checked", true);
  30. } else {
  31. search_data["category"] = [];
  32. search_data["project"] = [];
  33. search_data["type"] = [];
  34. $(".category-option").prop("checked", false);
  35. show_select_option("project", search_data["project"], "p", true);
  36. show_select_option("type", search_data["type"], "t", true);
  37. }
  38. search_data["notes"] = [];
  39. search_data["project"].forEach(element => {
  40. search_data["notes"] = search_data["notes"].concat(db_table["notes"][element]);
  41. });
  42. notes_show_id_list = [];
  43. search_data["notes"].forEach(element => {
  44. for(i=0; i<notes_button_list.length; i++) {
  45. if(notes_button_list[i] == element) {
  46. notes_show_id_list.push(i);
  47. }
  48. }
  49. });
  50. show_select_option("notes", notes_show_id_list, "n", true);
  51. set_select_text("category", "false");
  52. });
  53. $(".multiselect .category-option").on("change", function() {
  54. $("#notes").slideUp(200);
  55. category_id_list = [];
  56. list_id_list = [];
  57. //set search data
  58. if (this.value == "any") {
  59. search_data["category"] = get_value_list_by_key(db_table["category"], null, -1, "category_id");
  60. search_data["project"] = get_value_list_by_key(db_table["project"], null, -1, "project_id");
  61. search_data["type"] = get_value_list_by_key(db_table["type"], null, -1, "type_id");
  62. } else {
  63. check_list = get_multi_checkbox_check_list("category-option");
  64. check_list.forEach(element => {
  65. if(element != "any") {
  66. category_id_list.push(element.split("-")[0].replace("c", ""));
  67. list_id_list.push(element.split("-")[1].replace("l", ""));
  68. }
  69. });
  70. search_data["category"] = category_id_list;
  71. search_data["project"] = get_value_list_by_key(db_table["project"], "category_id", category_id_list, "project_id");
  72. target_type_id_list = get_value_list_by_key(db_table["category_type"], "list_id", list_id_list, "category_list");
  73. search_data["type"] = merge_string_to_list(target_type_id_list);
  74. }
  75. //set view
  76. show_select_option("project", search_data["project"], "p", true);
  77. $("#project-any").prop("checked", true);
  78. show_select_option("type", search_data["type"], "t", true);
  79. $("#type-any").prop("checked", true);
  80. if(category_id_list.length < db_table["category"].length) {
  81. $("#category-any").prop("checked", false);
  82. } else {
  83. $("#category-any").prop("checked", true);
  84. }
  85. search_data["notes"] = [];
  86. search_data["project"].forEach(element => {
  87. search_data["notes"] = search_data["notes"].concat(db_table["notes"][element]);
  88. });
  89. notes_show_id_list = [];
  90. search_data["notes"].forEach(element => {
  91. for(i=0; i<notes_button_list.length; i++) {
  92. if(notes_button_list[i] == element) {
  93. notes_show_id_list.push(i);
  94. }
  95. }
  96. });
  97. show_select_option("notes", notes_show_id_list, "n", true);
  98. set_select_text("category", "false");
  99. });
  100. $(".multiselect #project-any").on("change", function() {
  101. $("#notes").slideUp(200);
  102. if(this.checked) {
  103. search_data["project"] = [];
  104. $(".project-button:visible").prop("checked", true);
  105. $(".project-button:visible").each(function(){
  106. search_data["project"].push($(this).find("input").attr("id").replace("p", ""));
  107. $(this).find("input").prop("checked", true);
  108. });
  109. } else {
  110. search_data["project"] = [];
  111. $(".project-option").prop("checked", false);
  112. }
  113. set_select_text("project", false);
  114. });
  115. $(".multiselect .project-option").on("change", function() {
  116. $("#notes").slideUp(200);
  117. search_data["project"] = get_multi_checkbox_check_list("project-option", "p");
  118. set_select_text("project", false);
  119. search_data["notes"] = [];
  120. search_data["project"].forEach(element => {
  121. search_data["notes"] = search_data["notes"].concat(db_table["notes"][element]);
  122. });
  123. notes_show_id_list = [];
  124. search_data["notes"].forEach(element => {
  125. for(i=0; i<notes_button_list.length; i++) {
  126. if(notes_button_list[i] == element) {
  127. notes_show_id_list.push(i);
  128. }
  129. }
  130. });
  131. show_select_option("notes", notes_show_id_list, "n", true);
  132. if($(".project-option:checked").length < $(".project-button:visible").length) {
  133. $("#project-any").prop("checked", false);
  134. } else {
  135. $("#project-any").prop("checked", true);
  136. }
  137. reset_checkbox("type", "t", true);
  138. });
  139. $(".multiselect #type-any").on("change", function() {
  140. $("#notes").slideUp(200);
  141. if(this.checked) {
  142. search_data["type"] = [];
  143. $(".type-button:visible").prop("checked", true);
  144. $(".type-button:visible").each(function(){
  145. search_data["type"].push($(this).find("input").attr("id").replace("t", ""));
  146. $(this).find("input").prop("checked", true);
  147. });
  148. } else {
  149. search_data["type"] = [];
  150. $(".type-option").prop("checked", false);
  151. }
  152. set_select_text("type", false);
  153. reset_checkbox("notes", "n", true);
  154. });
  155. $(".multiselect .type-option").on("change", function() {
  156. search_data["type"] = get_multi_checkbox_check_list("type-option", "t");
  157. set_select_text("type", false);
  158. if($(".type-option:checked").length < $(".type-button:visible").length) {
  159. $("#type-any").prop("checked", false);
  160. } else {
  161. $("#type-any").prop("checked", true);
  162. }
  163. if($("#t3").prop("checked")) {
  164. $("#notes").slideDown(200);
  165. reset_checkbox("notes", "n", true);
  166. } else {
  167. $("#notes").slideUp(200);
  168. }
  169. });
  170. $(".multiselect #notes-any").on("change", function() {
  171. if(this.checked) {
  172. search_data["notes"] = [];
  173. $(".notes-button:visible").prop("checked", true);
  174. $(".notes-button:visible").each(function(){
  175. search_data["notes"].push(notes_button_list[parseInt($(this).find("input").attr("id").replace("n", ""))]);
  176. $(this).find("input").prop("checked", true);
  177. });
  178. } else {
  179. search_data["notes"] = [];
  180. $(".notes-option").prop("checked", false);
  181. }
  182. set_select_text("notes", false);
  183. });
  184. $(".multiselect .notes-option").on("change", function() {
  185. search_data["notes"] = get_multi_checkbox_check_list("notes-option", "n");
  186. set_select_text("notes", false);
  187. if($(".notes-option:checked").length < $(".notes-button:visible").length) {
  188. $("#notes-any").prop("checked", false);
  189. } else {
  190. $("#notes-any").prop("checked", true);
  191. }
  192. });
  193. });
  194. function merge_string_to_list(string_list) {
  195. output = [];
  196. string_list.forEach(element => {
  197. output = output.concat(element.split(","));
  198. });
  199. return output;
  200. }
  201. function string_concat_list(name, target_list) {
  202. output_list = [];
  203. target_list.forEach(element => {
  204. output_list.push(name + element);
  205. });
  206. return output_list;
  207. }
  208. function get_multi_checkbox_check_list(checkbox_class, name_replace) {
  209. output = [];
  210. var $select_option = $("."+checkbox_class+":checked");
  211. $select_option.each(function(){
  212. if(checkbox_class == "notes-option") {
  213. output.push($(this).attr('value'));
  214. } else {
  215. output.push($(this).attr('id').replace(name_replace, ""));
  216. }
  217. });
  218. return output;
  219. }
  220. function set_select_text(address, lock) {
  221. //unlock select bar
  222. $("#"+address+" select").prop("disabled", false);
  223. //get check number
  224. check_length = $("."+address+"-option:checked").length;
  225. //get option name that show on select bar
  226. show_list = [];
  227. $("."+address+"-option:checked").each(function() {
  228. show_list = show_list.concat($(this).attr("value"));
  229. });
  230. //set select bar text
  231. if(check_length == 0){
  232. if(lock) {
  233. $("#"+address+" select option").text("無符合條件選項");
  234. $("#"+address+" select").prop("disabled", true);
  235. } else {
  236. $("#"+address+" select option").text("未選擇任何專案");
  237. }
  238. } else {
  239. if(check_length > 2) {
  240. $("#"+address+" select option").text("已選擇 "+check_length+" 項");
  241. } else {
  242. $("#"+address+" select option").text(show_list);
  243. }
  244. }
  245. }
  246. function show_select_option(address, show_list, id_name, lock) {
  247. //init option
  248. $("#" + address + " .checkboxes input").prop("checked", false);
  249. $("#" + address + " .checkboxes label").css("display", "none");
  250. //show option
  251. show_list.forEach(element => {
  252. $("#"+id_name+element).prop("checked", true);
  253. $("#"+id_name+element).parent().css("display", "block");
  254. });
  255. if(show_list.length) {
  256. $("#" + address + " #" + address + "-any").prop("checked", true);
  257. $("#" + address + " #" + address + "-any").parent().css("display", "block");
  258. }
  259. set_select_text(address, lock);
  260. }
  261. function reset_checkbox(checkbox_class, id_name, lock) {
  262. search_data[checkbox_class] = [];
  263. $("#"+checkbox_class+" ." + checkbox_class + "-button").each(function() {
  264. if($(this).css("display") == "block") {
  265. $(this).find("input").prop("checked", true);
  266. if(checkbox_class == "notes") {
  267. search_data[checkbox_class] = search_data[checkbox_class].concat($(this).find("input").attr("value"));
  268. } else {
  269. search_data[checkbox_class] = search_data[checkbox_class].concat($(this).find("input").attr("id").replace(id_name, ""));
  270. }
  271. }
  272. });
  273. $("#"+checkbox_class+" #" + checkbox_class + "-any").prop("checked", true);
  274. set_select_text(checkbox_class, lock)
  275. }