Merge lp:~jfb-tempo-consulting/unifield-web/us-1519 into lp:unifield-web
- us-1519
- Merge into trunk
Proposed by
jftempo
Status: | Merged |
---|---|
Merged at revision: | 4802 |
Proposed branch: | lp:~jfb-tempo-consulting/unifield-web/us-1519 |
Merge into: | lp:unifield-web |
Diff against target: |
303 lines (+127/-28) 7 files modified
addons/openerp/controllers/database.py (+60/-18) addons/openerp/controllers/preferences.py (+5/-3) addons/openerp/controllers/root.py (+7/-0) addons/openerp/controllers/templates/login.mako (+17/-4) addons/openerp/controllers/utils.py (+4/-1) openobject/widgets/_widgets.py (+2/-1) openobject/widgets/templates/form.mako (+32/-1) |
To merge this branch: | bzr merge lp:~jfb-tempo-consulting/unifield-web/us-1519 |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
UniField Reviewer Team | Pending | ||
Review via email: mp+303673@code.launchpad.net |
Commit message
Description of the change
To post a comment you must log in.
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'addons/openerp/controllers/database.py' | |||
2 | --- addons/openerp/controllers/database.py 2016-05-09 12:01:47 +0000 | |||
3 | +++ addons/openerp/controllers/database.py 2016-08-23 11:52:35 +0000 | |||
4 | @@ -50,20 +50,52 @@ | |||
5 | 50 | except: | 50 | except: |
6 | 51 | return [] | 51 | return [] |
7 | 52 | 52 | ||
8 | 53 | class ReplacePasswordField(openobject.widgets.PasswordField): | ||
9 | 54 | params = { | ||
10 | 55 | 'autocomplete': 'Autocomplete field', | ||
11 | 56 | } | ||
12 | 57 | autocomplete = 'off' | ||
13 | 58 | replace_for = False | ||
14 | 59 | |||
15 | 60 | def __init__(self, *arg, **kwargs): | ||
16 | 61 | # disable form default submit action when user hits Enter in the field | ||
17 | 62 | self.replace_for = kwargs['name'] | ||
18 | 63 | kwargs['name'] = 'show_%s' % kwargs['name'] | ||
19 | 64 | kwargs.setdefault('attrs', {}).update({ | ||
20 | 65 | 'onkeydown': 'if (event.keyCode == 13) replace_pass_submit()', | ||
21 | 66 | 'class': 'requiredfield', | ||
22 | 67 | }) | ||
23 | 68 | super(ReplacePasswordField, self).__init__(*arg, **kwargs) | ||
24 | 69 | |||
25 | 70 | |||
26 | 53 | class DBForm(openobject.widgets.Form): | 71 | class DBForm(openobject.widgets.Form): |
27 | 54 | strip_name = True | 72 | strip_name = True |
28 | 55 | 73 | ||
29 | 56 | def __init__(self, *args, **kw): | 74 | def __init__(self, *args, **kw): |
30 | 57 | super(DBForm, self).__init__(*args, **kw) | 75 | super(DBForm, self).__init__(*args, **kw) |
31 | 76 | to_add = [] | ||
32 | 77 | for field in self.fields: | ||
33 | 78 | if isinstance(field, ReplacePasswordField): | ||
34 | 79 | to_add.append(openobject.widgets.HiddenField(name=field.replace_for, attrs={'autocomplete':'off'})) | ||
35 | 80 | self.replace_password_fields[field.name] = field.replace_for | ||
36 | 81 | if to_add: | ||
37 | 82 | self.hidden_fields += to_add | ||
38 | 58 | if self.validator is openobject.validators.DefaultValidator: | 83 | if self.validator is openobject.validators.DefaultValidator: |
39 | 59 | self.validator = openobject.validators.Schema() | 84 | self.validator = openobject.validators.Schema() |
40 | 60 | for f in self.fields: | 85 | for f in self.fields: |
41 | 61 | self.validator.add_field(f.name, f.validator) | 86 | self.validator.add_field(f.name, f.validator) |
42 | 87 | for add in to_add: | ||
43 | 88 | self.validator.add_field(add.name, formencode.validators.NotEmpty()) | ||
44 | 62 | 89 | ||
45 | 63 | def update_params(self, params): | 90 | def update_params(self, params): |
46 | 64 | super(DBForm, self).update_params(params) | 91 | super(DBForm, self).update_params(params) |
47 | 65 | params['attrs']['action'] = url(self.action) | 92 | params['attrs']['action'] = url(self.action) |
48 | 66 | 93 | ||
49 | 94 | def error_for(self, item, error): | ||
50 | 95 | if error and isinstance(item, ReplacePasswordField): | ||
51 | 96 | return error.error_dict.get(item.replace_for) | ||
52 | 97 | return super(DBForm, self).error_for(item, error) | ||
53 | 98 | |||
54 | 67 | class FormCreate(DBForm): | 99 | class FormCreate(DBForm): |
55 | 68 | name = "create" | 100 | name = "create" |
56 | 69 | string = _('Create database') | 101 | string = _('Create database') |
57 | @@ -71,31 +103,37 @@ | |||
58 | 71 | submit_text = _('Create') | 103 | submit_text = _('Create') |
59 | 72 | strip_name = True | 104 | strip_name = True |
60 | 73 | form_attrs = {'onsubmit': 'return on_create()'} | 105 | form_attrs = {'onsubmit': 'return on_create()'} |
68 | 74 | fields = [openobject.widgets.PasswordField(name='password', label=_('Super admin password:'), validator=formencode.validators.NotEmpty(), help=_("This is the password of the user that have the rights to administer databases. This is not a OpenERP user, just a super administrator.")), | 106 | fields = [ |
69 | 75 | openobject.widgets.TextField(name='dbname', label=_('New database name:'), validator=formencode.validators.NotEmpty(), help=_("Choose the name of the database that will be created. The name must not contain any special character. Exemple: 'terp'.")), | 107 | ReplacePasswordField(name='password', label=_('Super admin password:'), help=_("This is the password of the user that have the rights to administer databases. This is not a OpenERP user, just a super administrator.")), |
70 | 76 | # openobject.widgets.CheckBox(name='demo_data', label=_('Load Demonstration data:'), default=False, validator=validators.Bool(if_empty=False), help=_("Check this box if you want demonstration data to be installed on your new database. These data will help you to understand OpenERP, with predefined products, partners, etc.")), | 108 | openobject.widgets.TextField(name='dbname', label=_('New database name:'), validator=formencode.validators.NotEmpty(), help=_("Choose the name of the database that will be created. The name must not contain any special character. Exemple: 'terp'.")), |
71 | 77 | openobject.widgets.SelectField(name='language', options=get_lang_list, validator=validators.String(), label=_('Default Language:'), help=_("Choose the default language that will be installed for this database. You will be able to install new languages after installation through the administration menu.")), | 109 | # openobject.widgets.CheckBox(name='demo_data', label=_('Load Demonstration data:'), default=False, validator=validators.Bool(if_empty=False), help=_("Check this box if you want demonstration data to be installed on your new database. These data will help you to understand OpenERP, with predefined products, partners, etc.")), |
72 | 78 | openobject.widgets.PasswordField(name='admin_password', label=_('Administrator password:'), validator=formencode.validators.NotEmpty(), help=_("This is the password of the 'admin' user that will be created in your new database.")), | 110 | openobject.widgets.SelectField(name='language', options=get_lang_list, validator=validators.String(), label=_('Default Language:'), help=_("Choose the default language that will be installed for this database. You will be able to install new languages after installation through the administration menu.")), |
73 | 79 | openobject.widgets.PasswordField(name='confirm_password', label=_('Confirm password:'), validator=formencode.validators.NotEmpty(), help=_("This is the password of the 'admin' user that will be created in your new database. It has to be the same than the above field.")) | 111 | ReplacePasswordField(name='confirm_password', label=_('Confirm password:'), help=_("This is the password of the 'admin' user that will be created in your new database. It has to be the same than the above field.")), |
74 | 80 | ] | 112 | ReplacePasswordField(name='admin_password', label=_('Administrator password:'), help=_("This is the password of the 'admin' user that will be created in your new database.")), |
75 | 113 | ] | ||
76 | 81 | validator = openobject.validators.Schema(chained_validators=[formencode.validators.FieldsMatch("admin_password","confirm_password")]) | 114 | validator = openobject.validators.Schema(chained_validators=[formencode.validators.FieldsMatch("admin_password","confirm_password")]) |
77 | 82 | 115 | ||
78 | 116 | |||
79 | 83 | class FormDrop(DBForm): | 117 | class FormDrop(DBForm): |
80 | 84 | name = "drop" | 118 | name = "drop" |
81 | 85 | string = _('Drop database') | 119 | string = _('Drop database') |
82 | 86 | action = '/openerp/database/do_drop' | 120 | action = '/openerp/database/do_drop' |
83 | 87 | submit_text = _('Drop') | 121 | submit_text = _('Drop') |
84 | 88 | form_attrs = {'onsubmit': 'return window.confirm(_("Do you really want to drop the selected database?"))'} | 122 | form_attrs = {'onsubmit': 'return window.confirm(_("Do you really want to drop the selected database?"))'} |
87 | 89 | fields = [openobject.widgets.SelectField(name='dbname', options=get_db_list, label=_('Database:'), validator=validators.String(not_empty=True)), | 123 | fields = [ |
88 | 90 | openobject.widgets.PasswordField(name='password', label=_('Drop password:'), validator=formencode.validators.NotEmpty())] | 124 | openobject.widgets.SelectField(name='dbname', options=get_db_list, label=_('Database:'), validator=validators.String(not_empty=True)), |
89 | 125 | ReplacePasswordField(name='password', label=_('Drop password:')), | ||
90 | 126 | ] | ||
91 | 91 | 127 | ||
92 | 92 | class FormBackup(DBForm): | 128 | class FormBackup(DBForm): |
93 | 93 | name = "backup" | 129 | name = "backup" |
94 | 94 | string = _('Backup database') | 130 | string = _('Backup database') |
95 | 95 | action = '/openerp/database/do_backup' | 131 | action = '/openerp/database/do_backup' |
96 | 96 | submit_text = _('Backup') | 132 | submit_text = _('Backup') |
99 | 97 | fields = [openobject.widgets.SelectField(name='dbname', options=get_db_list, label=_('Database:'), validator=validators.String(not_empty=True)), | 133 | fields = [ |
100 | 98 | openobject.widgets.PasswordField(name='password', label=_('Backup password:'), validator=formencode.validators.NotEmpty())] | 134 | openobject.widgets.SelectField(name='dbname', options=get_db_list, label=_('Database:'), validator=validators.String(not_empty=True)), |
101 | 135 | ReplacePasswordField(name='password', label=_('Backup password:')), | ||
102 | 136 | ] | ||
103 | 99 | 137 | ||
104 | 100 | class FileField(openobject.widgets.FileField): | 138 | class FileField(openobject.widgets.FileField): |
105 | 101 | def adjust_value(self, value, **params): | 139 | def adjust_value(self, value, **params): |
106 | @@ -106,9 +144,12 @@ | |||
107 | 106 | string = _('Restore database') | 144 | string = _('Restore database') |
108 | 107 | action = '/openerp/database/do_restore' | 145 | action = '/openerp/database/do_restore' |
109 | 108 | submit_text = _('Restore') | 146 | submit_text = _('Restore') |
113 | 109 | fields = [FileField(name="filename", label=_('File:')), | 147 | fields = [ |
114 | 110 | openobject.widgets.PasswordField(name='password', label=_('Restore password:'), validator=formencode.validators.NotEmpty()), | 148 | FileField(name="filename", label=_('File:')), |
115 | 111 | openobject.widgets.TextField(name='dbname', label=_('New database name:'), validator=formencode.validators.NotEmpty(), readonly=1, attrs={'readonly': ''})] | 149 | ReplacePasswordField(name='password', label=_('Restore password:')), |
116 | 150 | openobject.widgets.TextField(name='dbname', label=_('New database name:'), validator=formencode.validators.NotEmpty(), readonly=1, attrs={'readonly': ''}) | ||
117 | 151 | ] | ||
118 | 152 | |||
119 | 112 | hidden_fields = [openobject.widgets.HiddenField(name='fpath', label=_('Path:'))] | 153 | hidden_fields = [openobject.widgets.HiddenField(name='fpath', label=_('Path:'))] |
120 | 113 | 154 | ||
121 | 114 | class FormPassword(DBForm): | 155 | class FormPassword(DBForm): |
122 | @@ -116,10 +157,11 @@ | |||
123 | 116 | string = _('Change Administrator Password') | 157 | string = _('Change Administrator Password') |
124 | 117 | action = '/openerp/database/do_password' | 158 | action = '/openerp/database/do_password' |
125 | 118 | submit_text = _('Change Password') | 159 | submit_text = _('Change Password') |
130 | 119 | fields = [openobject.widgets.PasswordField(name='old_password', label=_('Old super admin password:'), validator=formencode.validators.NotEmpty()), | 160 | fields = [ |
131 | 120 | openobject.widgets.PasswordField(name='new_password', label=_('New super admin password:'), validator=formencode.validators.NotEmpty()), | 161 | ReplacePasswordField(name='old_password', label=_('Old super admin password:')), |
132 | 121 | openobject.widgets.PasswordField(name='confirm_password', label=_('Confirm Password:'), validator=formencode.validators.NotEmpty())] | 162 | ReplacePasswordField(name='new_password', label=_('New super admin password:')), |
133 | 122 | 163 | ReplacePasswordField(name='confirm_password', label=_('Confirm Password:')), | |
134 | 164 | ] | ||
135 | 123 | validator = openobject.validators.Schema(chained_validators=[formencode.validators.FieldsMatch("new_password","confirm_password")]) | 165 | validator = openobject.validators.Schema(chained_validators=[formencode.validators.FieldsMatch("new_password","confirm_password")]) |
136 | 124 | 166 | ||
137 | 125 | 167 | ||
138 | 126 | 168 | ||
139 | === modified file 'addons/openerp/controllers/preferences.py' | |||
140 | --- addons/openerp/controllers/preferences.py 2015-05-13 15:01:35 +0000 | |||
141 | +++ addons/openerp/controllers/preferences.py 2016-08-23 11:52:35 +0000 | |||
142 | @@ -34,9 +34,11 @@ | |||
143 | 34 | class PrefsPassword(database.FormPassword): | 34 | class PrefsPassword(database.FormPassword): |
144 | 35 | action = "/openerp/pref/password" | 35 | action = "/openerp/pref/password" |
145 | 36 | string = _('Change your password') | 36 | string = _('Change your password') |
149 | 37 | fields = [openobject.widgets.PasswordField(name='old_password', label=_('Old Password:'), validator=formencode.validators.NotEmpty()), | 37 | fields = [ |
150 | 38 | openobject.widgets.PasswordField(name='new_password', label=_('New Password:'), validator=formencode.validators.NotEmpty()), | 38 | database.ReplacePasswordField(name='old_password', label=_('Old Password:')), |
151 | 39 | openobject.widgets.PasswordField(name='confirm_password', label=_('Confirm Password:'), validator=formencode.validators.NotEmpty())] | 39 | database.ReplacePasswordField(name='new_password', label=_('New Password:')), |
152 | 40 | database.ReplacePasswordField(name='confirm_password', label=_('Confirm Password:')), | ||
153 | 41 | ] | ||
154 | 40 | 42 | ||
155 | 41 | int_pattern = re.compile(r'^\d+$') | 43 | int_pattern = re.compile(r'^\d+$') |
156 | 42 | class Preferences(Form): | 44 | class Preferences(Form): |
157 | 43 | 45 | ||
158 | === modified file 'addons/openerp/controllers/root.py' | |||
159 | --- addons/openerp/controllers/root.py 2014-01-10 17:12:18 +0000 | |||
160 | +++ addons/openerp/controllers/root.py 2016-08-23 11:52:35 +0000 | |||
161 | @@ -150,6 +150,13 @@ | |||
162 | 150 | .get_controller('/openerp/widgets')\ | 150 | .get_controller('/openerp/widgets')\ |
163 | 151 | .user_home_widgets(ctx)) | 151 | .user_home_widgets(ctx)) |
164 | 152 | 152 | ||
165 | 153 | @expose() | ||
166 | 154 | def do_login(self, *arg, **kw): | ||
167 | 155 | target = kw.get('target') or '/' | ||
168 | 156 | if target.startswith('/openerp/do_login'): | ||
169 | 157 | target = '/' | ||
170 | 158 | raise redirect(target) | ||
171 | 159 | |||
172 | 153 | @expose(allow_json=True) | 160 | @expose(allow_json=True) |
173 | 154 | @unsecured | 161 | @unsecured |
174 | 155 | def login(self, db=None, user=None, password=None, style=None, location=None, message=None, **kw): | 162 | def login(self, db=None, user=None, password=None, style=None, location=None, message=None, **kw): |
175 | 156 | 163 | ||
176 | === modified file 'addons/openerp/controllers/templates/login.mako' | |||
177 | --- addons/openerp/controllers/templates/login.mako 2016-03-04 16:58:44 +0000 | |||
178 | +++ addons/openerp/controllers/templates/login.mako 2016-08-23 11:52:35 +0000 | |||
179 | @@ -12,6 +12,15 @@ | |||
180 | 12 | form.attr('action') + separator + jQuery.param({'next': url})); | 12 | form.attr('action') + separator + jQuery.param({'next': url})); |
181 | 13 | }) | 13 | }) |
182 | 14 | } | 14 | } |
183 | 15 | function disable_save() { | ||
184 | 16 | var pass = $("#show_password").val() | ||
185 | 17 | $("#password").val(pass); | ||
186 | 18 | $("#show_password").val(false); | ||
187 | 19 | $("#replace_password").show(); | ||
188 | 20 | $("#replace_password").val(Array(pass.length+1).join('\u2022')); | ||
189 | 21 | $("#show_password").remove(); | ||
190 | 22 | $("#loginform").submit(); | ||
191 | 23 | } | ||
192 | 15 | </script> | 24 | </script> |
193 | 16 | </%def> | 25 | </%def> |
194 | 17 | 26 | ||
195 | @@ -51,11 +60,15 @@ | |||
196 | 51 | </tr> | 60 | </tr> |
197 | 52 | <tr> | 61 | <tr> |
198 | 53 | <td class="label"><label for="user">${_("User:")}</label></td> | 62 | <td class="label"><label for="user">${_("User:")}</label></td> |
200 | 54 | <td style="padding: 3px;"><input type="text" id="user" name="user" class="db_user_pass" value="${user}" autofocus="true"/></td> | 63 | <td style="padding: 3px;"><input type="text" id="user" name="user" class="db_user_pass" value="${user}" autofocus="true" autocomplete="off"/></td> |
201 | 55 | </tr> | 64 | </tr> |
202 | 56 | <tr> | 65 | <tr> |
205 | 57 | <td class="label"><label for="password">${_("Password:")}</label></td> | 66 | <td class="label"><label for="show_password">${_("Password:")}</label></td> |
206 | 58 | <td style="padding: 3px;"><input type="password" value="${password}" id="password" name="password" class="db_user_pass" autocomplete="off"/></td> | 67 | <td style="padding: 3px;"><input type="password" id="show_password" name="show_password" class="db_user_pass" autocomplete="off" onkeydown = "if (event.keyCode == 13) disable_save()"/> |
207 | 68 | <input id="replace_password" type="text" class="db_user_pass" style="display:none;"/> | ||
208 | 69 | <input type="hidden" name="password" id="password" /> | ||
209 | 70 | </td> | ||
210 | 71 | |||
211 | 59 | </tr> | 72 | </tr> |
212 | 60 | <tr> | 73 | <tr> |
213 | 61 | <td></td> | 74 | <td></td> |
214 | @@ -64,7 +77,7 @@ | |||
215 | 64 | <button type="button" class="static_boxes" tabindex="-1" onclick="location.href='${py.url('/openerp/database')}'">${_("Databases")} | 77 | <button type="button" class="static_boxes" tabindex="-1" onclick="location.href='${py.url('/openerp/database')}'">${_("Databases")} |
216 | 65 | </button> | 78 | </button> |
217 | 66 | % endif | 79 | % endif |
219 | 67 | <button type="submit" class="static_boxes">${_("Login")}</button> | 80 | <button type="button" class="static_boxes" onclick="disable_save()">${_("Login")}</button> |
220 | 68 | </td> | 81 | </td> |
221 | 69 | </tr> | 82 | </tr> |
222 | 70 | </table> | 83 | </table> |
223 | 71 | 84 | ||
224 | === modified file 'addons/openerp/controllers/utils.py' | |||
225 | --- addons/openerp/controllers/utils.py 2016-07-18 12:51:46 +0000 | |||
226 | +++ addons/openerp/controllers/utils.py 2016-08-23 11:52:35 +0000 | |||
227 | @@ -94,7 +94,10 @@ | |||
228 | 94 | info = rpc.session.execute_noauth('common', 'login_message') or '' | 94 | info = rpc.session.execute_noauth('common', 'login_message') or '' |
229 | 95 | except: | 95 | except: |
230 | 96 | pass | 96 | pass |
232 | 97 | return dict(target=target, url=url, dblist=dblist, db=db, user=user, password=password, | 97 | do_login_page = '/openerp/do_login' |
233 | 98 | if target != do_login_page: | ||
234 | 99 | origArgs['target'] = target | ||
235 | 100 | return dict(target=do_login_page, url=url, dblist=dblist, db=db, user=user, password=password, | ||
236 | 98 | action=action, message=message, origArgs=origArgs, info=info, bad_regional=bad_regional, tz_offset=tz_offset) | 101 | action=action, message=message, origArgs=origArgs, info=info, bad_regional=bad_regional, tz_offset=tz_offset) |
237 | 99 | 102 | ||
238 | 100 | def secured(fn): | 103 | def secured(fn): |
239 | 101 | 104 | ||
240 | === modified file 'openobject/widgets/_widgets.py' | |||
241 | --- openobject/widgets/_widgets.py 2012-10-22 12:24:58 +0000 | |||
242 | +++ openobject/widgets/_widgets.py 2016-08-23 11:52:35 +0000 | |||
243 | @@ -226,7 +226,7 @@ | |||
244 | 226 | 226 | ||
245 | 227 | template = "/openobject/widgets/templates/form.mako" | 227 | template = "/openobject/widgets/templates/form.mako" |
246 | 228 | 228 | ||
248 | 229 | params = ['action', 'method', 'submit_text'] | 229 | params = ['action', 'method', 'submit_text', 'replace_password_fields'] |
249 | 230 | member_widgets = ['hidden_fields', 'fields'] | 230 | member_widgets = ['hidden_fields', 'fields'] |
250 | 231 | 231 | ||
251 | 232 | hidden_fields = [] | 232 | hidden_fields = [] |
252 | @@ -236,6 +236,7 @@ | |||
253 | 236 | submit_text = "Submit" | 236 | submit_text = "Submit" |
254 | 237 | form_attrs = {} | 237 | form_attrs = {} |
255 | 238 | form = True | 238 | form = True |
256 | 239 | replace_password_fields = {} | ||
257 | 239 | 240 | ||
258 | 240 | def __init__(self, name=None, **params): | 241 | def __init__(self, name=None, **params): |
259 | 241 | super(Form, self).__init__(name, **params) | 242 | super(Form, self).__init__(name, **params) |
260 | 242 | 243 | ||
261 | === modified file 'openobject/widgets/templates/form.mako' | |||
262 | --- openobject/widgets/templates/form.mako 2010-12-03 06:06:41 +0000 | |||
263 | +++ openobject/widgets/templates/form.mako 2016-08-23 11:52:35 +0000 | |||
264 | @@ -32,7 +32,38 @@ | |||
265 | 32 | % endfor | 32 | % endfor |
266 | 33 | <tr> | 33 | <tr> |
267 | 34 | <td> </td> | 34 | <td> </td> |
269 | 35 | <td align="right" style="padding: 0px 5px 5px 0px;"><button type="submit" class="static_boxes">${submit_text}</button></td> | 35 | <td align="right" style="padding: 0px 5px 5px 0px;"> |
270 | 36 | % if not replace_password_fields: | ||
271 | 37 | <button type="submit" class="static_boxes">${submit_text}</button> | ||
272 | 38 | % else: | ||
273 | 39 | <script type="text/javascript"> | ||
274 | 40 | function replace_pass_submit() { | ||
275 | 41 | var this_form = false; | ||
276 | 42 | % for src_field, target_field in replace_password_fields.iteritems(): | ||
277 | 43 | if (!this_form) { | ||
278 | 44 | this_form = $("#${target_field}").attr('form'); | ||
279 | 45 | var result = true; | ||
280 | 46 | if (this_form.onsubmit) { | ||
281 | 47 | result = this_form.onsubmit.call(this_form); | ||
282 | 48 | } | ||
283 | 49 | if (!result) { | ||
284 | 50 | return false; | ||
285 | 51 | } | ||
286 | 52 | } | ||
287 | 53 | var ${src_field}_val = $("#${src_field}").val() | ||
288 | 54 | var fake_${src_field} = jQuery('<input type="text"/>'); | ||
289 | 55 | fake_${src_field}.addClass($("#${src_field}").attr('class')); | ||
290 | 56 | fake_${src_field}.val(Array(${src_field}_val.length+1).join('\u2022')); | ||
291 | 57 | $("#${target_field}").val(${src_field}_val); | ||
292 | 58 | $("#${src_field}").val(false); | ||
293 | 59 | $("#${src_field}").replaceWith(fake_${src_field}); | ||
294 | 60 | % endfor | ||
295 | 61 | this_form.submit(); | ||
296 | 62 | } | ||
297 | 63 | </script> | ||
298 | 64 | <button type="button" class="static_boxes" onclick="replace_pass_submit()">${submit_text}</button> | ||
299 | 65 | % endif | ||
300 | 66 | </td> | ||
301 | 36 | </tr> | 67 | </tr> |
302 | 37 | </table> | 68 | </table> |
303 | 38 | </form> | 69 | </form> |