]> source.dussan.org Git - redmine.git/commitdiff
Use a textarea for custom fields possible values (#2472).
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Fri, 16 Jan 2009 21:02:03 +0000 (21:02 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Fri, 16 Jan 2009 21:02:03 +0000 (21:02 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@2267 e93f8b46-1217-0410-a6f0-8f06a7374b81

34 files changed:
app/models/custom_field.rb
app/views/custom_fields/_form.rhtml
lang/bg.yml
lang/ca.yml
lang/cs.yml
lang/da.yml
lang/de.yml
lang/en.yml
lang/es.yml
lang/fi.yml
lang/fr.yml
lang/he.yml
lang/hu.yml
lang/it.yml
lang/ja.yml
lang/ko.yml
lang/lt.yml
lang/nl.yml
lang/no.yml
lang/pl.yml
lang/pt-br.yml
lang/pt.yml
lang/ro.yml
lang/ru.yml
lang/sk.yml
lang/sr.yml
lang/sv.yml
lang/th.yml
lang/tr.yml
lang/uk.yml
lang/vn.yml
lang/zh-tw.yml
lang/zh.yml
test/unit/custom_field_test.rb

index 79d12376af76c2d87772e555041966f2f874a9be..f277dc3496ea82431ae2764498e1d24b154574b4 100644 (file)
@@ -41,8 +41,6 @@ class CustomField < ActiveRecord::Base
   end
   
   def before_validation
-    # remove empty values
-    self.possible_values = self.possible_values.collect{|v| v unless v.empty?}.compact
     # make sure these fields are not searchable
     self.searchable = false if %w(int float date bool).include?(field_format)
     true
@@ -60,6 +58,15 @@ class CustomField < ActiveRecord::Base
     errors.add(:default_value, :activerecord_error_invalid) unless v.valid?
   end
   
+  # Makes possible_values accept a multiline string
+  def possible_values=(arg)
+    if arg.is_a?(Array)
+      write_attribute(:possible_values, arg.compact.collect(&:strip).select {|v| !v.blank?})
+    else
+      self.possible_values = arg.to_s.split(/[\n\r]+/)
+    end
+  end
+  
   # Returns a ORDER BY clause that can used to sort customized
   # objects by their value of the custom field.
   # Returns false, if the custom field can not be used for sorting.
index f4aee68706fcf6b8105d52671e3b1943c236a5d1..43ed5feb921142c555b6da3650b19090558d339e 100644 (file)
@@ -49,23 +49,6 @@ function toggle_custom_field_format() {
   }
 }
 
-function addValueField() {
-    var f = $$('p#custom_field_possible_values span');
-    p = document.getElementById("custom_field_possible_values");
-    var v = f[0].cloneNode(true);
-    v.childNodes[0].value = "";
-    p.appendChild(v);
-}
-
-function deleteValueField(e) {
-    var f = $$('p#custom_field_possible_values span');
-    if (f.length == 1) {
-        e.parentNode.childNodes[0].value = "";    
-    } else {
-        Element.remove(e.parentNode);
-    }
-}
-
 //]]>
 </script>
 
@@ -76,11 +59,10 @@ function deleteValueField(e) {
    <%= f.text_field :min_length, :size => 5, :no_label => true %> - 
    <%= f.text_field :max_length, :size => 5, :no_label => true %><br>(<%=l(:text_min_max_length_info)%>)</p>
 <p><%= f.text_field :regexp, :size => 50 %><br>(<%=l(:text_regexp_info)%>)</p>
-<p id="custom_field_possible_values"><label><%= l(:field_possible_values) %> <%= image_to_function "add.png", "addValueField();return false" %></label>
-<% (@custom_field.possible_values.to_a + [""]).each do |value| %>
-<span><%= text_field_tag 'custom_field[possible_values][]', value, :size => 30 %> <%= image_to_function "delete.png", "deleteValueField(this);return false" %><br /></span>
-<% end %>
-</p>
+<p id="custom_field_possible_values"><%= f.text_area :possible_values, :value => @custom_field.possible_values.to_a.join("\n"),
+                                                                                                                                                                                                                                                                                        :cols => 20,
+                                                                                                                                                                                                                                                                                        :rows => 15 %>
+<br /><em><%= l(:text_custom_field_possible_values_info) %></em></p>
 <p><%= @custom_field.field_format == 'bool' ? f.check_box(:default_value) : f.text_field(:default_value) %></p>
 </div>
 
index 61f75209da047c132390ceff1c660a63204b1b61..c73752bd2c596a89dbf00180fd1604c81aae2f56 100644 (file)
@@ -699,3 +699,4 @@ setting_diff_max_lines_displayed: Max number of diff lines displayed
 text_plugin_assets_writable: Plugin assets directory writable
 warning_attachments_not_saved: "%d file(s) could not be saved."
 button_create_and_continue: Create and continue
+text_custom_field_possible_values_info: 'One line for each value'
index 0ce265f9f2560455b3d4ddfdd886e86f6675702b..6585617c28d485bd733d073f1e8c4c37adff1e02 100644 (file)
@@ -700,3 +700,4 @@ setting_diff_max_lines_displayed: Max number of diff lines displayed
 text_plugin_assets_writable: Plugin assets directory writable\r
 warning_attachments_not_saved: "%d file(s) could not be saved."\r
 button_create_and_continue: Create and continue\r
+text_custom_field_possible_values_info: 'One line for each value'\r
index 534da679a2e4eab63ce6653e8e29c75e62b693b5..9e34ab9d5e495f6bec5da45f12f5d4af7c3add68 100644 (file)
@@ -704,3 +704,4 @@ setting_diff_max_lines_displayed: Max number of diff lines displayed
 text_plugin_assets_writable: Plugin assets directory writable
 warning_attachments_not_saved: "%d file(s) could not be saved."
 button_create_and_continue: Create and continue
+text_custom_field_possible_values_info: 'One line for each value'
index 2edbc5243bb99fb1aa7c6ef89aed29c63c352a5d..e447d4c7a0003b2d5d58478cd40ffaab80aeecad 100644 (file)
@@ -700,3 +700,4 @@ setting_diff_max_lines_displayed: Max number of diff lines displayed
 text_plugin_assets_writable: Plugin assets directory writable
 warning_attachments_not_saved: "%d file(s) could not be saved."
 button_create_and_continue: Create and continue
+text_custom_field_possible_values_info: 'One line for each value'
index c403b4817a9d18090e225452d0165481d5a95b6e..a0098a120e310a1eff7ce21bbead25af20debb4e 100644 (file)
@@ -701,3 +701,4 @@ enumeration_activities: Aktivitäten (Zeiterfassung)
 text_plugin_assets_writable: Plugin assets directory writable
 warning_attachments_not_saved: "%d file(s) could not be saved."
 button_create_and_continue: Create and continue
+text_custom_field_possible_values_info: 'One line for each value'
index 01ac078cf1b36eeed5e390881ab814c2cc446297..7ea1b150b9d260548c22e6e369145d6207014163 100644 (file)
@@ -676,6 +676,7 @@ text_enumeration_category_reassign_to: 'Reassign them to this value:'
 text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/email.yml and restart the application to enable them."
 text_repository_usernames_mapping: "Select or update the Redmine user mapped to each username found in the repository log.\nUsers with the same Redmine and repository username or email are automatically mapped."
 text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
+text_custom_field_possible_values_info: 'One line for each value'
 
 default_role_manager: Manager
 default_role_developper: Developer
index 1729292e767f4623ae9734a2b5847841360ab21f..36b1f468639afe1b8c6920f0c15a479fc60cf43c 100644 (file)
@@ -684,3 +684,4 @@ text_workflow_edit: Seleccionar un flujo de trabajo para actualizar
 text_plugin_assets_writable: Plugin assets directory writable
 warning_attachments_not_saved: "%d file(s) could not be saved."
 button_create_and_continue: Create and continue
+text_custom_field_possible_values_info: 'One line for each value'
index 244f858eb92dfb10f36ed883638507f9b88ce955..2bae1f84d321e3a886dcf89f24717eb40d2d6968 100644 (file)
@@ -699,3 +699,4 @@ setting_diff_max_lines_displayed: Max number of diff lines displayed
 text_plugin_assets_writable: Plugin assets directory writable
 warning_attachments_not_saved: "%d file(s) could not be saved."
 button_create_and_continue: Create and continue
+text_custom_field_possible_values_info: 'One line for each value'
index 374a0d868417f769584a4b2bd4552d8f4c2d3978..6465f9bd4999467c2cd186e9183bd45c29a2b96a 100644 (file)
@@ -676,6 +676,7 @@ text_enumeration_category_reassign_to: 'Réaffecter les objets à cette valeur:'
 text_email_delivery_not_configured: "L'envoi de mail n'est pas configuré, les notifications sont désactivées.\nConfigurez votre serveur SMTP dans config/email.yml et redémarrez l'application pour les activer."
 text_repository_usernames_mapping: "Vous pouvez sélectionner ou modifier l'utilisateur Redmine associé à chaque nom d'utilisateur figurant dans l'historique du dépôt.\nLes utilisateurs avec le même identifiant ou la même adresse mail seront automatiquement associés."
 text_diff_truncated: '... Ce différentiel a été tronqué car il excède la taille maximale pouvant être affichée.'
+text_custom_field_possible_values_info: 'Une ligne par valeur'
 
 default_role_manager: Manager
 default_role_developper: Développeur
index b10b73296d101a0b2c4f65af7e37f9a0810ad808..f2bdd9217bfd04aff7271bfa5e08782289574da1 100644 (file)
@@ -699,3 +699,4 @@ text_plugin_assets_writable: Plugin assets directory writable
 text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
 warning_attachments_not_saved: "%d file(s) could not be saved."
 button_create_and_continue: Create and continue
+text_custom_field_possible_values_info: 'One line for each value'
index 059b3ee68e3333d058ff381c86480183aa01570f..be6bb0eb0520f72a4bcf032f3fab209653c6fb84 100644 (file)
@@ -700,3 +700,4 @@ setting_diff_max_lines_displayed: A megjelenítendő sorok száma (maximum) a di
 text_plugin_assets_writable: Plugin assets directory writable
 warning_attachments_not_saved: "%d file(s) could not be saved."
 button_create_and_continue: Create and continue
+text_custom_field_possible_values_info: 'One line for each value'
index f3798b477a675b0969a885a98fdad68aa054d218..85c8c6ae3685b6539c31a7c753b50c591fcbcbf8 100644 (file)
@@ -699,3 +699,4 @@ setting_diff_max_lines_displayed: Max number of diff lines displayed
 text_plugin_assets_writable: Plugin assets directory writable
 warning_attachments_not_saved: "%d file(s) could not be saved."
 button_create_and_continue: Create and continue
+text_custom_field_possible_values_info: 'One line for each value'
index c1279b3f92d62cf6cf5aac0cd0ba3471fe59626d..b215c01184a28cc5a35de723cc1b0db7cf7f1e4a 100644 (file)
@@ -700,3 +700,4 @@ setting_diff_max_lines_displayed: Max number of diff lines displayed
 text_plugin_assets_writable: Plugin assets directory writable
 warning_attachments_not_saved: "%d file(s) could not be saved."
 button_create_and_continue: Create and continue
+text_custom_field_possible_values_info: 'One line for each value'
index f7958f97bfe5935fadbbfcb2cb1d3836709e8356..28564676169bbae59805770dbae78faecc42e883 100644 (file)
@@ -699,3 +699,4 @@ setting_diff_max_lines_displayed: 차이점보기에 표시할 최대 줄수
 text_plugin_assets_writable: Plugin assets directory writable
 warning_attachments_not_saved: "%d file(s) could not be saved."
 button_create_and_continue: Create and continue
+text_custom_field_possible_values_info: 'One line for each value'
index 3cdbcf09c2357f42923b812e3db3b329ceb7076a..8f530e5eb06b97bc5c991aa804cdd48342334793 100644 (file)
@@ -701,3 +701,4 @@ enumeration_activities: Veiklos (laiko sekimas)
 text_plugin_assets_writable: Plugin assets directory writable
 warning_attachments_not_saved: "%d file(s) could not be saved."
 button_create_and_continue: Create and continue
+text_custom_field_possible_values_info: 'One line for each value'
index ed10b4db6e095d910a6e1b21c7c8abcf574e9abf..b61829bb7109b1832f4d242fab7bfb2d8d2e3bdc 100644 (file)
@@ -701,3 +701,4 @@ setting_diff_max_lines_displayed: Max number of diff lines displayed
 text_plugin_assets_writable: Plugin assets directory writable
 warning_attachments_not_saved: "%d file(s) could not be saved."
 button_create_and_continue: Create and continue
+text_custom_field_possible_values_info: 'One line for each value'
index c8f131ff9230e5476d818d2a08a77375da1f5032..3689d8df165801a4b874c0f944413ebc1c53645e 100644 (file)
@@ -700,3 +700,4 @@ setting_diff_max_lines_displayed: Max number of diff lines displayed
 text_plugin_assets_writable: Plugin assets directory writable
 warning_attachments_not_saved: "%d file(s) could not be saved."
 button_create_and_continue: Create and continue
+text_custom_field_possible_values_info: 'One line for each value'
index 6b28f0e0d8707378937cbaf5436669e8843a0f4c..98b2197d4c0b1df2bf6161204271ec71ad43a5b7 100644 (file)
@@ -718,3 +718,4 @@ setting_diff_max_lines_displayed: Maksymalna liczba linii różnicy do pokazania
 text_plugin_assets_writable: Plugin assets directory writable
 warning_attachments_not_saved: "%d file(s) could not be saved."
 button_create_and_continue: Create and continue
+text_custom_field_possible_values_info: 'One line for each value'
index ecbbc0ce524797152b1614592c83c72294b3b6c2..846b4d93e62ba9886f76d4ce21d38a33e7946d92 100644 (file)
@@ -700,3 +700,4 @@ setting_diff_max_lines_displayed: Max number of diff lines displayed
 text_plugin_assets_writable: Plugin assets directory writable\r
 warning_attachments_not_saved: "%d file(s) could not be saved."\r
 button_create_and_continue: Create and continue\r
+text_custom_field_possible_values_info: 'One line for each value'\r
index ec42386de44653f4230042fb4afbea45b56cb8c8..6ed741584eed97ed3ead4303968fe69d15b458b2 100644 (file)
@@ -701,3 +701,4 @@ setting_diff_max_lines_displayed: Número máximo de linhas de diff mostradas
 text_plugin_assets_writable: Plugin assets directory writable
 warning_attachments_not_saved: "%d file(s) could not be saved."
 button_create_and_continue: Create and continue
+text_custom_field_possible_values_info: 'One line for each value'
index b0df48d261838784a400b3acb3641a57a6280063..6799b4f1be191fd10568d0b4a8a0136b33153fea 100644 (file)
@@ -699,3 +699,4 @@ setting_diff_max_lines_displayed: Max number of diff lines displayed
 text_plugin_assets_writable: Plugin assets directory writable
 warning_attachments_not_saved: "%d file(s) could not be saved."
 button_create_and_continue: Create and continue
+text_custom_field_possible_values_info: 'One line for each value'
index 4943eea0f607c3d6fcac169d0214fa3133fd3be3..6bfc64b6238b989321c5676f76988cbe9eba5d6c 100644 (file)
@@ -733,3 +733,4 @@ text_workflow_edit: Выберите роль и трекер для редак
 text_plugin_assets_writable: Plugin assets directory writable
 warning_attachments_not_saved: "%d file(s) could not be saved."
 button_create_and_continue: Create and continue
+text_custom_field_possible_values_info: 'One line for each value'
index ffae2d644fbe53cf3c82ec7f9dc73ba9268c7575..4d4d49e808fa884423e79741bf08b81084f5e905 100644 (file)
@@ -705,3 +705,4 @@ setting_diff_max_lines_displayed: Max number of diff lines displayed
 text_plugin_assets_writable: Plugin assets directory writable\r
 warning_attachments_not_saved: "%d file(s) could not be saved."\r
 button_create_and_continue: Create and continue\r
+text_custom_field_possible_values_info: 'One line for each value'\r
index 7070c4a22ae58c70560eb7b0c1a934f5a0b23c6f..c045d55403e09d930666ef1c2fe81ae3c08ae9c1 100644 (file)
@@ -700,3 +700,4 @@ setting_diff_max_lines_displayed: Max number of diff lines displayed
 text_plugin_assets_writable: Plugin assets directory writable
 warning_attachments_not_saved: "%d file(s) could not be saved."
 button_create_and_continue: Create and continue
+text_custom_field_possible_values_info: 'One line for each value'
index 852c7fe50f27c54ca6bd7d0e4f103e74c87252ef..a7262356aec3279d3c2f80275032779f74b8382f 100644 (file)
@@ -700,3 +700,4 @@ enumeration_activities: Aktiviteter (tidsuppföljning)
 text_plugin_assets_writable: Plugin assets directory writable
 warning_attachments_not_saved: "%d file(s) could not be saved."
 button_create_and_continue: Create and continue
+text_custom_field_possible_values_info: 'One line for each value'
index c0a38592ba55b5a6f6cca98682ccb373f321b712..0e6e3646cc0d06b36335b232e676ff564d9eaa56 100644 (file)
@@ -702,3 +702,4 @@ setting_diff_max_lines_displayed: Max number of diff lines displayed
 text_plugin_assets_writable: Plugin assets directory writable
 warning_attachments_not_saved: "%d file(s) could not be saved."
 button_create_and_continue: Create and continue
+text_custom_field_possible_values_info: 'One line for each value'
index 81363678c28f16e4c2c0ade547cfecf87c8c1f30..fe214049d384a4ed0b51fbefe6b47b54f4c28853 100644 (file)
@@ -700,3 +700,4 @@ setting_diff_max_lines_displayed: Max number of diff lines displayed
 text_plugin_assets_writable: Plugin assets directory writable
 warning_attachments_not_saved: "%d file(s) could not be saved."
 button_create_and_continue: Create and continue
+text_custom_field_possible_values_info: 'One line for each value'
index be121cb5ce1062139401819d036bcdbfd7e8d6d3..55d642b31e4d4e9191d79b4f380a1cc3b861c89c 100644 (file)
@@ -701,3 +701,4 @@ setting_diff_max_lines_displayed: Max number of diff lines displayed
 text_plugin_assets_writable: Plugin assets directory writable
 warning_attachments_not_saved: "%d file(s) could not be saved."
 button_create_and_continue: Create and continue
+text_custom_field_possible_values_info: 'One line for each value'
index 908e2326d81db0c1bc3edcd426cf53539f2139ef..15b62e1d3dbb3f86fad8e5c1075beaf43af365d6 100644 (file)
@@ -702,3 +702,4 @@ setting_diff_max_lines_displayed: Max number of diff lines displayed
 text_plugin_assets_writable: Plugin assets directory writable\r
 warning_attachments_not_saved: "%d file(s) could not be saved."\r
 button_create_and_continue: Create and continue\r
+text_custom_field_possible_values_info: 'One line for each value'\r
index 50eccf4346fb370ffeae667e562bf43ac3bfc110..6f6740b75232a02da63e7440bb5e7a062eebc7a4 100644 (file)
@@ -701,3 +701,4 @@ enumeration_activities: 活動 (時間追蹤)
 text_plugin_assets_writable: Plugin assets directory writable
 warning_attachments_not_saved: "%d file(s) could not be saved."
 button_create_and_continue: Create and continue
+text_custom_field_possible_values_info: 'One line for each value'
index 989f329c6c465e23adceffe8d749df2588fbee17..cceaff0f994b318eed7af25f704e55df9c788eeb 100644 (file)
@@ -701,3 +701,4 @@ enumeration_activities: 活动(时间跟踪)
 text_plugin_assets_writable: Plugin assets directory writable
 warning_attachments_not_saved: "%d file(s) could not be saved."
 button_create_and_continue: Create and continue
+text_custom_field_possible_values_info: 'One line for each value'
index 1b9c9aea90ca6193b9da6889659301abb5fb5217..2f17d99cfb57fe8f022afa2146ad6d92cb73aec6 100644 (file)
@@ -25,6 +25,24 @@ class CustomFieldTest < Test::Unit::TestCase
     assert field.save
   end
   
+  def test_possible_values_should_accept_an_array
+    field = CustomField.new
+    field.possible_values = ["One value", ""]
+    assert_equal ["One value"], field.possible_values
+  end
+  
+  def test_possible_values_should_accept_a_string
+    field = CustomField.new
+    field.possible_values = "One value"
+    assert_equal ["One value"], field.possible_values
+  end
+  
+  def test_possible_values_should_accept_a_multiline_string
+    field = CustomField.new
+    field.possible_values = "One value\nAnd another one  \r\n \n"
+    assert_equal ["One value", "And another one"], field.possible_values
+  end
+  
   def test_destroy
     field = CustomField.find(1)
     assert field.destroy