You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

_properties.html.erb 7.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. <% if @category.isSpecial -%>
  2. <%= render 'special', :url => url_for(:controller => "#{@category.key}_configuration") -%>
  3. <% else -%>
  4. <form onsubmit="$j('#submit_settings').hide();
  5. $j('#loading_settings').show();
  6. $j.ajax({ url:'<%= url_for :controller => 'settings', :action => 'update', :category => @category.key, :subcategory => @subcategory.key, :resource_id => (@resource && @resource.id) -%>',
  7. type:'post',
  8. success:function(responseHTML){$j('#properties').html($j(responseHTML));$j('#loading_settings').hide();$j('#submit_settings').show()},
  9. data:$j(this).serialize()});
  10. return false;"
  11. method='post'
  12. action='#'
  13. autocomplete="off"
  14. >
  15. <% subcategories = @subcategories_per_categories[@category] || [] -%>
  16. <ul class="tabs">
  17. <% subcategories.each do |subcategory| -%>
  18. <li>
  19. <% if @resource %>
  20. <a <% if @subcategory==subcategory %>class="selected"<% end -%> href="<%= url_for(:controller => 'project', :action => 'settings', :id => nil) -%>?id=<%= url_encode(@resource.key) -%>&category=<%= url_encode(@category.key) -%>&subcategory=<%= url_encode(subcategory.key) -%>"><%= h subcategory_name(@category, subcategory) -%></a>
  21. <% else %>
  22. <%= link_to subcategory_name(@category, subcategory), {:controller => 'settings', :action =>'index', :category => @category.key, :subcategory => subcategory.key}, :class => @subcategory==subcategory ? 'selected' : nil -%>
  23. <% end %>
  24. </li>
  25. <% end -%>
  26. </ul>
  27. <% if @subcategory.isSpecial %>
  28. <%= render 'special', :url => url_for(:controller => "#{@subcategory.key}_configuration") -%>
  29. <% else %>
  30. <% if @subcategory.key == @category.key && !category_desc(@category).blank? -%>
  31. <p class="categoryDescription"><%= category_desc(@category) -%> </p>
  32. <% end -%>
  33. <% if @subcategory.key != @category.key && !subcategory_desc(@category, @subcategory).blank? -%>
  34. <p class="categoryDescription" colspan="2"><%= subcategory_desc(@category, @subcategory) -%> </p>
  35. <% end -%>
  36. <table class="marginbottom10">
  37. <tbody>
  38. <% by_property_index_or_name(@definitions).each do |property| -%>
  39. <tr class="property" id="block_<%= property.key -%>">
  40. <th>
  41. <h3><%= property_name(property) -%></h3>
  42. </th>
  43. <td>
  44. <% value = property_value(property) -%>
  45. <% if property.multi_values -%>
  46. <% value.each_with_index do |sub_value, index| -%>
  47. <%= render "settings/multi_value", :property => property, :value => sub_value, :hide_delete => index == 0 -%>
  48. <% end -%>
  49. <div class="template" style="display:none;">
  50. <%= render "settings/multi_value", :property => property, :value => nil, :hide_delete => false -%>
  51. </div>
  52. <button class="add_value"><%= message('settings.add') -%></button>
  53. <br/>
  54. <% else -%>
  55. <%= render "settings/single_value", :property => property, :value => value -%>
  56. <% end -%>
  57. <%= render "settings/error", :key => property.key -%>
  58. <!-- SONAR-4707 Don't display default value for property sets -->
  59. <% if property.fields.blank? %>
  60. <% default_prop_value = (@resource ? Property.value(property.key, nil, property.defaultValue) : property.defaultValue) -%>
  61. <% unless default_prop_value.blank? -%>
  62. <div class="note"><%= message('default') %>: <%= property.type.to_s=='PASSWORD' ? '********' : h(default_prop_value) -%></div>
  63. <% else -%>
  64. <!-- SONAR-5162 When no default value, leave a space to add a separation with the description or the key -->
  65. <p class="marginbottom10"></p>
  66. <% end -%>
  67. <% end -%>
  68. <% desc=property_description(property) -%>
  69. <% unless desc.blank? %>
  70. <p class="marginbottom10"><%= desc -%></p>
  71. <% end -%>
  72. <div class="note"><%= message('key') -%>:&nbsp;<%= property.key -%></div>
  73. </td>
  74. </tr>
  75. <% end -%>
  76. </tbody>
  77. </table>
  78. <% unless @definitions.empty? %>
  79. <div class="marginbottom10" style="padding-left: 5px;">
  80. <%= hidden_field_tag('page_version', (params[:page_version] || 0).to_i + 1) -%>
  81. <%= submit_tag(message('settings.save_category', :params => [subcategory_name(@category, @subcategory)]), :id => 'submit_settings') -%>
  82. <img src="<%= ApplicationController.root_context -%>/images/loading.gif" id="loading_settings" style="display:none;">
  83. </div>
  84. <% end %>
  85. <% if @category.key() == 'exclusions' -%>
  86. <div class="help marginbottom10" style="margin-left: -1px">
  87. <h2>Wildcards</h2>
  88. <p>Following rules are applied:</p>
  89. <table class="data">
  90. <thead><tr><th colspan="2"></th></tr></thead>
  91. <tr>
  92. <td>*</td>
  93. <td>Match zero or more characters</td>
  94. </tr>
  95. <tr>
  96. <td>**</td>
  97. <td>Match zero or more directories</td>
  98. </tr>
  99. <tr>
  100. <td>?</td>
  101. <td>Match a single character</td>
  102. </tr>
  103. </table>
  104. <br>
  105. <table class="data">
  106. <thead><tr><th>Example</th><th>Matches</th><th>Does not match</th></tr></thead>
  107. <tbody>
  108. <tr>
  109. <td>**/foo/*.js</td>
  110. <td>
  111. <ul>
  112. <li>src/foo/bar.js</li>
  113. <li>lib/ui/foo/bar.js</li>
  114. </ul>
  115. </td>
  116. <td>
  117. <ul>
  118. <li>src/bar.js</li>
  119. <li>src/foo2/bar.js</li>
  120. </ul>
  121. </td>
  122. </tr>
  123. <tr>
  124. <td>src/foo/*bar*.js</td>
  125. <td>
  126. <ul>
  127. <li>src/foo/bar.js</li>
  128. <li>src/foo/bar1.js</li>
  129. <li>src/foo/bar123.js</li>
  130. <li>src/foo/123bar123.js</li>
  131. </ul>
  132. </td>
  133. <td>
  134. <ul>
  135. <li>src/foo/ui/bar.js</li>
  136. <li>src/bar.js</li>
  137. </ul>
  138. </td>
  139. </tr>
  140. <tr>
  141. <td>src/foo/**</td>
  142. <td>
  143. <ul>
  144. <li>src/foo/bar.js</li>
  145. <li>src/foo/ui/bar.js</li>
  146. </ul>
  147. </td>
  148. <td>
  149. <ul>
  150. <li>src/bar/foo/bar.js</li>
  151. <li>src/bar.js</li>
  152. </ul>
  153. </td>
  154. </tr>
  155. <tr>
  156. <td>**/foo?.js</td>
  157. <td>
  158. <ul>
  159. <li>src/foo1.js</li>
  160. <li>src/bar/foo1.js</li>
  161. </ul>
  162. </td>
  163. <td>
  164. <ul>
  165. <li>src/foo.js</li>
  166. <li>src/foo12.js</li>
  167. <li>src/12foo3.js</li>
  168. </ul>
  169. </td>
  170. </tr>
  171. </tbody>
  172. </table>
  173. </div>
  174. <% else
  175. help = category_help(@category)
  176. unless help.blank?
  177. -%>
  178. <div class="help marginbottom10" style="margin-left: -1px">
  179. <%= help -%>
  180. </div>
  181. <% end
  182. end
  183. -%>
  184. <% end %>
  185. </form>
  186. <% end -%>
  187. <script>
  188. $j(document)
  189. .on('click', '.delete', function () {
  190. $j(this).parents('.multi_value').remove();
  191. return false;
  192. })
  193. .on('click', '.add_value', function () {
  194. var template = $j(this).parents('.property').find('.template').last();
  195. template.clone().insertBefore(template).show();
  196. return false;
  197. })
  198. .on('keypress', 'form', function (e) {
  199. if (e.which == 13 && e.target.nodeName != "TEXTAREA") {
  200. /* See https://jira.sonarsource.com/browse/SONAR-4363 */
  201. submit_settings.click();
  202. return false;
  203. }
  204. });
  205. </script>