Skoro hotova nova verze korekturovatka.
Dodelany nektere vychytavky z nove verze oprafu. Nefunguje editace komentaru. Zamky a podobna havet neimplementovany.
This commit is contained in:
		
							parent
							
								
									09b2090371
								
							
						
					
					
						commit
						2a163fe6a4
					
				
					 9 changed files with 177 additions and 28 deletions
				
			
		
							
								
								
									
										39
									
								
								korektury/migrations/0002_auto_20151202_2351.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								korektury/migrations/0002_auto_20151202_2351.py
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,39 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| from __future__ import unicode_literals | ||||
| 
 | ||||
| from django.db import models, migrations | ||||
| import django.utils.timezone | ||||
| 
 | ||||
| 
 | ||||
| class Migration(migrations.Migration): | ||||
| 
 | ||||
|     dependencies = [ | ||||
|         ('korektury', '0001_initial'), | ||||
|     ] | ||||
| 
 | ||||
|     operations = [ | ||||
|         migrations.CreateModel( | ||||
|             name='Komentar', | ||||
|             fields=[ | ||||
|                 ('id', models.AutoField(serialize=False, primary_key=True)), | ||||
|                 ('cas', models.DateTimeField(default=django.utils.timezone.now, help_text=b'\xc4\x8cas zad\xc3\xa1n\xc3\xad koment\xc3\xa1\xc5\x99e', verbose_name='\u010das koment\xe1\u0159e')), | ||||
|                 ('autor', models.TextField(help_text=b'Autor koment\xc3\xa1\xc5\x99e', verbose_name='autor koment\xe1\u0159e', blank=True)), | ||||
|                 ('text', models.TextField(help_text=b'Text koment\xc3\xa1\xc5\x99e', verbose_name='text koment\xe1\u0159e', blank=True)), | ||||
|                 ('oprava', models.ForeignKey(to='korektury.Oprava')), | ||||
|             ], | ||||
|             options={ | ||||
|                 'ordering': ['cas'], | ||||
|                 'db_table': 'komentare', | ||||
|                 'verbose_name': 'Koment\xe1\u0159 k oprav\u011b', | ||||
|                 'verbose_name_plural': 'Koment\xe1\u0159e k oprav\u011b', | ||||
|             }, | ||||
|             bases=(models.Model,), | ||||
|         ), | ||||
|         migrations.RemoveField( | ||||
|             model_name='opravakomentar', | ||||
|             name='oprava', | ||||
|         ), | ||||
|         migrations.DeleteModel( | ||||
|             name='OpravaKomentar', | ||||
|         ), | ||||
|     ] | ||||
|  | @ -98,9 +98,9 @@ class Oprava(models.Model): | |||
| 
 | ||||
| @reversion.register(ignore_duplicate_revision=True) | ||||
| @python_2_unicode_compatible | ||||
| class OpravaKomentar(models.Model): | ||||
| class Komentar(models.Model): | ||||
|     class Meta: | ||||
|         db_table = 'opravy_komentare' | ||||
|         db_table = 'komentare' | ||||
|         verbose_name = u'Komentář k opravě' | ||||
|         verbose_name_plural = u'Komentáře k opravě' | ||||
|         ordering = ['cas'] | ||||
|  | @ -108,7 +108,7 @@ class OpravaKomentar(models.Model): | |||
|     #Interní ID | ||||
|     id  = models.AutoField(primary_key = True) | ||||
| 
 | ||||
|     cas = models.DateTimeField(u'čas komentáře',help_text = 'Čas zadání komentáře') | ||||
|     cas = models.DateTimeField(u'čas komentáře',default=timezone.now,help_text = 'Čas zadání komentáře') | ||||
| 
 | ||||
|     oprava = models.ForeignKey(Oprava) | ||||
|     # TODO: Změnit na cizí klíč do orgů | ||||
|  |  | |||
							
								
								
									
										
											BIN
										
									
								
								korektury/static/korektury/imgs/comment.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								korektury/static/korektury/imgs/comment.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 726 B | 
							
								
								
									
										
											BIN
										
									
								
								korektury/static/korektury/imgs/delete-gr.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								korektury/static/korektury/imgs/delete-gr.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 593 B | 
							
								
								
									
										
											BIN
										
									
								
								korektury/static/korektury/imgs/edit-gr.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								korektury/static/korektury/imgs/edit-gr.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 973 B | 
|  | @ -1,3 +1,10 @@ | |||
| body{background: #f3f3f3; color: black;} | ||||
| body.locked { | ||||
|     background: rgb(144, 189, 255); | ||||
| } | ||||
| 
 | ||||
| img{background:white;} | ||||
| 
 | ||||
| .pointer-hi,  | ||||
| .pointer,  | ||||
| .pointer-done,  | ||||
|  | @ -82,11 +89,6 @@ form { | |||
| 	background-color: yellow;	 | ||||
| } | ||||
| 
 | ||||
| body { | ||||
| 	background-color: #b0b0ff; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| .box button, | ||||
| .box img, | ||||
|  | @ -103,3 +105,18 @@ body { | |||
| .box-done button:hover { | ||||
| 	border: 1px solid black; | ||||
| } | ||||
| 
 | ||||
| .comment hr { | ||||
| 	height: 0px; | ||||
| } | ||||
| 
 | ||||
| .corr-header { | ||||
|     overflow: auto; | ||||
| } | ||||
| 
 | ||||
| .author { | ||||
|     font-weight: bold; | ||||
|     float: left; | ||||
|     margin-top: 3px; | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -113,24 +113,47 @@ function img_click(element, ev) { | |||
| 	return show_form(img_id, dx, dy, '', '', '', ''); | ||||
| } | ||||
| 
 | ||||
| // show comment form, when 'edit' button pressed
 | ||||
| function box_edit(button)  | ||||
| // show comment form, when 'edit' or 'comment' button pressed
 | ||||
| function box_edit(button, action) | ||||
| { | ||||
| 	var divbox = button.parentNode.parentNode.parentNode; | ||||
| 	var divbox = button.parentNode.parentNode.parentNode.parentNode; | ||||
| 	var id = divbox.id; | ||||
| 	//alert("id: " +  id);
 | ||||
| 	var divpointer = document.getElementById(divbox.id + '-pointer'); | ||||
| 	var text_el = document.getElementById(divbox.id + '-text'); | ||||
| 	var text = text_el.innerHTML.unescapeHTML(); | ||||
| 
 | ||||
| 	var text; | ||||
| 	if (action == 'update') { | ||||
| 		var text_el = document.getElementById(divbox.id + '-text'); | ||||
| 		text = text_el.innerHTML.unescapeHTML(); | ||||
| 	} else { | ||||
| 		text = ''; | ||||
| 	} | ||||
| 
 | ||||
| 	var dx = parseInt(divpointer.style.left); | ||||
| 	var dy = parseInt(divpointer.style.top); | ||||
| 	//alert('not yet 2:' + text + text_el); // + divpointer.style.top "x" + divpo );
 | ||||
| 	id = id.substring(2); | ||||
| 	return show_form(divbox.img_id, dx, dy, id, text, 'update'); | ||||
| 	return show_form(divbox.img_id, dx, dy, id, text, action); | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| // show comment form when 'update-comment' button pressed
 | ||||
| function update_comment(button) | ||||
| { | ||||
| 	var divbox = button.parentNode.parentNode.parentNode; | ||||
| 	var id = divbox.id; | ||||
| 	var divpointer = document.getElementById(divbox.id + '-pointer'); | ||||
| 	var dx = parseInt(divpointer.style.left); | ||||
| 	var dy = parseInt(divpointer.style.top); | ||||
| 
 | ||||
|     var commentdiv = button.parentNode.parentNode; | ||||
|     var id = commentdiv.id.substring(1); | ||||
| 
 | ||||
|     var text = document.getElementById('kt' + id).innerHTML.unescapeHTML(); | ||||
| 
 | ||||
|     return show_form(divbox.img_id, dx, dy, id, text, 'update-comment'); | ||||
| } | ||||
| 
 | ||||
| //fill up comment form and show him
 | ||||
| function show_form(img_id, dx, dy, id, text, action) { | ||||
| 	var form = document.getElementById('commform'); | ||||
|  |  | |||
|  | @ -61,30 +61,84 @@ | |||
| 	    onmouseover='box_onmouseover(this,{% if o.status = 'opraveno' %}1{% else %}0{% endif %})'  | ||||
| 		onmouseout='box_onmouseout(this,{% if o.status = 'opraveno' %}1{% else %}0{% endif %})' > | ||||
| 	   | ||||
|           | ||||
| 	<b>{{o.autor}}</b> | ||||
|     <div class='corr-header'>  | ||||
| 	<div class='author'>{{o.autor}}</div> | ||||
| 	 <div class='float-right'> | ||||
| 	  <form  action='' onsubmit='save_scroll(this)' method='POST'> | ||||
| 		{% csrf_token %} | ||||
| 	   <input type='hidden' name='pdf' value='22_3_verze5.pdf'> | ||||
| 	   <input type='hidden' name='id' value='{{o.id}}'> | ||||
| 	   <input type='hidden' name='scroll'> | ||||
| 	   <button type='submit' name='action' value='del' title='Sma¾ opravu'><img src="/static/korektury/imgs/delete.png"/></button> | ||||
| 	   {% if o.status = 'opraveno' %} | ||||
| 	   	   <button type='submit' name='action' value='undone' title='Oznaè jako neopravené'><img src="/static/korektury/imgs/undo.png"/></button> | ||||
| 	   {% if o.komentare %} | ||||
| 	   <button name='action' value='del' type='button' | ||||
|             title="Korekturu nelze smazat – už ji někdo okomentoval"> | ||||
| 		   <img src="/static/korektury/imgs/delete-gr.png"/> | ||||
| 	   </button> | ||||
| 	   {% else %} | ||||
| 	   	   <button type='submit' name='action' value='done' title='Oznaè jako opravené'><img src="/static/korektury/imgs/check.png"/></button> | ||||
| 	   <button type='submit' name='action' value='del' title='Smaž opravu'> | ||||
| 		   <img src="/static/korektury/imgs/delete.png"/> | ||||
| 	   </button> | ||||
| 	   {% endif %} | ||||
| 	    | ||||
| 	   {% if o.status = 'opraveno' %} | ||||
| 	   <button type='submit' name='action' value='undone' title='Označ jako neopravené'> | ||||
| 		   <img src="/static/korektury/imgs/undo.png"/> | ||||
| 	   </button> | ||||
| 	   {% else %} | ||||
| 	   <button type='submit' name='action' value='done' title='Označ jako opravené'> | ||||
| 		   <img src="/static/korektury/imgs/check.png"/> | ||||
| 	   </button> | ||||
| 	   {% endif %} | ||||
| 	     | ||||
|           | ||||
| 	   <button type='button' onclick='box_edit(this);' title='Oprav opravu'><img src="/static/korektury/imgs/edit.png"/></button> | ||||
| 	   <a href='#op{{o.id}}'><button type='button' title='Link na opravu'><img src="/static/korektury/imgs/link.png"/></button></a> | ||||
| 	   	    <a href='#op579'><img title='Dal¹í oprava' src="/static/korektury/imgs/next.png"/></button></a> | ||||
|        {% if o.komentare %} | ||||
| 		<button type='button' title="Korekturu nelze upravit – už ji někdo okomentoval"> | ||||
| 			<img src="/static/korektury/imgs/edit-gr.png"/> | ||||
| 		</button> | ||||
| 	   {% else %} | ||||
| 	   <button type='button' onclick='box_edit(this);' title='Oprav opravu'> | ||||
| 		   <img src="/static/korektury/imgs/edit.png"/> | ||||
| 	   </button> | ||||
| 	   {% endif %} | ||||
| 	   <button type='button' onclick='box_edit(this, "comment");' title='Komentovat'> | ||||
| 		   <img src="/static/korektury/imgs/comment.png"/> | ||||
| 	   </button> | ||||
| 
 | ||||
| 	   <a href='#op{{o.id}}'><button type='button' title='Link na opravu'> | ||||
| 			   <img src="/static/korektury/imgs/link.png"/> | ||||
| 	   </button></a> | ||||
| 	   <button><a href='#op579'> | ||||
| 			   <img title='Dal¹í oprava' src="/static/korektury/imgs/next.png"/> | ||||
| 	   </a></button> | ||||
| 	     | ||||
| 	  </form> | ||||
| 	 </div> 	 <div id='op{{o.id}}-text'>{{o.text}}</div> | ||||
| 	 </div> | ||||
| 	</div> | ||||
| 	<div id='op{{o.id}}-text'>{{o.text}}</div> | ||||
| 	{% for k in o.komentare %} | ||||
|     <hr> | ||||
| 	<div class='comment' id='k{{k.id}}'> | ||||
|     	<div class='corr-header'> | ||||
|         	<div class='author'>{{k.autor}}</div> | ||||
|             	<div class="float-right"> | ||||
|                     <form  action='' onsubmit='save_scroll(this)' method='POST'> | ||||
| 					  {% csrf_token %} | ||||
|                       <input type='hidden' name='pdf' value='22_3_verze1.pdf'> | ||||
| 					  <input type='hidden' name='id' value='{{k.id}}'> | ||||
|                       <input type='hidden' name='scroll'> | ||||
|                       <button type='submit' name='action' value='del-comment' title='Smaž komentář' | ||||
|                       	onclick='return confirm("Opravdu smazat komentář?")'> | ||||
| 						  <img src="/static/korektury/imgs/delete.png"/> | ||||
| 					  </button> | ||||
|                     </form> | ||||
|                     <button type='button' onclick='update_comment(this);' title='Uprav komentář'> | ||||
| 						<img src="/static/korektury/imgs/edit.png"/></button> | ||||
|                   </div> | ||||
|               </div> | ||||
| 			  <div id='kt{{k.id}}'>{{k.text}}</div> | ||||
|             </div> | ||||
| 	{% endfor %} | ||||
|           | ||||
| 	</div>		<div onclick='img_click(this,event)' id='op579-pointer' class='pointer'></div> | ||||
| 	</div>	 | ||||
| 
 | ||||
| 
 | ||||
| {% endfor %} | ||||
|  |  | |||
|  | @ -9,7 +9,7 @@ from django.utils.translation import ugettext as _ | |||
| from django.http import Http404 | ||||
| from django.http import HttpResponseRedirect | ||||
| 
 | ||||
| from .models import Oprava | ||||
| from .models import Oprava,Komentar | ||||
| from .forms import OpravaForm | ||||
| 
 | ||||
| from datetime import timedelta, date, datetime | ||||
|  | @ -65,7 +65,20 @@ class KorekturyView(generic.TemplateView): | |||
|             op = Oprava.objects.filter(id=id).first() | ||||
|             op.status = op.STATUS_OPRAVENO | ||||
|             op.save() | ||||
|         elif (action == u'comment'): | ||||
|             id = int(q.get('id')) | ||||
|             op = Oprava.objects.filter(id=id).first() | ||||
|             autor = q.get('au') | ||||
|             text = q.get('txt') | ||||
|             kom = Komentar(oprava=op,autor=autor,text=text) | ||||
|             kom.save() | ||||
|         elif (action == u'del-comment'): | ||||
|             id = int(q.get('id')) | ||||
|             kom = Komentar.objects.filter(id=id).first() | ||||
|             kom.delete() | ||||
|              | ||||
| 
 | ||||
| #        return HttpResponse(u'Keys: %s '%(q.iteitems())) | ||||
|         return HttpResponse(u'Oprav: %d, akce: %s'%( | ||||
|             len(Oprava.objects.all()),action)) | ||||
|   | ||||
|  | @ -78,7 +91,10 @@ class KorekturyView(generic.TemplateView): | |||
|         context['img_name'] = "22_3_verze5" | ||||
|         context['img_indexes'] = range(27)  | ||||
|         context['form_oprava'] = OpravaForm() | ||||
|         context['opravy'] = Oprava.objects.all() | ||||
|         opravy = Oprava.objects.all() | ||||
|         for o in opravy: | ||||
|             o.komentare = o.komentar_set.all() | ||||
|         context['opravy'] = opravy | ||||
|         return context | ||||
|     def form_valid(self,form): | ||||
|         return super(KorekturyView,self).form_valid(form) | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue