waterpolo.js 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. function addWaterpoloRow(obj)
  2. {
  3. var tpl = $('#conditionTpl').html();
  4. var $parentDiv = $(obj).parents('.condition-div');
  5. $('<div class="molecule-div condition-div">' + tpl + '</tr>').insertAfter($parentDiv);
  6. var $addDiv = $parentDiv.next();
  7. $addDiv.find('#field').picker();
  8. $addDiv.find('#value').picker();
  9. $addDiv.find('#field').next().addClass('required');
  10. $addDiv.find('#value').next().addClass('required');
  11. var delCount = $('.molecule-div').find('.del-condition').length;
  12. if(delCount >= 2) $('.molecule-div').find('.del-condition').eq(0).removeClass('hidden');
  13. refreshConditionText();
  14. }
  15. function deleteWaterpoloRow(obj)
  16. {
  17. $(obj).parents('.condition-div').remove();
  18. var delCount = $('.molecule-div').find('.del-condition').length;
  19. if(delCount == 1) $('.molecule-div').find('.del-condition').eq(0).addClass('hidden');
  20. refreshConditionText();
  21. refreshConditions();
  22. refreshChart();
  23. }
  24. function refreshConditionText()
  25. {
  26. $('#chartForm .table-form .molecule-div').find('.text-condition').each(function(index)
  27. {
  28. var text = index == 0 ? chartLang.condition : chartLang.and;
  29. $(this).text(text);
  30. });
  31. }
  32. function validateWaterpolo(showError)
  33. {
  34. var chart = DataStorage.chart;
  35. var formSettings = chart.settings[0];
  36. var type = formSettings.type;
  37. var chartSetting = chartSettings[type];
  38. var multiColumn = multiColumns[type];
  39. var isReady = true;
  40. ['goal', 'calc'].forEach(function(field)
  41. {
  42. var error = '<div id="' + field + 'Label"' + ' class="text-danger help-text">' + chartLang.fieldEmpty + '</div>';
  43. $('#' + field + 'Label').remove();
  44. $('#' + field).removeClass('has-error');
  45. if(!formSettings[field] || formSettings[field] == '')
  46. {
  47. isReady = false;
  48. if(showError)
  49. {
  50. $('#' + field).addClass('has-error');
  51. $('#' + field).next().after(error);
  52. }
  53. }
  54. });
  55. ['field', 'value'].forEach(function(field)
  56. {
  57. var error = '<div id="' + field + 'Label"' + ' class="text-danger help-text">' + chartLang.fieldEmpty + '</div>';
  58. $('#chartForm .table-form .molecule-div').find('.multi-' + field).each(function()
  59. {
  60. $(this).parent('div').find('#' + field + 'Label').remove();
  61. $(this).parent('div').find('#' + field).removeClass('has-error');
  62. if($(this).val().length == 0)
  63. {
  64. isReady = false;
  65. if(showError)
  66. {
  67. $(this).parent('div').find('#' + field).addClass('has-error');
  68. $(this).parent('div').find('#' + field).next().after(error);
  69. }
  70. }
  71. })
  72. });
  73. return isReady;
  74. }
  75. async function waterpoloChange($obj)
  76. {
  77. $obj = $($obj);
  78. var chart = DataStorage.clone('chart');
  79. var nowField = $obj.attr('id')
  80. var nowValue = $obj.val();
  81. if(nowField == 'goal')
  82. {
  83. chart.settings[0]['calc'] = '';
  84. await updateCalcList(nowValue);
  85. }
  86. if(nowField == 'field') await updatefieldValue($obj, nowValue);
  87. if(['goal', 'calc'].includes(nowField))
  88. {
  89. chart.settings[0][nowField] = $('#chartForm .table-form').find('#' + nowField).val();
  90. DataStorage.chart = chart;
  91. updateDenominatorTip(chart.settings[0]);
  92. }
  93. else
  94. {
  95. refreshConditions();
  96. }
  97. refreshChart();
  98. }
  99. function refreshConditions()
  100. {
  101. var chart = DataStorage.clone('chart');
  102. var settingInfo = {};
  103. ['field', 'value'].forEach(function(field)
  104. {
  105. settingInfo[field] = [];
  106. $('#chartForm .table-form .molecule-div').find('.multi-' + field).each(function()
  107. {
  108. settingInfo[field].push($(this).val());
  109. });
  110. });
  111. var conditions = [];
  112. for(var index = 0; index < settingInfo.field.length; index ++)
  113. {
  114. var field = settingInfo.field[index];
  115. if(field.length == 0) continue;
  116. var value = settingInfo.value[index];
  117. conditions.push({field: field, condition: 'eq', value: value});
  118. }
  119. chart.settings[0]['conditions'] = conditions;
  120. DataStorage.chart = chart;
  121. }
  122. async function updateCalcList(fieldValue)
  123. {
  124. var type = fieldValue == '' ? '' : DataStorage.fieldSettings[fieldValue].type;
  125. return new Promise(function(resolve, reject)
  126. {
  127. $.post(createLink('chart', 'ajaxGetWaterpoloCalcOption'),
  128. {
  129. type: type
  130. }, function(data)
  131. {
  132. var $calcParent = $('#chartForm .table-form').find('#calc').parent();
  133. $calcParent.empty();
  134. $calcParent.append(data);
  135. $calcParent.find('#calc').picker();
  136. $calcParent.find('#calc').next().addClass('required');
  137. resolve();
  138. });
  139. });
  140. }
  141. async function updatefieldValue($obj, fieldValue)
  142. {
  143. var chart = DataStorage.clone('chart');
  144. return new Promise(function(resolve, reject)
  145. {
  146. $.post(createLink('chart', 'ajaxGetWaterpoloFieldOption'),
  147. {
  148. sql: chart.sql,
  149. fieldSetting: fieldValue ? DataStorage.fieldSettings[fieldValue] : []
  150. }, function(data)
  151. {
  152. var $valueParent = $obj.parents('.molecule-div').find('#value').parent();
  153. $valueParent.empty();
  154. $valueParent.append(data);
  155. $valueParent.find('#value').picker();
  156. $valueParent.find('#value').next().addClass('required');
  157. resolve();
  158. });
  159. });
  160. }
  161. function updateDenominatorTip(setting)
  162. {
  163. if(setting['goal'] !== undefined && setting['goal'] != '' && setting['calc'] !== undefined && setting['calc'] != '')
  164. {
  165. $.post(createLink('chart', 'ajaxGetDenominatorTip'),
  166. {
  167. setting: setting,
  168. fieldSettings: DataStorage.fieldSettings,
  169. langs: DataStorage.langs
  170. }, function(data)
  171. {
  172. $('.text-denominatorTip').text(data);
  173. });
  174. }
  175. else
  176. {
  177. $('.text-denominatorTip').text(chartLang.denominatorTip.empty);
  178. }
  179. }