##// END OF EJS Templates
ui: reduce logo size
marcink -
r3541:6584b281 default
parent child Browse files
Show More
1 NO CONTENT: file renamed from rhodecode/public/images/rhodecode-logo-white-216x60.png to rhodecode/public/images/rhodecode-logo-white-60x60.png, binary diff hidden
@@ -1,818 +1,818 b''
1 1 ## -*- coding: utf-8 -*-
2 2 <%inherit file="root.mako"/>
3 3
4 4 <%include file="/ejs_templates/templates.html"/>
5 5
6 6 <div class="outerwrapper">
7 7 <!-- HEADER -->
8 8 <div class="header">
9 9 <div id="header-inner" class="wrapper">
10 10 <div id="logo">
11 11 <div class="logo-wrapper">
12 <a href="${h.route_path('home')}"><img src="${h.asset('images/rhodecode-logo-white-216x60.png')}" alt="RhodeCode"/></a>
12 <a href="${h.route_path('home')}"><img src="${h.asset('images/rhodecode-logo-white-60x60.png')}" alt="RhodeCode"/></a>
13 13 </div>
14 14 %if c.rhodecode_name:
15 15 <div class="branding">- ${h.branding(c.rhodecode_name)}</div>
16 16 %endif
17 17 </div>
18 18 <!-- MENU BAR NAV -->
19 19 ${self.menu_bar_nav()}
20 20 <!-- END MENU BAR NAV -->
21 21 </div>
22 22 </div>
23 23 ${self.menu_bar_subnav()}
24 24 <!-- END HEADER -->
25 25
26 26 <!-- CONTENT -->
27 27 <div id="content" class="wrapper">
28 28
29 29 <rhodecode-toast id="notifications"></rhodecode-toast>
30 30
31 31 <div class="main">
32 32 ${next.main()}
33 33 </div>
34 34 </div>
35 35 <!-- END CONTENT -->
36 36
37 37 </div>
38 38 <!-- FOOTER -->
39 39 <div id="footer">
40 40 <div id="footer-inner" class="title wrapper">
41 41 <div>
42 42 <p class="footer-link-right">
43 43 % if c.visual.show_version:
44 44 RhodeCode Enterprise ${c.rhodecode_version} ${c.rhodecode_edition}
45 45 % endif
46 46 &copy; 2010-${h.datetime.today().year}, <a href="${h.route_url('rhodecode_official')}" target="_blank">RhodeCode GmbH</a>. All rights reserved.
47 47 % if c.visual.rhodecode_support_url:
48 48 <a href="${c.visual.rhodecode_support_url}" target="_blank">${_('Support')}</a>
49 49 % endif
50 50 </p>
51 51 <% sid = 'block' if request.GET.get('showrcid') else 'none' %>
52 52 <p class="server-instance" style="display:${sid}">
53 53 ## display hidden instance ID if specially defined
54 54 % if c.rhodecode_instanceid:
55 55 ${_('RhodeCode instance id: {}').format(c.rhodecode_instanceid)}
56 56 % endif
57 57 </p>
58 58 </div>
59 59 </div>
60 60 </div>
61 61
62 62 <!-- END FOOTER -->
63 63
64 64 ### MAKO DEFS ###
65 65
66 66 <%def name="menu_bar_subnav()">
67 67 </%def>
68 68
69 69 <%def name="breadcrumbs(class_='breadcrumbs')">
70 70 <div class="${class_}">
71 71 ${self.breadcrumbs_links()}
72 72 </div>
73 73 </%def>
74 74
75 75 <%def name="admin_menu()">
76 76 <ul class="admin_menu submenu">
77 77 <li><a href="${h.route_path('admin_audit_logs')}">${_('Admin audit logs')}</a></li>
78 78 <li><a href="${h.route_path('repos')}">${_('Repositories')}</a></li>
79 79 <li><a href="${h.route_path('repo_groups')}">${_('Repository groups')}</a></li>
80 80 <li><a href="${h.route_path('users')}">${_('Users')}</a></li>
81 81 <li><a href="${h.route_path('user_groups')}">${_('User groups')}</a></li>
82 82 <li><a href="${h.route_path('admin_permissions_application')}">${_('Permissions')}</a></li>
83 83 <li><a href="${h.route_path('auth_home', traverse='')}">${_('Authentication')}</a></li>
84 84 <li><a href="${h.route_path('global_integrations_home')}">${_('Integrations')}</a></li>
85 85 <li><a href="${h.route_path('admin_defaults_repositories')}">${_('Defaults')}</a></li>
86 86 <li class="last"><a href="${h.route_path('admin_settings')}">${_('Settings')}</a></li>
87 87 </ul>
88 88 </%def>
89 89
90 90
91 91 <%def name="dt_info_panel(elements)">
92 92 <dl class="dl-horizontal">
93 93 %for dt, dd, title, show_items in elements:
94 94 <dt>${dt}:</dt>
95 95 <dd title="${h.tooltip(title)}">
96 96 %if callable(dd):
97 97 ## allow lazy evaluation of elements
98 98 ${dd()}
99 99 %else:
100 100 ${dd}
101 101 %endif
102 102 %if show_items:
103 103 <span class="btn-collapse" data-toggle="item-${h.md5_safe(dt)[:6]}-details">${_('Show More')} </span>
104 104 %endif
105 105 </dd>
106 106
107 107 %if show_items:
108 108 <div class="collapsable-content" data-toggle="item-${h.md5_safe(dt)[:6]}-details" style="display: none">
109 109 %for item in show_items:
110 110 <dt></dt>
111 111 <dd>${item}</dd>
112 112 %endfor
113 113 </div>
114 114 %endif
115 115
116 116 %endfor
117 117 </dl>
118 118 </%def>
119 119
120 120
121 121 <%def name="gravatar(email, size=16)">
122 122 <%
123 123 if (size > 16):
124 124 gravatar_class = 'gravatar gravatar-large'
125 125 else:
126 126 gravatar_class = 'gravatar'
127 127 %>
128 128 <%doc>
129 129 TODO: johbo: For now we serve double size images to make it smooth
130 130 for retina. This is how it worked until now. Should be replaced
131 131 with a better solution at some point.
132 132 </%doc>
133 133 <img class="${gravatar_class}" src="${h.gravatar_url(email, size * 2)}" height="${size}" width="${size}">
134 134 </%def>
135 135
136 136
137 137 <%def name="gravatar_with_user(contact, size=16, show_disabled=False)">
138 138 <% email = h.email_or_none(contact) %>
139 139 <div class="rc-user tooltip" title="${h.tooltip(h.author_string(email))}">
140 140 ${self.gravatar(email, size)}
141 141 <span class="${'user user-disabled' if show_disabled else 'user'}"> ${h.link_to_user(contact)}</span>
142 142 </div>
143 143 </%def>
144 144
145 145
146 146 ## admin menu used for people that have some admin resources
147 147 <%def name="admin_menu_simple(repositories=None, repository_groups=None, user_groups=None)">
148 148 <ul class="submenu">
149 149 %if repositories:
150 150 <li class="local-admin-repos"><a href="${h.route_path('repos')}">${_('Repositories')}</a></li>
151 151 %endif
152 152 %if repository_groups:
153 153 <li class="local-admin-repo-groups"><a href="${h.route_path('repo_groups')}">${_('Repository groups')}</a></li>
154 154 %endif
155 155 %if user_groups:
156 156 <li class="local-admin-user-groups"><a href="${h.route_path('user_groups')}">${_('User groups')}</a></li>
157 157 %endif
158 158 </ul>
159 159 </%def>
160 160
161 161 <%def name="repo_page_title(repo_instance)">
162 162 <div class="title-content">
163 163 <div class="title-main">
164 164 ## SVN/HG/GIT icons
165 165 %if h.is_hg(repo_instance):
166 166 <i class="icon-hg"></i>
167 167 %endif
168 168 %if h.is_git(repo_instance):
169 169 <i class="icon-git"></i>
170 170 %endif
171 171 %if h.is_svn(repo_instance):
172 172 <i class="icon-svn"></i>
173 173 %endif
174 174
175 175 ## public/private
176 176 %if repo_instance.private:
177 177 <i class="icon-repo-private"></i>
178 178 %else:
179 179 <i class="icon-repo-public"></i>
180 180 %endif
181 181
182 182 ## repo name with group name
183 183 ${h.breadcrumb_repo_link(repo_instance)}
184 184
185 185 </div>
186 186
187 187 ## FORKED
188 188 %if repo_instance.fork:
189 189 <p>
190 190 <i class="icon-code-fork"></i> ${_('Fork of')}
191 191 ${h.link_to_if(c.has_origin_repo_read_perm,repo_instance.fork.repo_name, h.route_path('repo_summary', repo_name=repo_instance.fork.repo_name))}
192 192 </p>
193 193 %endif
194 194
195 195 ## IMPORTED FROM REMOTE
196 196 %if repo_instance.clone_uri:
197 197 <p>
198 198 <i class="icon-code-fork"></i> ${_('Clone from')}
199 199 <a href="${h.safe_str(h.hide_credentials(repo_instance.clone_uri))}">${h.hide_credentials(repo_instance.clone_uri)}</a>
200 200 </p>
201 201 %endif
202 202
203 203 ## LOCKING STATUS
204 204 %if repo_instance.locked[0]:
205 205 <p class="locking_locked">
206 206 <i class="icon-repo-lock"></i>
207 207 ${_('Repository locked by %(user)s') % {'user': h.person_by_id(repo_instance.locked[0])}}
208 208 </p>
209 209 %elif repo_instance.enable_locking:
210 210 <p class="locking_unlocked">
211 211 <i class="icon-repo-unlock"></i>
212 212 ${_('Repository not locked. Pull repository to lock it.')}
213 213 </p>
214 214 %endif
215 215
216 216 </div>
217 217 </%def>
218 218
219 219 <%def name="repo_menu(active=None)">
220 220 <%
221 221 def is_active(selected):
222 222 if selected == active:
223 223 return "active"
224 224 %>
225 225
226 226 <!--- CONTEXT BAR -->
227 227 <div id="context-bar">
228 228 <div class="wrapper">
229 229 <ul id="context-pages" class="navigation horizontal-list">
230 230 <li class="${is_active('summary')}"><a class="menulink" href="${h.route_path('repo_summary', repo_name=c.repo_name)}"><div class="menulabel">${_('Summary')}</div></a></li>
231 231 <li class="${is_active('changelog')}"><a class="menulink" href="${h.route_path('repo_changelog', repo_name=c.repo_name)}"><div class="menulabel">${_('Changelog')}</div></a></li>
232 232 <li class="${is_active('files')}"><a class="menulink" href="${h.route_path('repo_files', repo_name=c.repo_name, commit_id=c.rhodecode_db_repo.landing_rev[1], f_path='')}"><div class="menulabel">${_('Files')}</div></a></li>
233 233 <li class="${is_active('compare')}"><a class="menulink" href="${h.route_path('repo_compare_select',repo_name=c.repo_name)}"><div class="menulabel">${_('Compare')}</div></a></li>
234 234 <li class="${is_active('search')}"><a class="menulink" href="${h.route_path('search_repo',repo_name=c.repo_name)}"><div class="menulabel">${_('Search')}</div></a></li>
235 235
236 236 ## TODO: anderson: ideally it would have a function on the scm_instance "enable_pullrequest() and enable_fork()"
237 237 %if c.rhodecode_db_repo.repo_type in ['git','hg']:
238 238 <li class="${is_active('showpullrequest')}">
239 239 <a class="menulink" href="${h.route_path('pullrequest_show_all', repo_name=c.repo_name)}" title="${h.tooltip(_('Show Pull Requests for %s') % c.repo_name)}">
240 240 %if c.repository_pull_requests:
241 241 <span class="pr_notifications">${c.repository_pull_requests}</span>
242 242 %endif
243 243 <div class="menulabel">${_('Pull Requests')}</div>
244 244 </a>
245 245 </li>
246 246 %endif
247 247
248 248 <li class="${is_active('options')}">
249 249 <a class="menulink dropdown">
250 250 <div class="menulabel">${_('Options')} <div class="show_more"></div></div>
251 251 </a>
252 252 <ul class="submenu">
253 253 %if h.HasRepoPermissionAll('repository.admin')(c.repo_name):
254 254 <li><a href="${h.route_path('edit_repo',repo_name=c.repo_name)}">${_('Repository Settings')}</a></li>
255 255 %endif
256 256 %if c.rhodecode_db_repo.fork:
257 257 <li>
258 258 <a title="${h.tooltip(_('Compare fork with %s' % c.rhodecode_db_repo.fork.repo_name))}"
259 259 href="${h.route_path('repo_compare',
260 260 repo_name=c.rhodecode_db_repo.fork.repo_name,
261 261 source_ref_type=c.rhodecode_db_repo.landing_rev[0],
262 262 source_ref=c.rhodecode_db_repo.landing_rev[1],
263 263 target_repo=c.repo_name,target_ref_type='branch' if request.GET.get('branch') else c.rhodecode_db_repo.landing_rev[0],
264 264 target_ref=request.GET.get('branch') or c.rhodecode_db_repo.landing_rev[1],
265 265 _query=dict(merge=1))}"
266 266 >
267 267 ${_('Compare fork')}
268 268 </a>
269 269 </li>
270 270 %endif
271 271
272 272 %if h.HasRepoPermissionAny('repository.write','repository.admin')(c.repo_name) and c.rhodecode_db_repo.enable_locking:
273 273 %if c.rhodecode_db_repo.locked[0]:
274 274 <li><a class="locking_del" href="${h.route_path('repo_edit_toggle_locking',repo_name=c.repo_name)}">${_('Unlock')}</a></li>
275 275 %else:
276 276 <li><a class="locking_add" href="${h.route_path('repo_edit_toggle_locking',repo_name=c.repo_name)}">${_('Lock')}</a></li>
277 277 %endif
278 278 %endif
279 279 %if c.rhodecode_user.username != h.DEFAULT_USER:
280 280 %if c.rhodecode_db_repo.repo_type in ['git','hg']:
281 281 <li><a href="${h.route_path('repo_fork_new',repo_name=c.repo_name)}">${_('Fork')}</a></li>
282 282 <li><a href="${h.route_path('pullrequest_new',repo_name=c.repo_name)}">${_('Create Pull Request')}</a></li>
283 283 %endif
284 284 %endif
285 285 </ul>
286 286 </li>
287 287 </ul>
288 288 </div>
289 289 <div class="clear"></div>
290 290 </div>
291 291 % if c.rhodecode_db_repo.archived:
292 292 <div class="alert alert-warning text-center">
293 293 <strong>${_('This repository has been archived. It is now read-only.')}</strong>
294 294 </div>
295 295 % endif
296 296 <!--- END CONTEXT BAR -->
297 297
298 298 </%def>
299 299
300 300 <%def name="repo_group_page_title(repo_group_instance)">
301 301 <div class="title-content">
302 302 <div class="title-main">
303 303 ## Repository Group icon
304 304 <i class="icon-folder-close"></i>
305 305
306 306 ## repo name with group name
307 307 ${h.breadcrumb_repo_group_link(repo_group_instance)}
308 308 </div>
309 309
310 310 <%namespace name="dt" file="/data_table/_dt_elements.mako"/>
311 311 <div class="repo-group-desc">
312 312 ${dt.repo_group_desc(repo_group_instance.description_safe, repo_group_instance.personal, c.visual.stylify_metatags)}
313 313 </div>
314 314
315 315 </div>
316 316 </%def>
317 317
318 318 <%def name="repo_group_menu(active=None)">
319 319 <%
320 320 def is_active(selected):
321 321 if selected == active:
322 322 return "active"
323 323
324 324 is_admin = h.HasPermissionAny('hg.admin')('can create repos index page')
325 325
326 326 gr_name = c.repo_group.group_name if c.repo_group else None
327 327 # create repositories with write permission on group is set to true
328 328 create_on_write = h.HasPermissionAny('hg.create.write_on_repogroup.true')()
329 329 group_admin = h.HasRepoGroupPermissionAny('group.admin')(gr_name, 'group admin index page')
330 330 group_write = h.HasRepoGroupPermissionAny('group.write')(gr_name, 'can write into group index page')
331 331
332 332 %>
333 333
334 334 <!--- CONTEXT BAR -->
335 335 <div id="context-bar">
336 336 <div class="wrapper">
337 337 <ul id="context-pages" class="navigation horizontal-list">
338 338 <li class="${is_active('home')}"><a class="menulink" href="${h.route_path('repo_group_home', repo_group_name=c.repo_group.group_name)}"><div class="menulabel">${_('Group Home')}</div></a></li>
339 339 <li class="${is_active('search')}"><a class="menulink" href="${h.route_path('search_repo_group', repo_group_name=c.repo_group.group_name)}"><div class="menulabel">${_('Search')}</div></a></li>
340 340
341 341 <li class="${is_active('options')}">
342 342 <a class="menulink dropdown">
343 343 <div class="menulabel">${_('Options')} <div class="show_more"></div></div>
344 344 </a>
345 345 <ul class="submenu">
346 346 %if is_admin or group_admin:
347 347 <li><a href="${h.route_path('edit_repo_group',repo_group_name=c.repo_group.group_name)}" title="${_('You have admin right to this group, and can edit it')}">${_('Group Settings')}</a></li>
348 348 %endif
349 349 %if is_admin or group_admin or (group_write and create_on_write):
350 350 <li><a href="${h.route_path('repo_new',_query=dict(parent_group=c.repo_group.group_id))}">${_('Add Repository')}</a></li>
351 351 %endif
352 352 %if is_admin or group_admin:
353 353 <li><a href="${h.route_path('repo_group_new',_query=dict(parent_group=c.repo_group.group_id))}">${_(u'Add Parent Group')}</a></li>
354 354 %endif
355 355 </ul>
356 356 </li>
357 357 </ul>
358 358 </div>
359 359 <div class="clear"></div>
360 360 </div>
361 361
362 362 <!--- END CONTEXT BAR -->
363 363
364 364 </%def>
365 365
366 366
367 367 <%def name="usermenu(active=False)">
368 368 ## USER MENU
369 369 <li id="quick_login_li" class="${'active' if active else ''}">
370 370 % if c.rhodecode_user.username == h.DEFAULT_USER:
371 371 <a id="quick_login_link" class="menulink childs" href="${h.route_path('login', _query={'came_from': h.current_route_path(request)})}">
372 372 ${gravatar(c.rhodecode_user.email, 20)}
373 373 <span class="user">
374 374 <span>${_('Sign in')}</span>
375 375 </span>
376 376 </a>
377 377 % else:
378 378 ## logged in user
379 379 <a id="quick_login_link" class="menulink childs">
380 380 ${gravatar(c.rhodecode_user.email, 20)}
381 381 <span class="user">
382 382 <span class="menu_link_user">${c.rhodecode_user.username}</span>
383 383 <div class="show_more"></div>
384 384 </span>
385 385 </a>
386 386 ## subnav with menu for logged in user
387 387 <div class="user-menu submenu">
388 388 <div id="quick_login">
389 389 %if c.rhodecode_user.username != h.DEFAULT_USER:
390 390 <div class="">
391 391 <div class="big_gravatar">${gravatar(c.rhodecode_user.email, 48)}</div>
392 392 <div class="full_name">${c.rhodecode_user.full_name_or_username}</div>
393 393 <div class="email">${c.rhodecode_user.email}</div>
394 394 </div>
395 395 <div class="">
396 396 <ol class="links">
397 397 <li>${h.link_to(_(u'My account'),h.route_path('my_account_profile'))}</li>
398 398 % if c.rhodecode_user.personal_repo_group:
399 399 <li>${h.link_to(_(u'My personal group'), h.route_path('repo_group_home', repo_group_name=c.rhodecode_user.personal_repo_group.group_name))}</li>
400 400 % endif
401 401 <li>${h.link_to(_(u'Pull Requests'), h.route_path('my_account_pullrequests'))}</li>
402 402 ## bookmark-items
403 403 <li class="bookmark-items">
404 404 ${_('Bookmarks')}
405 405 <div class="pull-right">
406 406 <a href="${h.route_path('my_account_bookmarks')}">${_('Manage')}</a>
407 407 </div>
408 408 </li>
409 409 % if not c.bookmark_items:
410 410 <li>
411 411 <a href="${h.route_path('my_account_bookmarks')}">${_('No Bookmarks yet.')}</a>
412 412 </li>
413 413 % endif
414 414 % for item in c.bookmark_items:
415 415 <li>
416 416 % if item.repository:
417 417 <div>
418 418 <a class="bookmark-item" href="${h.route_path('my_account_goto_bookmark', bookmark_id=item.position)}">
419 419 <code>${item.position}</code>
420 420 % if item.repository.repo_type == 'hg':
421 421 <i class="icon-hg" title="${_('Repository')}" style="font-size: 16px"></i>
422 422 % elif item.repository.repo_type == 'git':
423 423 <i class="icon-git" title="${_('Repository')}" style="font-size: 16px"></i>
424 424 % elif item.repository.repo_type == 'svn':
425 425 <i class="icon-svn" title="${_('Repository')}" style="font-size: 16px"></i>
426 426 % endif
427 427 ${(item.title or h.shorter(item.repository.repo_name, 30))}
428 428 </a>
429 429 </div>
430 430 % elif item.repository_group:
431 431 <div>
432 432 <a class="bookmark-item" href="${h.route_path('my_account_goto_bookmark', bookmark_id=item.position)}">
433 433 <code>${item.position}</code>
434 434 <i class="icon-folder-close" title="${_('Repository group')}" style="font-size: 16px"></i>
435 435 ${(item.title or h.shorter(item.repository_group.group_name, 30))}
436 436 </a>
437 437 </div>
438 438 % else:
439 439 <a class="bookmark-item" href="${h.route_path('my_account_goto_bookmark', bookmark_id=item.position)}">
440 440 <code>${item.position}</code>
441 441 ${item.title}
442 442 </a>
443 443 % endif
444 444 </li>
445 445 % endfor
446 446
447 447 <li class="logout">
448 448 ${h.secure_form(h.route_path('logout'), request=request)}
449 449 ${h.submit('log_out', _(u'Sign Out'),class_="btn btn-primary")}
450 450 ${h.end_form()}
451 451 </li>
452 452 </ol>
453 453 </div>
454 454 %endif
455 455 </div>
456 456 </div>
457 457 ## unread counter
458 458 <div class="pill_container">
459 459 <a class="menu_link_notifications ${'empty' if c.unread_notifications == 0 else ''}" href="${h.route_path('notifications_show_all')}">${c.unread_notifications}</a>
460 460 </div>
461 461 % endif
462 462 </li>
463 463 </%def>
464 464
465 465 <%def name="menu_items(active=None)">
466 466 <%
467 467 def is_active(selected):
468 468 if selected == active:
469 469 return "active"
470 470 return ""
471 471 %>
472 472
473 473 <ul id="quick" class="main_nav navigation horizontal-list">
474 474 ## notice box for important system messages
475 475 <li style="display: none">
476 476 <a class="notice-box" href="#openNotice" onclick="showNoticeBox(); return false">
477 477 <div class="menulabel-notice" >
478 478 0
479 479 </div>
480 480 </a>
481 481 </li>
482 482
483 483 ## Main filter
484 484 <li>
485 485 <div class="menulabel main_filter_box">
486 486 <div class="main_filter_input_box">
487 487 <input class="main_filter_input" id="main_filter" size="15" type="text" name="main_filter" placeholder="${_('search / go to...')}" value=""/>
488 488 </div>
489 489 <div class="main_filter_help_box">
490 490 <a href="#showFilterHelp" onclick="showMainFilterBox(); return false">?</a>
491 491 </div>
492 492 </div>
493 493
494 494 <div id="main_filter_help" style="display: none">
495 495 - Use '/' key to quickly access this field.
496 496
497 497 - Enter a name of repository, or repository group for quick search.
498 498
499 499 - Prefix query to allow special search:
500 500
501 501 user:admin, to search for usernames
502 502
503 503 user_group:devops, to search for user groups
504 504
505 505 commit:efced4, to search for commits
506 506 </div>
507 507 </li>
508 508
509 509 ## ROOT MENU
510 510 <li class="${is_active('home')}">
511 511 <a class="menulink" title="${_('Home')}" href="${h.route_path('home')}">
512 512 <div class="menulabel">${_('Home')}</div>
513 513 </a>
514 514 </li>
515 515
516 516 %if c.rhodecode_user.username != h.DEFAULT_USER:
517 517 <li class="${is_active('journal')}">
518 518 <a class="menulink" title="${_('Show activity journal')}" href="${h.route_path('journal')}">
519 519 <div class="menulabel">${_('Journal')}</div>
520 520 </a>
521 521 </li>
522 522 %else:
523 523 <li class="${is_active('journal')}">
524 524 <a class="menulink" title="${_('Show Public activity journal')}" href="${h.route_path('journal_public')}">
525 525 <div class="menulabel">${_('Public journal')}</div>
526 526 </a>
527 527 </li>
528 528 %endif
529 529
530 530 <li class="${is_active('gists')}">
531 531 <a class="menulink childs" title="${_('Show Gists')}" href="${h.route_path('gists_show')}">
532 532 <div class="menulabel">${_('Gists')}</div>
533 533 </a>
534 534 </li>
535 535
536 536 % if h.HasPermissionAll('hg.admin')('access admin main page'):
537 537 <li class="${is_active('admin')}">
538 538 <a class="menulink childs" title="${_('Admin settings')}" href="#" onclick="return false;">
539 539 <div class="menulabel">${_('Admin')} <div class="show_more"></div></div>
540 540 </a>
541 541 ${admin_menu()}
542 542 </li>
543 543 % elif c.rhodecode_user.repositories_admin or c.rhodecode_user.repository_groups_admin or c.rhodecode_user.user_groups_admin:
544 544 <li class="${is_active('admin')}">
545 545 <a class="menulink childs" title="${_('Delegated Admin settings')}">
546 546 <div class="menulabel">${_('Admin')} <div class="show_more"></div></div>
547 547 </a>
548 548 ${admin_menu_simple(c.rhodecode_user.repositories_admin,
549 549 c.rhodecode_user.repository_groups_admin,
550 550 c.rhodecode_user.user_groups_admin or h.HasPermissionAny('hg.usergroup.create.true')())}
551 551 </li>
552 552 % endif
553 553 ## render extra user menu
554 554 ${usermenu(active=(active=='my_account'))}
555 555
556 556 % if c.debug_style:
557 557 <li>
558 558 <a class="menulink" title="${_('Style')}" href="${h.route_path('debug_style_home')}">
559 559 <div class="menulabel">${_('[Style]')}</div>
560 560 </a>
561 561 </li>
562 562 % endif
563 563 </ul>
564 564
565 565 <script type="text/javascript">
566 566 var visualShowPublicIcon = "${c.visual.show_public_icon}" == "True";
567 567
568 568 var formatRepoResult = function(result, container, query, escapeMarkup) {
569 569 return function(data, escapeMarkup) {
570 570 if (!data.repo_id){
571 571 return data.text; // optgroup text Repositories
572 572 }
573 573
574 574 var tmpl = '';
575 575 var repoType = data['repo_type'];
576 576 var repoName = data['text'];
577 577
578 578 if(data && data.type == 'repo'){
579 579 if(repoType === 'hg'){
580 580 tmpl += '<i class="icon-hg"></i> ';
581 581 }
582 582 else if(repoType === 'git'){
583 583 tmpl += '<i class="icon-git"></i> ';
584 584 }
585 585 else if(repoType === 'svn'){
586 586 tmpl += '<i class="icon-svn"></i> ';
587 587 }
588 588 if(data['private']){
589 589 tmpl += '<i class="icon-lock" ></i> ';
590 590 }
591 591 else if(visualShowPublicIcon){
592 592 tmpl += '<i class="icon-unlock-alt"></i> ';
593 593 }
594 594 }
595 595 tmpl += escapeMarkup(repoName);
596 596 return tmpl;
597 597
598 598 }(result, escapeMarkup);
599 599 };
600 600
601 601 var formatRepoGroupResult = function(result, container, query, escapeMarkup) {
602 602 return function(data, escapeMarkup) {
603 603 if (!data.repo_group_id){
604 604 return data.text; // optgroup text Repositories
605 605 }
606 606
607 607 var tmpl = '';
608 608 var repoGroupName = data['text'];
609 609
610 610 if(data){
611 611
612 612 tmpl += '<i class="icon-folder-close"></i> ';
613 613
614 614 }
615 615 tmpl += escapeMarkup(repoGroupName);
616 616 return tmpl;
617 617
618 618 }(result, escapeMarkup);
619 619 };
620 620
621 621
622 622 var autocompleteMainFilterFormatResult = function (data, value, org_formatter) {
623 623
624 624 if (value.split(':').length === 2) {
625 625 value = value.split(':')[1]
626 626 }
627 627
628 628 var searchType = data['type'];
629 629 var valueDisplay = data['value_display'];
630 630
631 631 var escapeRegExChars = function (value) {
632 632 return value.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
633 633 };
634 634 var pattern = '(' + escapeRegExChars(value) + ')';
635 635
636 636 var getRepoIcon = function(repo_type) {
637 637 if (repo_type === 'hg') {
638 638 return '<i class="icon-hg"></i> ';
639 639 }
640 640 else if (repo_type === 'git') {
641 641 return '<i class="icon-git"></i> ';
642 642 }
643 643 else if (repo_type === 'svn') {
644 644 return '<i class="icon-svn"></i> ';
645 645 }
646 646 return ''
647 647 };
648 648
649 649 // highlight match
650 650 valueDisplay = Select2.util.escapeMarkup(valueDisplay);
651 651 valueDisplay = valueDisplay.replace(new RegExp(pattern, 'gi'), '<strong>$1<\/strong>');
652 652
653 653 var icon = '';
654 654
655 655 if (searchType === 'hint') {
656 656 icon += '<i class="icon-folder-close"></i> ';
657 657 }
658 658 // full text search
659 659 else if (searchType === 'search') {
660 660 icon += '<i class="icon-more"></i> ';
661 661 }
662 662 // repository
663 663 else if (searchType === 'repo') {
664 664
665 665 var repoIcon = getRepoIcon(data['repo_type']);
666 666 icon += repoIcon;
667 667
668 668 if (data['private']) {
669 669 icon += '<i class="icon-lock" ></i> ';
670 670 }
671 671 else if (visualShowPublicIcon) {
672 672 icon += '<i class="icon-unlock-alt"></i> ';
673 673 }
674 674 }
675 675 // repository groups
676 676 else if (searchType === 'repo_group') {
677 677 icon += '<i class="icon-folder-close"></i> ';
678 678 }
679 679 // user group
680 680 else if (searchType === 'user_group') {
681 681 icon += '<i class="icon-group"></i> ';
682 682 }
683 683 else if (searchType === 'user') {
684 684 icon += '<img class="gravatar" src="{0}"/>'.format(data['icon_link']);
685 685 }
686 686 // commit
687 687 else if (searchType === 'commit') {
688 688 var repo_data = data['repo_data'];
689 689 var repoIcon = getRepoIcon(repo_data['repository_type']);
690 690 if (repoIcon) {
691 691 icon += repoIcon;
692 692 } else {
693 693 icon += '<i class="icon-tag"></i>';
694 694 }
695 695 }
696 696
697 697 var tmpl = '<div class="ac-container-wrap">{0}{1}</div>';
698 698 return tmpl.format(icon, valueDisplay);
699 699 };
700 700
701 701 var handleSelect = function(element, suggestion) {
702 702 if (suggestion.type === "hint") {
703 703 // we skip action
704 704 $('#main_filter').focus();
705 705 } else {
706 706 window.location = suggestion['url'];
707 707 }
708 708 };
709 709 var autocompleteMainFilterResult = function (suggestion, originalQuery, queryLowerCase) {
710 710 if (queryLowerCase.split(':').length === 2) {
711 711 queryLowerCase = queryLowerCase.split(':')[1]
712 712 }
713 713 return suggestion.value_display.toLowerCase().indexOf(queryLowerCase) !== -1;
714 714 };
715 715
716 716 $('#main_filter').autocomplete({
717 717 serviceUrl: pyroutes.url('goto_switcher_data'),
718 718 params: {"search_context": templateContext.search_context},
719 719 minChars:2,
720 720 maxHeight:400,
721 721 deferRequestBy: 300, //miliseconds
722 722 tabDisabled: true,
723 723 autoSelectFirst: true,
724 724 formatResult: autocompleteMainFilterFormatResult,
725 725 lookupFilter: autocompleteMainFilterResult,
726 726 onSelect: function (element, suggestion) {
727 727 handleSelect(element, suggestion);
728 728 return false;
729 729 },
730 730 onSearchError: function (element, query, jqXHR, textStatus, errorThrown) {
731 731 if (jqXHR !== 'abort') {
732 732 alert("Error during search.\nError code: {0}".format(textStatus));
733 733 window.location = '';
734 734 }
735 735 }
736 736 });
737 737
738 738 showMainFilterBox = function () {
739 739 $('#main_filter_help').toggle();
740 740 };
741 741
742 742 </script>
743 743 <script src="${h.asset('js/rhodecode/base/keyboard-bindings.js', ver=c.rhodecode_version_hash)}"></script>
744 744 </%def>
745 745
746 746 <div class="modal" id="help_kb" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
747 747 <div class="modal-dialog">
748 748 <div class="modal-content">
749 749 <div class="modal-header">
750 750 <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
751 751 <h4 class="modal-title" id="myModalLabel">${_('Keyboard shortcuts')}</h4>
752 752 </div>
753 753 <div class="modal-body">
754 754 <div class="block-left">
755 755 <table class="keyboard-mappings">
756 756 <tbody>
757 757 <tr>
758 758 <th></th>
759 759 <th>${_('Site-wide shortcuts')}</th>
760 760 </tr>
761 761 <%
762 762 elems = [
763 763 ('/', 'Use quick search box'),
764 764 ('g h', 'Goto home page'),
765 765 ('g g', 'Goto my private gists page'),
766 766 ('g G', 'Goto my public gists page'),
767 767 ('g 0-9', 'Goto bookmarked items from 0-9'),
768 768 ('n r', 'New repository page'),
769 769 ('n g', 'New gist page'),
770 770 ]
771 771 %>
772 772 %for key, desc in elems:
773 773 <tr>
774 774 <td class="keys">
775 775 <span class="key tag">${key}</span>
776 776 </td>
777 777 <td>${desc}</td>
778 778 </tr>
779 779 %endfor
780 780 </tbody>
781 781 </table>
782 782 </div>
783 783 <div class="block-left">
784 784 <table class="keyboard-mappings">
785 785 <tbody>
786 786 <tr>
787 787 <th></th>
788 788 <th>${_('Repositories')}</th>
789 789 </tr>
790 790 <%
791 791 elems = [
792 792 ('g s', 'Goto summary page'),
793 793 ('g c', 'Goto changelog page'),
794 794 ('g f', 'Goto files page'),
795 795 ('g F', 'Goto files page with file search activated'),
796 796 ('g p', 'Goto pull requests page'),
797 797 ('g o', 'Goto repository settings'),
798 798 ('g O', 'Goto repository permissions settings'),
799 799 ]
800 800 %>
801 801 %for key, desc in elems:
802 802 <tr>
803 803 <td class="keys">
804 804 <span class="key tag">${key}</span>
805 805 </td>
806 806 <td>${desc}</td>
807 807 </tr>
808 808 %endfor
809 809 </tbody>
810 810 </table>
811 811 </div>
812 812 </div>
813 813 <div class="modal-footer">
814 814 </div>
815 815 </div><!-- /.modal-content -->
816 816 </div><!-- /.modal-dialog -->
817 817 </div><!-- /.modal -->
818 818
@@ -1,104 +1,104 b''
1 1 ## -*- coding: utf-8 -*-
2 2 <%inherit file="base/root.mako"/>
3 3
4 4 <%def name="title()">
5 5 ${_('Sign In')}
6 6 %if c.rhodecode_name:
7 7 &middot; ${h.branding(c.rhodecode_name)}
8 8 %endif
9 9 </%def>
10 10
11 11 <style>body{background-color:#eeeeee;}</style>
12 12 <div class="loginbox">
13 13 <div class="header">
14 14 <div id="header-inner" class="title">
15 15 <div id="logo">
16 16 <div class="logo-wrapper">
17 <a href="${h.route_path('home')}"><img src="${h.asset('images/rhodecode-logo-white-216x60.png')}" alt="RhodeCode"/></a>
17 <a href="${h.route_path('home')}"><img src="${h.asset('images/rhodecode-logo-white-60x60.png')}" alt="RhodeCode"/></a>
18 18 </div>
19 19 %if c.rhodecode_name:
20 20 <div class="branding">- ${h.branding(c.rhodecode_name)}</div>
21 21 %endif
22 22 </div>
23 23 </div>
24 24 </div>
25 25
26 26 <div class="loginwrapper">
27 27 <rhodecode-toast id="notifications"></rhodecode-toast>
28 28
29 29 <div class="left-column">
30 30 <img class="sign-in-image" src="${h.asset('images/sign-in.png')}" alt="RhodeCode"/>
31 31 </div>
32 32
33 33 <%block name="above_login_button" />
34 34 <div id="login" class="right-column">
35 35 <!-- login -->
36 36 <div class="sign-in-title">
37 37 <h1>${_('Sign In using username/password')}</h1>
38 38 </div>
39 39 <div class="inner form">
40 40 ${h.form(request.route_path('login', _query={'came_from': c.came_from}), needs_csrf_token=False)}
41 41
42 42 <label for="username">${_('Username')}:</label>
43 43 ${h.text('username', class_='focus', value=defaults.get('username'))}
44 44 %if 'username' in errors:
45 45 <span class="error-message">${errors.get('username')}</span>
46 46 <br />
47 47 %endif
48 48
49 49 <label for="password">${_('Password')}:
50 50 %if h.HasPermissionAny('hg.password_reset.enabled')():
51 51 <div class="pull-right">${h.link_to(_('Forgot your password?'), h.route_path('reset_password'), class_='pwd_reset', tabindex="-1")}</div>
52 52 %endif
53 53
54 54 </label>
55 55 ${h.password('password', class_='focus')}
56 56 %if 'password' in errors:
57 57 <span class="error-message">${errors.get('password')}</span>
58 58 <br />
59 59 %endif
60 60
61 61 ${h.checkbox('remember', value=True, checked=defaults.get('remember'))}
62 62 <% timeout = request.registry.settings.get('beaker.session.timeout', '0') %>
63 63 % if timeout == '0':
64 64 <% remember_label = _('Remember my indefinitely') %>
65 65 % else:
66 66 <% remember_label = _('Remember me for {}').format(h.age_from_seconds(timeout)) %>
67 67 % endif
68 68 <label class="checkbox" for="remember">${remember_label}</label>
69 69
70 70 <p class="links">
71 71 %if h.HasPermissionAny('hg.admin', 'hg.register.auto_activate', 'hg.register.manual_activate')():
72 72 ${h.link_to(_("Create a new account."), request.route_path('register'), class_='new_account')}
73 73 %endif
74 74 </p>
75 75
76 76 %if not h.HasPermissionAny('hg.password_reset.enabled')():
77 77 ## password reset hidden or disabled.
78 78 <p class="help-block">
79 79 ${_('Password reset is disabled.')} <br/>
80 80 ${_('Please contact ')}
81 81 % if c.visual.rhodecode_support_url:
82 82 <a href="${c.visual.rhodecode_support_url}" target="_blank">${_('Support')}</a>
83 83 ${_('or')}
84 84 % endif
85 85 ${_('an administrator if you need help.')}
86 86 </p>
87 87 %endif
88 88
89 89 ${h.submit('sign_in', _('Sign In'), class_="btn sign-in", title=_('Sign in to {}').format(c.rhodecode_edition))}
90 90
91 91 ${h.end_form()}
92 92 <script type="text/javascript">
93 93 $(document).ready(function(){
94 94 $('#username').focus();
95 95 })
96 96 </script>
97 97
98 98 </div>
99 99 <!-- end login -->
100 100
101 101 <%block name="below_login_button" />
102 102 </div>
103 103 </div>
104 104 </div>
@@ -1,101 +1,101 b''
1 1 ## -*- coding: utf-8 -*-
2 2 <%inherit file="base/root.mako"/>
3 3
4 4 <%def name="title()">
5 5 ${_('Reset Password')}
6 6 %if c.rhodecode_name:
7 7 &middot; ${h.branding(c.rhodecode_name)}
8 8 %endif
9 9 </%def>
10 10 <style>body{background-color:#eeeeee;}</style>
11 11
12 12 <div class="loginbox">
13 13 <div class="header">
14 14 <div id="header-inner" class="title">
15 15 <div id="logo">
16 16 <div class="logo-wrapper">
17 <a href="${h.route_path('home')}"><img src="${h.asset('images/rhodecode-logo-white-216x60.png')}" alt="RhodeCode"/></a>
17 <a href="${h.route_path('home')}"><img src="${h.asset('images/rhodecode-logo-white-60x60.png')}" alt="RhodeCode"/></a>
18 18 </div>
19 19 %if c.rhodecode_name:
20 20 <div class="branding">- ${h.branding(c.rhodecode_name)}</div>
21 21 %endif
22 22 </div>
23 23 </div>
24 24 </div>
25 25
26 26 <div class="loginwrapper">
27 27 <rhodecode-toast id="notifications"></rhodecode-toast>
28 28 <div class="left-column">
29 29 <img class="sign-in-image" src="${h.asset('images/sign-in.png')}" alt="RhodeCode"/>
30 30 </div>
31 31
32 32 %if h.HasPermissionAny('hg.password_reset.disabled')():
33 33 <div class="right-column">
34 34 <p>
35 35 ${_('Password reset is disabled. Please contact ')}
36 36 % if c.visual.rhodecode_support_url:
37 37 <a href="${c.visual.rhodecode_support_url}" target="_blank">${_('Support')}</a>
38 38 ${_('or')}
39 39 % endif
40 40 ${_('an administrator if you need help.')}
41 41 </p>
42 42 </div>
43 43 %else:
44 44 <div id="register" class="right-column">
45 45 <!-- login -->
46 46 <div class="sign-in-title">
47 47 <h1>${_('Reset your Password')}</h1>
48 48 <h4>${h.link_to(_("Go to the login page to sign in."), request.route_path('login'))}</h4>
49 49 </div>
50 50 <div class="inner form">
51 51 ${h.form(request.route_path('reset_password'), needs_csrf_token=False)}
52 52 <label for="email">${_('Email Address')}:</label>
53 53 ${h.text('email', defaults.get('email'))}
54 54 %if 'email' in errors:
55 55 <span class="error-message">${errors.get('email')}</span>
56 56 <br />
57 57 %endif
58 58 <p class="help-block">${_('Password reset link will be sent to matching email address')}</p>
59 59
60 60 %if captcha_active:
61 61 <div class="login-captcha">
62 62 <label for="email">${_('Captcha')}:</label>
63 63 ${h.hidden('recaptcha_field')}
64 64 <div id="recaptcha"></div>
65 65
66 66 %if 'recaptcha_field' in errors:
67 67 <span class="error-message">${errors.get('recaptcha_field')}</span>
68 68 <br />
69 69 %endif
70 70 </div>
71 71 %endif
72 72
73 73 ${h.submit('send', _('Send password reset email'), class_="btn sign-in")}
74 74 <p class="help-block pull-right">
75 75 RhodeCode ${c.rhodecode_edition}
76 76 </p>
77 77
78 78 ${h.end_form()}
79 79 </div>
80 80 </div>
81 81 %endif
82 82 </div>
83 83 </div>
84 84
85 85 <script type="text/javascript">
86 86 $(document).ready(function(){
87 87 $('#email').focus();
88 88 });
89 89 </script>
90 90
91 91 % if captcha_active:
92 92 <script type="text/javascript">
93 93 var onloadCallback = function() {
94 94 grecaptcha.render('recaptcha', {
95 95 'sitekey' : "${captcha_public_key}"
96 96 });
97 97 };
98 98 </script>
99 99 <script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit" async defer></script>
100 100 % endif
101 101
@@ -1,146 +1,146 b''
1 1 ## -*- coding: utf-8 -*-
2 2 <%inherit file="base/root.mako"/>
3 3
4 4 <%def name="title()">
5 5 ${_('Create an Account')}
6 6 %if c.rhodecode_name:
7 7 &middot; ${h.branding(c.rhodecode_name)}
8 8 %endif
9 9 </%def>
10 10 <style>body{background-color:#eeeeee;}</style>
11 11
12 12 <div class="loginbox">
13 13 <div class="header">
14 14 <div id="header-inner" class="title">
15 15 <div id="logo">
16 16 <div class="logo-wrapper">
17 <a href="${h.route_path('home')}"><img src="${h.asset('images/rhodecode-logo-white-216x60.png')}" alt="RhodeCode"/></a>
17 <a href="${h.route_path('home')}"><img src="${h.asset('images/rhodecode-logo-white-60x60.png')}" alt="RhodeCode"/></a>
18 18 </div>
19 19 %if c.rhodecode_name:
20 20 <div class="branding">- ${h.branding(c.rhodecode_name)}</div>
21 21 %endif
22 22 </div>
23 23 </div>
24 24 </div>
25 25
26 26 <div class="loginwrapper">
27 27 <rhodecode-toast id="notifications"></rhodecode-toast>
28 28 <div class="left-column">
29 29 <img class="sign-in-image" src="${h.asset('images/sign-in.png')}" alt="RhodeCode"/>
30 30 </div>
31 31 <%block name="above_register_button" />
32 32 <div id="register" class="right-column">
33 33 <!-- login -->
34 34 <div class="sign-in-title">
35 35 % if external_auth_provider:
36 36 <h1>${_('Create an account linked with {}').format(external_auth_provider)}</h1>
37 37 % else:
38 38 <h1>${_('Create an account')}</h1>
39 39 % endif
40 40
41 41 <h4>${h.link_to(_("Go to the login page to sign in with an existing account."), request.route_path('login'))}</h4>
42 42 </div>
43 43 <div class="inner form">
44 44 ${h.form(request.route_path('register'), needs_csrf_token=False)}
45 45
46 46 <label for="username">${_('Username')}:</label>
47 47 ${h.text('username', defaults.get('username'))}
48 48 %if 'username' in errors:
49 49 <span class="error-message">${errors.get('username')}</span>
50 50 <br />
51 51 %endif
52 52
53 53 % if external_auth_provider:
54 54 ## store internal marker about external identity
55 55 ${h.hidden('external_identity', external_auth_provider)}
56 56 ## hide password prompts for social auth
57 57 <div style="display: none">
58 58 % endif
59 59
60 60 <label for="password">${_('Password')}:</label>
61 61 ${h.password('password', defaults.get('password'))}
62 62 %if 'password' in errors:
63 63 <span class="error-message">${errors.get('password')}</span>
64 64 <br />
65 65 %endif
66 66
67 67 <label for="password_confirmation">${_('Re-enter password')}:</label>
68 68 ${h.password('password_confirmation', defaults.get('password_confirmation'))}
69 69 %if 'password_confirmation' in errors:
70 70 <span class="error-message">${errors.get('password_confirmation')}</span>
71 71 <br />
72 72 %endif
73 73
74 74 % if external_auth_provider:
75 75 ## hide password prompts for social auth
76 76 </div>
77 77 % endif
78 78
79 79 <label for="firstname">${_('First Name')}:</label>
80 80 ${h.text('firstname', defaults.get('firstname'))}
81 81 %if 'firstname' in errors:
82 82 <span class="error-message">${errors.get('firstname')}</span>
83 83 <br />
84 84 %endif
85 85
86 86 <label for="lastname">${_('Last Name')}:</label>
87 87 ${h.text('lastname', defaults.get('lastname'))}
88 88 %if 'lastname' in errors:
89 89 <span class="error-message">${errors.get('lastname')}</span>
90 90 <br />
91 91 %endif
92 92
93 93 <label for="email">${_('Email')}:</label>
94 94 ${h.text('email', defaults.get('email'))}
95 95 %if 'email' in errors:
96 96 <span class="error-message">${errors.get('email')}</span>
97 97 <br />
98 98 %endif
99 99
100 100 %if captcha_active:
101 101 <div>
102 102 <label for="recaptcha">${_('Captcha')}:</label>
103 103 ${h.hidden('recaptcha_field')}
104 104 <div id="recaptcha"></div>
105 105 %if 'recaptcha_field' in errors:
106 106 <span class="error-message">${errors.get('recaptcha_field')}</span>
107 107 <br />
108 108 %endif
109 109 </div>
110 110 %endif
111 111
112 112 %if not auto_active:
113 113 <p class="activation_msg">
114 114 ${_('Account activation requires admin approval.')}
115 115 </p>
116 116 %endif
117 117 <p class="register_message">
118 118 ${register_message|n}
119 119 </p>
120 120
121 121 ${h.submit('sign_up',_('Create Account'), class_="btn sign-in", title=_('Create Account in {}').format(c.rhodecode_edition))}
122 122 ${h.end_form()}
123 123 </div>
124 124 <%block name="below_register_button" />
125 125 </div>
126 126 </div>
127 127 </div>
128 128
129 129
130 130 <script type="text/javascript">
131 131 $(document).ready(function(){
132 132 $('#username').focus();
133 133 });
134 134 </script>
135 135
136 136 % if captcha_active:
137 137 <script type="text/javascript">
138 138 var onloadCallback = function() {
139 139 grecaptcha.render('recaptcha', {
140 140 'sitekey' : "${captcha_public_key}"
141 141 });
142 142 };
143 143 </script>
144 144 <script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit" async defer></script>
145 145 % endif
146 146
1 NO CONTENT: file was removed, binary diff hidden
General Comments 0
You need to be logged in to leave comments. Login now