@@ -1,2 +1,3 | |||||
1 | <p><%= f.select :default_value, [[]]+@custom_field.possible_values_options %></p> |
|
1 | <p><%= f.select :default_value, [[]]+@custom_field.possible_values_options %></p> | |
|
2 | <p><%= f.text_field :url_pattern, :size => 50, :label => :label_link_values_to %></p> | |||
2 | <p><%= edit_tag_style_tag f %></p> |
|
3 | <p><%= edit_tag_style_tag f %></p> |
@@ -1,2 +1,3 | |||||
1 | <p><%= f.text_field(:default_value, :size => 10) %></p> |
|
1 | <p><%= f.text_field(:default_value, :size => 10) %></p> | |
2 | <%= calendar_for('custom_field_default_value') %> |
|
2 | <%= calendar_for('custom_field_default_value') %> | |
|
3 | <p><%= f.text_field :url_pattern, :size => 50, :label => :label_link_values_to %></p> |
@@ -3,4 +3,5 | |||||
3 | <em class="info"><%= l(:text_custom_field_possible_values_info) %></em> |
|
3 | <em class="info"><%= l(:text_custom_field_possible_values_info) %></em> | |
4 | </p> |
|
4 | </p> | |
5 | <p><%= f.text_field(:default_value) %></p> |
|
5 | <p><%= f.text_field(:default_value) %></p> | |
|
6 | <p><%= f.text_field :url_pattern, :size => 50, :label => :label_link_values_to %></p> | |||
6 | <p><%= edit_tag_style_tag f %></p> |
|
7 | <p><%= edit_tag_style_tag f %></p> |
@@ -1,2 +1,3 | |||||
1 | <%= render :partial => 'custom_fields/formats/regexp', :locals => {:f => f, :custom_field => custom_field} %> |
|
1 | <%= render :partial => 'custom_fields/formats/regexp', :locals => {:f => f, :custom_field => custom_field} %> | |
2 | <p><%= f.text_field(:default_value) %></p> |
|
2 | <p><%= f.text_field(:default_value) %></p> | |
|
3 | <p><%= f.text_field :url_pattern, :size => 50, :label => :label_link_values_to %></p> |
@@ -1,3 +1,4 | |||||
1 | <%= render :partial => 'custom_fields/formats/regexp', :locals => {:f => f, :custom_field => custom_field} %> |
|
1 | <%= render :partial => 'custom_fields/formats/regexp', :locals => {:f => f, :custom_field => custom_field} %> | |
2 | <p><%= f.check_box :text_formatting, {:label => :setting_text_formatting}, 'full', '' %></p> |
|
2 | <p><%= f.check_box :text_formatting, {:label => :setting_text_formatting, :data => {:disables => '#custom_field_url_pattern'}}, 'full', '' %></p> | |
3 | <p><%= f.text_field(:default_value) %></p> |
|
3 | <p><%= f.text_field(:default_value) %></p> | |
|
4 | <p><%= f.text_field :url_pattern, :size => 50, :label => :label_link_values_to %></p> |
@@ -1105,3 +1105,4 ar: | |||||
1105 | label_only: only |
|
1105 | label_only: only | |
1106 | label_drop_down_list: drop-down list |
|
1106 | label_drop_down_list: drop-down list | |
1107 | label_checkboxes: checkboxes |
|
1107 | label_checkboxes: checkboxes | |
|
1108 | label_link_values_to: Link values to URL |
@@ -1202,3 +1202,4 az: | |||||
1202 | label_only: only |
|
1202 | label_only: only | |
1203 | label_drop_down_list: drop-down list |
|
1203 | label_drop_down_list: drop-down list | |
1204 | label_checkboxes: checkboxes |
|
1204 | label_checkboxes: checkboxes | |
|
1205 | label_link_values_to: Link values to URL |
@@ -1102,3 +1102,4 bg: | |||||
1102 | description_date_from: ΠΡΠ²Π΅Π΄Π΅ΡΠ΅ Π½Π°ΡΠ°Π»Π½Π° Π΄Π°ΡΠ° |
|
1102 | description_date_from: ΠΡΠ²Π΅Π΄Π΅ΡΠ΅ Π½Π°ΡΠ°Π»Π½Π° Π΄Π°ΡΠ° | |
1103 | description_date_to: ΠΡΠ²Π΅Π΄Π΅ΡΠ΅ ΠΊΡΠ°ΠΉΠ½Π° Π΄Π°ΡΠ° |
|
1103 | description_date_to: ΠΡΠ²Π΅Π΄Π΅ΡΠ΅ ΠΊΡΠ°ΠΉΠ½Π° Π΄Π°ΡΠ° | |
1104 | text_repository_identifier_info: 'ΠΠΎΠ·Π²ΠΎΠ»Π΅Π½ΠΈ ΡΠ° ΠΌΠ°Π»ΠΊΠΈ Π±ΡΠΊΠ²ΠΈ (a-z), ΡΠΈΡΡΠΈ, ΡΠΈΡΠ΅ΡΠ° ΠΈ _.<br />ΠΡΠΎΠΌΡΠ½Π° ΡΠ»Π΅Π΄ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ ΠΌΡ Π½Π΅ Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½Π°.' |
|
1104 | text_repository_identifier_info: 'ΠΠΎΠ·Π²ΠΎΠ»Π΅Π½ΠΈ ΡΠ° ΠΌΠ°Π»ΠΊΠΈ Π±ΡΠΊΠ²ΠΈ (a-z), ΡΠΈΡΡΠΈ, ΡΠΈΡΠ΅ΡΠ° ΠΈ _.<br />ΠΡΠΎΠΌΡΠ½Π° ΡΠ»Π΅Π΄ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ ΠΌΡ Π½Π΅ Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½Π°.' | |
|
1105 | label_link_values_to: Link values to URL |
@@ -1118,3 +1118,4 bs: | |||||
1118 | label_only: only |
|
1118 | label_only: only | |
1119 | label_drop_down_list: drop-down list |
|
1119 | label_drop_down_list: drop-down list | |
1120 | label_checkboxes: checkboxes |
|
1120 | label_checkboxes: checkboxes | |
|
1121 | label_link_values_to: Link values to URL |
@@ -1107,3 +1107,4 ca: | |||||
1107 | label_only: only |
|
1107 | label_only: only | |
1108 | label_drop_down_list: drop-down list |
|
1108 | label_drop_down_list: drop-down list | |
1109 | label_checkboxes: checkboxes |
|
1109 | label_checkboxes: checkboxes | |
|
1110 | label_link_values_to: Link values to URL |
@@ -1108,3 +1108,4 cs: | |||||
1108 | label_only: only |
|
1108 | label_only: only | |
1109 | label_drop_down_list: drop-down list |
|
1109 | label_drop_down_list: drop-down list | |
1110 | label_checkboxes: checkboxes |
|
1110 | label_checkboxes: checkboxes | |
|
1111 | label_link_values_to: Link values to URL |
@@ -1122,3 +1122,4 da: | |||||
1122 | label_only: only |
|
1122 | label_only: only | |
1123 | label_drop_down_list: drop-down list |
|
1123 | label_drop_down_list: drop-down list | |
1124 | label_checkboxes: checkboxes |
|
1124 | label_checkboxes: checkboxes | |
|
1125 | label_link_values_to: Link values to URL |
@@ -1117,3 +1117,4 de: | |||||
1117 | label_only: only |
|
1117 | label_only: only | |
1118 | label_drop_down_list: drop-down list |
|
1118 | label_drop_down_list: drop-down list | |
1119 | label_checkboxes: checkboxes |
|
1119 | label_checkboxes: checkboxes | |
|
1120 | label_link_values_to: Link values to URL |
@@ -1105,3 +1105,4 el: | |||||
1105 | label_only: only |
|
1105 | label_only: only | |
1106 | label_drop_down_list: drop-down list |
|
1106 | label_drop_down_list: drop-down list | |
1107 | label_checkboxes: checkboxes |
|
1107 | label_checkboxes: checkboxes | |
|
1108 | label_link_values_to: Link values to URL |
@@ -1107,3 +1107,4 en-GB: | |||||
1107 | label_only: only |
|
1107 | label_only: only | |
1108 | label_drop_down_list: drop-down list |
|
1108 | label_drop_down_list: drop-down list | |
1109 | label_checkboxes: checkboxes |
|
1109 | label_checkboxes: checkboxes | |
|
1110 | label_link_values_to: Link values to URL |
@@ -907,6 +907,7 en: | |||||
907 | label_only: only |
|
907 | label_only: only | |
908 | label_drop_down_list: drop-down list |
|
908 | label_drop_down_list: drop-down list | |
909 | label_checkboxes: checkboxes |
|
909 | label_checkboxes: checkboxes | |
|
910 | label_link_values_to: Link values to URL | |||
910 |
|
911 | |||
911 | button_login: Login |
|
912 | button_login: Login | |
912 | button_submit: Submit |
|
913 | button_submit: Submit |
@@ -1140,3 +1140,4 es: | |||||
1140 | label_only: only |
|
1140 | label_only: only | |
1141 | label_drop_down_list: drop-down list |
|
1141 | label_drop_down_list: drop-down list | |
1142 | label_checkboxes: checkboxes |
|
1142 | label_checkboxes: checkboxes | |
|
1143 | label_link_values_to: Link values to URL |
@@ -1118,3 +1118,4 et: | |||||
1118 | label_only: only |
|
1118 | label_only: only | |
1119 | label_drop_down_list: drop-down list |
|
1119 | label_drop_down_list: drop-down list | |
1120 | label_checkboxes: checkboxes |
|
1120 | label_checkboxes: checkboxes | |
|
1121 | label_link_values_to: Link values to URL |
@@ -1106,3 +1106,4 eu: | |||||
1106 | label_only: only |
|
1106 | label_only: only | |
1107 | label_drop_down_list: drop-down list |
|
1107 | label_drop_down_list: drop-down list | |
1108 | label_checkboxes: checkboxes |
|
1108 | label_checkboxes: checkboxes | |
|
1109 | label_link_values_to: Link values to URL |
@@ -1107,3 +1107,4 fa: | |||||
1107 | label_only: only |
|
1107 | label_only: only | |
1108 | label_drop_down_list: drop-down list |
|
1108 | label_drop_down_list: drop-down list | |
1109 | label_checkboxes: checkboxes |
|
1109 | label_checkboxes: checkboxes | |
|
1110 | label_link_values_to: Link values to URL |
@@ -1126,3 +1126,4 fi: | |||||
1126 | label_only: only |
|
1126 | label_only: only | |
1127 | label_drop_down_list: drop-down list |
|
1127 | label_drop_down_list: drop-down list | |
1128 | label_checkboxes: checkboxes |
|
1128 | label_checkboxes: checkboxes | |
|
1129 | label_link_values_to: Link values to URL |
@@ -883,6 +883,7 fr: | |||||
883 | label_only: seulement |
|
883 | label_only: seulement | |
884 | label_drop_down_list: liste dΓ©roulante |
|
884 | label_drop_down_list: liste dΓ©roulante | |
885 | label_checkboxes: cases Γ cocher |
|
885 | label_checkboxes: cases Γ cocher | |
|
886 | label_link_values_to: Lier les valeurs vers l'URL | |||
886 |
|
887 | |||
887 | button_login: Connexion |
|
888 | button_login: Connexion | |
888 | button_submit: Soumettre |
|
889 | button_submit: Soumettre |
@@ -1116,3 +1116,4 gl: | |||||
1116 | label_only: only |
|
1116 | label_only: only | |
1117 | label_drop_down_list: drop-down list |
|
1117 | label_drop_down_list: drop-down list | |
1118 | label_checkboxes: checkboxes |
|
1118 | label_checkboxes: checkboxes | |
|
1119 | label_link_values_to: Link values to URL |
@@ -1110,3 +1110,4 he: | |||||
1110 | label_only: only |
|
1110 | label_only: only | |
1111 | label_drop_down_list: drop-down list |
|
1111 | label_drop_down_list: drop-down list | |
1112 | label_checkboxes: checkboxes |
|
1112 | label_checkboxes: checkboxes | |
|
1113 | label_link_values_to: Link values to URL |
@@ -1106,3 +1106,4 hr: | |||||
1106 | label_only: only |
|
1106 | label_only: only | |
1107 | label_drop_down_list: drop-down list |
|
1107 | label_drop_down_list: drop-down list | |
1108 | label_checkboxes: checkboxes |
|
1108 | label_checkboxes: checkboxes | |
|
1109 | label_link_values_to: Link values to URL |
@@ -1124,3 +1124,4 | |||||
1124 | label_only: only |
|
1124 | label_only: only | |
1125 | label_drop_down_list: drop-down list |
|
1125 | label_drop_down_list: drop-down list | |
1126 | label_checkboxes: checkboxes |
|
1126 | label_checkboxes: checkboxes | |
|
1127 | label_link_values_to: Link values to URL |
@@ -1109,3 +1109,4 id: | |||||
1109 | label_only: only |
|
1109 | label_only: only | |
1110 | label_drop_down_list: drop-down list |
|
1110 | label_drop_down_list: drop-down list | |
1111 | label_checkboxes: checkboxes |
|
1111 | label_checkboxes: checkboxes | |
|
1112 | label_link_values_to: Link values to URL |
@@ -1104,3 +1104,4 it: | |||||
1104 | label_only: only |
|
1104 | label_only: only | |
1105 | label_drop_down_list: drop-down list |
|
1105 | label_drop_down_list: drop-down list | |
1106 | label_checkboxes: checkboxes |
|
1106 | label_checkboxes: checkboxes | |
|
1107 | label_link_values_to: Link values to URL |
@@ -1132,3 +1132,4 ja: | |||||
1132 | label_only: only |
|
1132 | label_only: only | |
1133 | label_drop_down_list: drop-down list |
|
1133 | label_drop_down_list: drop-down list | |
1134 | label_checkboxes: checkboxes |
|
1134 | label_checkboxes: checkboxes | |
|
1135 | label_link_values_to: Link values to URL |
@@ -1154,3 +1154,4 ko: | |||||
1154 | label_only: only |
|
1154 | label_only: only | |
1155 | label_drop_down_list: drop-down list |
|
1155 | label_drop_down_list: drop-down list | |
1156 | label_checkboxes: checkboxes |
|
1156 | label_checkboxes: checkboxes | |
|
1157 | label_link_values_to: Link values to URL |
@@ -1164,3 +1164,4 lt: | |||||
1164 | label_only: only |
|
1164 | label_only: only | |
1165 | label_drop_down_list: drop-down list |
|
1165 | label_drop_down_list: drop-down list | |
1166 | label_checkboxes: checkboxes |
|
1166 | label_checkboxes: checkboxes | |
|
1167 | label_link_values_to: Link values to URL |
@@ -1099,3 +1099,4 lv: | |||||
1099 | label_only: only |
|
1099 | label_only: only | |
1100 | label_drop_down_list: drop-down list |
|
1100 | label_drop_down_list: drop-down list | |
1101 | label_checkboxes: checkboxes |
|
1101 | label_checkboxes: checkboxes | |
|
1102 | label_link_values_to: Link values to URL |
@@ -1105,3 +1105,4 mk: | |||||
1105 | label_only: only |
|
1105 | label_only: only | |
1106 | label_drop_down_list: drop-down list |
|
1106 | label_drop_down_list: drop-down list | |
1107 | label_checkboxes: checkboxes |
|
1107 | label_checkboxes: checkboxes | |
|
1108 | label_link_values_to: Link values to URL |
@@ -1106,3 +1106,4 mn: | |||||
1106 | label_only: only |
|
1106 | label_only: only | |
1107 | label_drop_down_list: drop-down list |
|
1107 | label_drop_down_list: drop-down list | |
1108 | label_checkboxes: checkboxes |
|
1108 | label_checkboxes: checkboxes | |
|
1109 | label_link_values_to: Link values to URL |
@@ -1084,3 +1084,4 nl: | |||||
1084 | label_only: only |
|
1084 | label_only: only | |
1085 | label_drop_down_list: drop-down list |
|
1085 | label_drop_down_list: drop-down list | |
1086 | label_checkboxes: checkboxes |
|
1086 | label_checkboxes: checkboxes | |
|
1087 | label_link_values_to: Link values to URL |
@@ -1095,3 +1095,4 | |||||
1095 | label_only: only |
|
1095 | label_only: only | |
1096 | label_drop_down_list: drop-down list |
|
1096 | label_drop_down_list: drop-down list | |
1097 | label_checkboxes: checkboxes |
|
1097 | label_checkboxes: checkboxes | |
|
1098 | label_link_values_to: Link values to URL |
@@ -1127,3 +1127,4 pl: | |||||
1127 | label_only: only |
|
1127 | label_only: only | |
1128 | label_drop_down_list: drop-down list |
|
1128 | label_drop_down_list: drop-down list | |
1129 | label_checkboxes: checkboxes |
|
1129 | label_checkboxes: checkboxes | |
|
1130 | label_link_values_to: Link values to URL |
@@ -1125,3 +1125,4 pt-BR: | |||||
1125 | label_only: only |
|
1125 | label_only: only | |
1126 | label_drop_down_list: drop-down list |
|
1126 | label_drop_down_list: drop-down list | |
1127 | label_checkboxes: checkboxes |
|
1127 | label_checkboxes: checkboxes | |
|
1128 | label_link_values_to: Link values to URL |
@@ -1111,3 +1111,4 pt: | |||||
1111 | label_only: only |
|
1111 | label_only: only | |
1112 | label_drop_down_list: drop-down list |
|
1112 | label_drop_down_list: drop-down list | |
1113 | label_checkboxes: checkboxes |
|
1113 | label_checkboxes: checkboxes | |
|
1114 | label_link_values_to: Link values to URL |
@@ -1100,3 +1100,4 ro: | |||||
1100 | label_only: only |
|
1100 | label_only: only | |
1101 | label_drop_down_list: drop-down list |
|
1101 | label_drop_down_list: drop-down list | |
1102 | label_checkboxes: checkboxes |
|
1102 | label_checkboxes: checkboxes | |
|
1103 | label_link_values_to: Link values to URL |
@@ -1214,3 +1214,4 ru: | |||||
1214 | label_only: only |
|
1214 | label_only: only | |
1215 | label_drop_down_list: drop-down list |
|
1215 | label_drop_down_list: drop-down list | |
1216 | label_checkboxes: checkboxes |
|
1216 | label_checkboxes: checkboxes | |
|
1217 | label_link_values_to: Link values to URL |
@@ -1095,3 +1095,4 sk: | |||||
1095 | label_only: only |
|
1095 | label_only: only | |
1096 | label_drop_down_list: drop-down list |
|
1096 | label_drop_down_list: drop-down list | |
1097 | label_checkboxes: checkboxes |
|
1097 | label_checkboxes: checkboxes | |
|
1098 | label_link_values_to: Link values to URL |
@@ -1105,3 +1105,4 sl: | |||||
1105 | label_only: only |
|
1105 | label_only: only | |
1106 | label_drop_down_list: drop-down list |
|
1106 | label_drop_down_list: drop-down list | |
1107 | label_checkboxes: checkboxes |
|
1107 | label_checkboxes: checkboxes | |
|
1108 | label_link_values_to: Link values to URL |
@@ -1101,3 +1101,4 sq: | |||||
1101 | label_only: only |
|
1101 | label_only: only | |
1102 | label_drop_down_list: drop-down list |
|
1102 | label_drop_down_list: drop-down list | |
1103 | label_checkboxes: checkboxes |
|
1103 | label_checkboxes: checkboxes | |
|
1104 | label_link_values_to: Link values to URL |
@@ -1107,3 +1107,4 sr-YU: | |||||
1107 | label_only: only |
|
1107 | label_only: only | |
1108 | label_drop_down_list: drop-down list |
|
1108 | label_drop_down_list: drop-down list | |
1109 | label_checkboxes: checkboxes |
|
1109 | label_checkboxes: checkboxes | |
|
1110 | label_link_values_to: Link values to URL |
@@ -1106,3 +1106,4 sr: | |||||
1106 | label_only: only |
|
1106 | label_only: only | |
1107 | label_drop_down_list: drop-down list |
|
1107 | label_drop_down_list: drop-down list | |
1108 | label_checkboxes: checkboxes |
|
1108 | label_checkboxes: checkboxes | |
|
1109 | label_link_values_to: Link values to URL |
@@ -1143,3 +1143,4 sv: | |||||
1143 | label_only: only |
|
1143 | label_only: only | |
1144 | label_drop_down_list: drop-down list |
|
1144 | label_drop_down_list: drop-down list | |
1145 | label_checkboxes: checkboxes |
|
1145 | label_checkboxes: checkboxes | |
|
1146 | label_link_values_to: Link values to URL |
@@ -1102,3 +1102,4 th: | |||||
1102 | label_only: only |
|
1102 | label_only: only | |
1103 | label_drop_down_list: drop-down list |
|
1103 | label_drop_down_list: drop-down list | |
1104 | label_checkboxes: checkboxes |
|
1104 | label_checkboxes: checkboxes | |
|
1105 | label_link_values_to: Link values to URL |
@@ -1114,3 +1114,4 tr: | |||||
1114 | label_only: only |
|
1114 | label_only: only | |
1115 | label_drop_down_list: drop-down list |
|
1115 | label_drop_down_list: drop-down list | |
1116 | label_checkboxes: checkboxes |
|
1116 | label_checkboxes: checkboxes | |
|
1117 | label_link_values_to: Link values to URL |
@@ -1100,3 +1100,4 uk: | |||||
1100 | label_only: only |
|
1100 | label_only: only | |
1101 | label_drop_down_list: drop-down list |
|
1101 | label_drop_down_list: drop-down list | |
1102 | label_checkboxes: checkboxes |
|
1102 | label_checkboxes: checkboxes | |
|
1103 | label_link_values_to: Link values to URL |
@@ -1158,3 +1158,4 vi: | |||||
1158 | label_only: only |
|
1158 | label_only: only | |
1159 | label_drop_down_list: drop-down list |
|
1159 | label_drop_down_list: drop-down list | |
1160 | label_checkboxes: checkboxes |
|
1160 | label_checkboxes: checkboxes | |
|
1161 | label_link_values_to: Link values to URL |
@@ -1185,3 +1185,4 | |||||
1185 | description_date_from: θΌΈε ₯θ΅·ε§ζ₯ζ |
|
1185 | description_date_from: θΌΈε ₯θ΅·ε§ζ₯ζ | |
1186 | description_date_to: θΌΈε ₯η΅ζζ₯ζ |
|
1186 | description_date_to: θΌΈε ₯η΅ζζ₯ζ | |
1187 | text_repository_identifier_info: 'ε ε 許使η¨ε°ε―«θ±ζεζ― (a-z), ιΏζδΌ―ζΈε, θη·θεΊη·γ<br />δΈζ¦ε²εδΉεΎ, 代璼便η‘ζ³ε欑蒫ζ΄ζΉγ' |
|
1187 | text_repository_identifier_info: 'ε ε 許使η¨ε°ε―«θ±ζεζ― (a-z), ιΏζδΌ―ζΈε, θη·θεΊη·γ<br />δΈζ¦ε²εδΉεΎ, 代璼便η‘ζ³ε欑蒫ζ΄ζΉγ' | |
|
1188 | label_link_values_to: Link values to URL |
@@ -1106,3 +1106,4 zh: | |||||
1106 | label_only: only |
|
1106 | label_only: only | |
1107 | label_drop_down_list: drop-down list |
|
1107 | label_drop_down_list: drop-down list | |
1108 | label_checkboxes: checkboxes |
|
1108 | label_checkboxes: checkboxes | |
|
1109 | label_link_values_to: Link values to URL |
@@ -80,6 +80,8 module Redmine | |||||
80 | CustomField.store_accessor :format_store, *args |
|
80 | CustomField.store_accessor :format_store, *args | |
81 | end |
|
81 | end | |
82 |
|
82 | |||
|
83 | field_attributes :url_pattern | |||
|
84 | ||||
83 | def name |
|
85 | def name | |
84 | self.class.format_name |
|
86 | self.class.format_name | |
85 | end |
|
87 | end | |
@@ -144,9 +146,45 module Redmine | |||||
144 | end |
|
146 | end | |
145 |
|
147 | |||
146 | def formatted_value(view, custom_field, value, customized=nil, html=false) |
|
148 | def formatted_value(view, custom_field, value, customized=nil, html=false) | |
147 | cast_value(custom_field, value, customized) |
|
149 | casted = cast_value(custom_field, value, customized) | |
|
150 | if custom_field.url_pattern.present? | |||
|
151 | texts_and_urls = Array.wrap(casted).map do |single_value| | |||
|
152 | text = view.format_object(single_value, false).to_s | |||
|
153 | url = url_from_pattern(custom_field, single_value, customized) | |||
|
154 | [text, url] | |||
|
155 | end | |||
|
156 | links = texts_and_urls.sort_by(&:first).map {|text, url| view.link_to text, url} | |||
|
157 | links.join(', ').html_safe | |||
|
158 | else | |||
|
159 | casted | |||
|
160 | end | |||
148 | end |
|
161 | end | |
149 |
|
162 | |||
|
163 | # Returns an URL generated with the custom field URL pattern | |||
|
164 | # and variables substitution: | |||
|
165 | # %value% => the custom field value | |||
|
166 | # %id% => id of the customized object | |||
|
167 | # %project_id% => id of the project of the customized object if defined | |||
|
168 | # %project_identifier% => identifier of the project of the customized object if defined | |||
|
169 | # %m1%, %m2%... => capture groups matches of the custom field regexp if defined | |||
|
170 | def url_from_pattern(custom_field, value, customized) | |||
|
171 | url = custom_field.url_pattern.to_s.dup | |||
|
172 | url.gsub!('%value%') {value.to_s} | |||
|
173 | url.gsub!('%id%') {customized.id.to_s} | |||
|
174 | url.gsub!('%project_id%') {(customized.respond_to?(:project) ? customized.project.try(:id) : nil).to_s} | |||
|
175 | url.gsub!('%project_identifier%') {(customized.respond_to?(:project) ? customized.project.try(:identifier) : nil).to_s} | |||
|
176 | if custom_field.regexp.present? | |||
|
177 | url.gsub!(%r{%m(\d+)%}) do | |||
|
178 | m = $1.to_i | |||
|
179 | if matches ||= value.to_s.match(Regexp.new(custom_field.regexp)) | |||
|
180 | matches[m].to_s | |||
|
181 | end | |||
|
182 | end | |||
|
183 | end | |||
|
184 | url | |||
|
185 | end | |||
|
186 | protected :url_from_pattern | |||
|
187 | ||||
150 | def edit_tag(view, tag_id, tag_name, custom_value, options={}) |
|
188 | def edit_tag(view, tag_id, tag_name, custom_value, options={}) | |
151 | view.text_field_tag(tag_name, custom_value.value, options.merge(:id => tag_id)) |
|
189 | view.text_field_tag(tag_name, custom_value.value, options.merge(:id => tag_id)) | |
152 | end |
|
190 | end | |
@@ -236,8 +274,14 module Redmine | |||||
236 | field_attributes :text_formatting |
|
274 | field_attributes :text_formatting | |
237 |
|
275 | |||
238 | def formatted_value(view, custom_field, value, customized=nil, html=false) |
|
276 | def formatted_value(view, custom_field, value, customized=nil, html=false) | |
239 | if html && custom_field.text_formatting == 'full' |
|
277 | if html | |
240 | view.textilizable(value, :object => customized) |
|
278 | if custom_field.url_pattern.present? | |
|
279 | super | |||
|
280 | elsif custom_field.text_formatting == 'full' | |||
|
281 | view.textilizable(value, :object => customized) | |||
|
282 | else | |||
|
283 | value.to_s | |||
|
284 | end | |||
241 | else |
|
285 | else | |
242 | value.to_s |
|
286 | value.to_s | |
243 | end |
|
287 | end | |
@@ -280,23 +324,11 module Redmine | |||||
280 | add 'link' |
|
324 | add 'link' | |
281 | self.searchable_supported = false |
|
325 | self.searchable_supported = false | |
282 | self.form_partial = 'custom_fields/formats/link' |
|
326 | self.form_partial = 'custom_fields/formats/link' | |
283 | field_attributes :url_pattern |
|
|||
284 |
|
327 | |||
285 | def formatted_value(view, custom_field, value, customized=nil, html=false) |
|
328 | def formatted_value(view, custom_field, value, customized=nil, html=false) | |
286 | if html |
|
329 | if html | |
287 | if custom_field.url_pattern.present? |
|
330 | if custom_field.url_pattern.present? | |
288 | url = custom_field.url_pattern.to_s.dup |
|
331 | url = url_from_pattern(custom_field, value, customized) | |
289 | url.gsub!('%value%') {value.to_s} |
|
|||
290 | url.gsub!('%id%') {customized.id.to_s} |
|
|||
291 | url.gsub!('%project_id%') {(customized.respond_to?(:project) ? customized.project.try(:id) : nil).to_s} |
|
|||
292 | url.gsub!('%project_identifier%') {(customized.respond_to?(:project) ? customized.project.try(:identifier) : nil).to_s} |
|
|||
293 | if custom_field.regexp.present? |
|
|||
294 | url.gsub!(%r{%m(\d+)%}) do |
|
|||
295 | m = $1.to_i |
|
|||
296 | matches ||= value.to_s.match(Regexp.new(custom_field.regexp)) |
|
|||
297 | matches[m].to_s if matches |
|
|||
298 | end |
|
|||
299 | end |
|
|||
300 | else |
|
332 | else | |
301 | url = value.to_s |
|
333 | url = value.to_s | |
302 | unless url =~ %r{\A[a-z]+://}i |
|
334 | unless url =~ %r{\A[a-z]+://}i |
@@ -116,6 +116,27 class Redmine::ListFieldFormatTest < ActionView::TestCase | |||||
116 | end |
|
116 | end | |
117 | end |
|
117 | end | |
118 |
|
118 | |||
|
119 | def test_field_with_url_pattern_should_link_value | |||
|
120 | field = IssueCustomField.new(:field_format => 'list', :url_pattern => 'http://localhost/%value%') | |||
|
121 | formatted = field.format.formatted_value(self, field, 'foo', Issue.new, true) | |||
|
122 | assert_equal '<a href="http://localhost/foo">foo</a>', formatted | |||
|
123 | assert formatted.html_safe? | |||
|
124 | end | |||
|
125 | ||||
|
126 | def test_field_with_url_pattern_and_multiple_values_should_link_values | |||
|
127 | field = IssueCustomField.new(:field_format => 'list', :url_pattern => 'http://localhost/%value%') | |||
|
128 | formatted = field.format.formatted_value(self, field, ['foo', 'bar'], Issue.new, true) | |||
|
129 | assert_equal '<a href="http://localhost/bar">bar</a>, <a href="http://localhost/foo">foo</a>', formatted | |||
|
130 | assert formatted.html_safe? | |||
|
131 | end | |||
|
132 | ||||
|
133 | def test_field_with_url_pattern_should_not_link_blank_value | |||
|
134 | field = IssueCustomField.new(:field_format => 'list', :url_pattern => 'http://localhost/%value%') | |||
|
135 | formatted = field.format.formatted_value(self, field, '', Issue.new, true) | |||
|
136 | assert_equal '', formatted | |||
|
137 | assert formatted.html_safe? | |||
|
138 | end | |||
|
139 | ||||
119 | def test_edit_tag_with_check_box_style_and_multiple_should_select_current_values |
|
140 | def test_edit_tag_with_check_box_style_and_multiple_should_select_current_values | |
120 | field = IssueCustomField.new(:field_format => 'list', :possible_values => ['Foo', 'Bar', 'Baz'], :is_required => false, |
|
141 | field = IssueCustomField.new(:field_format => 'list', :possible_values => ['Foo', 'Bar', 'Baz'], :is_required => false, | |
121 | :multiple => true, :edit_tag_style => 'check_box') |
|
142 | :multiple => true, :edit_tag_style => 'check_box') |
General Comments 0
You need to be logged in to leave comments.
Login now