Možnost stáhnout si řešení pojmenovaná podle řešitele #26
					 5 changed files with 75 additions and 1 deletions
				
			
		|  | @ -2,12 +2,24 @@ | ||||||
| {% load static %} | {% load static %} | ||||||
| {% load deadliny %} | {% load deadliny %} | ||||||
| {% load mail %} | {% load mail %} | ||||||
|  | {% load jmena %} | ||||||
| 
 | 
 | ||||||
| {% block content %} | {% block content %} | ||||||
| 
 | 
 | ||||||
|   {% if edit %} |   {% if edit %} | ||||||
|     <script src="{% static 'odevzdavatko/dynamic_formsets_for_detail.js' %}"></script> |     <script src="{% static 'odevzdavatko/dynamic_formsets_for_detail.js' %}"></script> | ||||||
|     <script src="{% static 'odevzdavatko/check_for_detail.js' %}"></script> |     <script src="{% static 'odevzdavatko/check_for_detail.js' %}"></script> | ||||||
|  |     <script type="text/javascript"> | ||||||
|  |       $(document).ready(function () { | ||||||
|  |         const zaskrtavatko = document.getElementById('pridat-jmena-resitelu'); | ||||||
|  | |||||||
|  |         zaskrtavatko.addEventListener('change', () => { | ||||||
|  |           for (var priloha of document.getElementsByClassName("reseni-ke-stazeni")) { | ||||||
|  |             let new_download = zaskrtavatko.checked ? priloha.dataset.altFilename : ''; | ||||||
|  |             priloha.setAttribute('download', new_download); | ||||||
|  |           } | ||||||
|  |         }); | ||||||
|  |       }); | ||||||
|  |     </script> | ||||||
|   {% endif %} |   {% endif %} | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -40,11 +52,20 @@ | ||||||
| <tr><th>Soubor</th><th>Řešitelova poznámka</th><th>Datum</th></tr> | <tr><th>Soubor</th><th>Řešitelova poznámka</th><th>Datum</th></tr> | ||||||
| {% for priloha in object.prilohy.all %} | {% for priloha in object.prilohy.all %} | ||||||
| <tr> | <tr> | ||||||
| 	<td><a href="{{ priloha.soubor.url }}" download>{{ priloha.split | last }}</a></td> |   <td><a class='reseni-ke-stazeni'  | ||||||
|  |          href="{{ priloha.soubor.url }}" | ||||||
|  |          download | ||||||
|  |          data-alt-filename="{{object.resitele.first.osoba | jmeno_jako_prefix }}_{{ object.id }}_{{ priloha.split | last}}" | ||||||
|  |          >{{ priloha.split | last }}</a></td> | ||||||
| 	<td>{{ priloha.res_poznamka }}</td> | 	<td>{{ priloha.res_poznamka }}</td> | ||||||
| 	<td>{{ priloha.vytvoreno }}</td></tr> | 	<td>{{ priloha.vytvoreno }}</td></tr> | ||||||
| {% endfor %} | {% endfor %} | ||||||
| </table> | </table> | ||||||
|  | {% if edit %} {# FIXME: tohle nesouvisí s editací, ale s tím, jestli je člověk org… #} | ||||||
|  |   <br> | ||||||
|  |   <input type=checkbox id="pridat-jmena-resitelu"> | ||||||
|  |   <label class="field-label" for="pridat-jmena-resitelu">Uvést jméno řešitele v názvu souboru při stažení.</label> | ||||||
|  | {% endif %} | ||||||
| {% else %} | {% else %} | ||||||
| <p>Žádné přílohy</p> | <p>Žádné přílohy</p> | ||||||
| {% endif %} | {% endif %} | ||||||
|  |  | ||||||
							
								
								
									
										0
									
								
								odevzdavatko/templatetags/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								odevzdavatko/templatetags/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										9
									
								
								odevzdavatko/templatetags/jmena.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								odevzdavatko/templatetags/jmena.py
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,9 @@ | ||||||
|  | from django import template | ||||||
|  | register = template.Library() | ||||||
|  | 
 | ||||||
|  | from personalni.utils import normalizuj_jmeno | ||||||
|  | import seminar.models as m # jen kvůli typové anotaci… | ||||||
|  | 
 | ||||||
|  | @register.filter | ||||||
|  | def jmeno_jako_prefix(o: m.Osoba): | ||||||
|  | 	return normalizuj_jmeno(o).replace(' ', '_') | ||||||
							
								
								
									
										11
									
								
								personalni/utils.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								personalni/utils.py
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,11 @@ | ||||||
|  | import seminar.models as m | ||||||
|  | from various.utils import bez_diakritiky_translate | ||||||
|  | import re | ||||||
|  | 
 | ||||||
|  | def normalizuj_jmeno(o: m.Osoba) -> str: | ||||||
|  | 	# FIXME: Možná není potřeba vázat na model? | ||||||
|  | 	cele_jmeno = f'{o.jmeno} {o.prijmeni}' | ||||||
|  | 	cele_jmeno = cele_jmeno.translate(bez_diakritiky_translate) | ||||||
|  | 	cele_jmeno = re.sub(r'[^a-zA-Z- ]', '', cele_jmeno) | ||||||
|  | 	return cele_jmeno | ||||||
|  | 
 | ||||||
							
								
								
									
										33
									
								
								various/utils.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								various/utils.py
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,33 @@ | ||||||
|  | bez_diakritiky = ({} | ||||||
|  | 	# FIXME: funguje jen pro český a slovenský text, jinak jsou špatně | ||||||
|  | 	# transliterace. Potenciální řešení: | ||||||
|  | 	# https://stackoverflow.com/questions/517923/what-is-the-best-way-to-remove-accents-normalize-in-a-python-unicode-string | ||||||
|  | 	# (ale přidává to další závislosti…) | ||||||
|  | 
 | ||||||
|  | 	# Tisknutelné ASCII | ||||||
|  | 	| {chr(a): chr(a) for a in range(32, 126+1)} | ||||||
|  | 	 | ||||||
|  | 	# České, slovenské a blízké diakritiky a divnoznaky | ||||||
|  | 	| { x: 'a' for x in 'áÁäÄ'} | ||||||
|  | 	| { x: 'c' for x in 'čČ'} | ||||||
|  | 	| { x: 'd' for x in 'ďĎ'} | ||||||
|  | 	| { x: 'e' for x in 'éÉěĚëË'} | ||||||
|  | 	| { x: 'i' for x in 'íÍ'} | ||||||
|  | 	| { x: 'l' for x in 'ľĽĺĹ'} | ||||||
|  | 	| { x: 'n' for x in 'ňŇ'} | ||||||
|  | 	| { x: 'o' for x in 'óÓöÖôÔ'} | ||||||
|  | 	| { x: 'r' for x in 'řŘŕŔ'} | ||||||
|  | 	| { x: 's' for x in 'šŠßẞ'} | ||||||
|  | 	| { x: 't' for x in 'ťŤ'} | ||||||
|  | 	| { x: 'u' for x in 'úÚůŮ'} | ||||||
|  | 	| { x: 'y' for x in 'ýÝ'} | ||||||
|  | 	| { x: 'z' for x in 'žŽ'} | ||||||
|  | 	) | ||||||
|  | 
 | ||||||
|  | # Tabulka pro str.translate | ||||||
|  | class _bez_diakritiky_translate: | ||||||
|  | 	def __getitem__(self, it): | ||||||
|  | 		return ord(bez_diakritiky.get(chr(it), None)) | ||||||
|  | bez_diakritiky_translate = _bez_diakritiky_translate() | ||||||
|  | 
 | ||||||
|  | # TODO: testy? | ||||||
		Loading…
	
		Reference in a new issue
	
	
Tohle tu chceme nechávat?
Jeejda… I mean, stejně to nikdo nečte, ale já ta logování smažu :-)