Browse Source

Layout de alternancia de pos de disp. alterados

pull/468/head
LeandroRoberto 9 years ago
parent
commit
b5002f8c47
  1. 38
      compilacao/forms.py
  2. 2
      compilacao/templatetags/compilacao_filters.py
  3. 11
      compilacao/views.py
  4. 19
      parlamentares/migrations/0018_auto_20160508_2201.py
  5. 24
      static/js/compilacao_edit.js
  6. 71
      static/styles/compilacao.scss
  7. 6
      templates/compilacao/text_edit_bloco.html
  8. 5
      templates/compilacao/text_edit_blocoalteracao.html

38
compilacao/forms.py

@ -980,43 +980,41 @@ class DispositivoEdicaoAlteracaoForm(ModelForm):
(inst.dispositivo_atualizador.pk,
inst.dispositivo_atualizador)]
def clean_dispositivo_substituido(self):
dst = self.cleaned_data['dispositivo_substituido']
def clean(self):
"""os cleans individuais do framework não puderam ser usados devido
a última validação compor dois valores
"""
data = self.cleaned_data
dst = data['dispositivo_substituido']
dsq = data['dispositivo_subsequente']
da = data['dispositivo_atualizador']
if dst == self.instance:
raise ValidationError(_('Não é permitido selecionar o próprio '
'Dispositivo como seu substituto.'))
if dst and dst.ta != self.instance.ta:
raise ValidationError(_('Não é permitido selecionar um '
'Dispositivo de outro Texto Articulado.'))
if dst and dst.tipo_dispositivo != self.instance.tipo_dispositivo:
raise ValidationError(_('Não é permitido selecionar um '
'Dispositivo de outro Tipo.'))
return dst
def clean_dispositivo_subsequente(self):
dsq = self.cleaned_data['dispositivo_subsequente']
if dsq == self.instance:
raise ValidationError(_('Não é permitido selecionar o próprio '
'Dispositivo como seu subsequente.'))
if dsq and dsq.ta != self.instance.ta:
raise ValidationError(_('Não é permitido selecionar um '
'Dispositivo de outro Texto Articulado.'))
if dsq and dsq.tipo_dispositivo != self.instance.tipo_dispositivo:
raise ValidationError(_('Não é permitido selecionar um '
'Dispositivo de outro Tipo.'))
return dsq
def clean_dispositivo_atualizador(self):
da = self.cleaned_data['dispositivo_atualizador']
if da and not da.tipo_dispositivo.dispositivo_de_alteracao and\
not da.tipo_dispositivo.dispositivo_de_articulacao:
if da and not (da.tipo_dispositivo.dispositivo_de_alteracao and
da.tipo_dispositivo.dispositivo_de_articulacao):
raise ValidationError(_('O Dispositivo de Atualização selecionado '
'não é um Bloco de Alteração.'))
return da
def clean(self):
data = self.cleaned_data
ndst = data['dispositivo_substituido']
nda = data['dispositivo_atualizador']
if not nda and ndst:
if not da and dst:
raise ValidationError(_('Não é permitido substituir um '
'Dispositivo sem haver um '
'Dispositivo Alterador.'))

2
compilacao/templatetags/compilacao_filters.py

@ -100,7 +100,7 @@ def render_actions_head(view, d_atual):
if view.pk_view == view.pk_edit and d_atual.pk == view.pk_view:
return True
# conteudo e menu no filho
# conteudo e menu no filho - ocorre nas inclusões feitas através do editor
if view.pk_view != view.pk_edit and d_atual.pk == view.pk_edit:
return True

11
compilacao/views.py

@ -1,6 +1,6 @@
import sys
from collections import OrderedDict
from datetime import datetime, timedelta
import sys
from braces.views import FormMessagesMixin
from django import forms
@ -37,6 +37,7 @@ from compilacao.models import (Dispositivo, Nota,
from compilacao.utils import DISPOSITIVO_SELECT_RELATED
from crud.base import Crud, CrudListView, make_pagination
TipoNotaCrud = Crud.build(TipoNota, 'tipo_nota')
TipoVideCrud = Crud.build(TipoVide, 'tipo_vide')
TipoPublicacaoCrud = Crud.build(TipoPublicacao, 'tipo_publicacao')
@ -1031,9 +1032,7 @@ class DispositivoSimpleEditView(TextEditView):
return itens
def select_provaveis_inserts(self, request=None):
try:
if request and 'perfil_estrutural' not in request.session:
self.set_perfil_in_session(request)
@ -1247,10 +1246,14 @@ class DispositivoSimpleEditView(TextEditView):
# result.insert(1, r)
# remover temporariamente a opção inserir antes
# confirmar falta de necessidade
# confirmar necessidade
if len(result) > 2:
result.pop()
if tipb.dispositivo_de_articulacao and\
tipb.dispositivo_de_alteracao:
result.pop()
except Exception as e:
print(e)

19
parlamentares/migrations/0018_auto_20160508_2201.py

@ -1,19 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.5 on 2016-05-09 01:01
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('parlamentares', '0017_remove_parlamentar_unidade_deliberativa'),
]
operations = [
migrations.AlterModelOptions(
name='filiacao',
options={'ordering': ('parlamentar', '-data', '-data_desfiliacao'), 'verbose_name': 'Filiação', 'verbose_name_plural': 'Filiações'},
),
]

24
static/js/compilacao_edit.js

@ -156,7 +156,7 @@ var clickUpdateDispositivo = function(event, __pk_refresh, __pk_edit, __action,
$('#dpt'+pk_refresh).css('min-height', $('.actions_right').height()*2);
$('.actions_inserts').removeClass('menu_flutuante');
}
else if (_editortype == 'detail') {
else if (_editortype == 'detail') { //TODO: código obsoleto - confirmar retirada desta condição
$('.csform .btn-salvar').parent().removeClass("displaynone");
$('.csform .btn-salvar, .csform .fields').removeClass("displaynone");
$('#dpt'+pk_refresh).css('min-height', $('.actions_right').height()*2);
@ -164,7 +164,6 @@ var clickUpdateDispositivo = function(event, __pk_refresh, __pk_edit, __action,
}
$(".edt-"+_editortype).addClass('selected');
//$(".container").addClass('class_color_container');
if (flag_actions_vibible == null || flag_actions_vibible) {
$('#dpt'+pk_edit).addClass('dpt-selected');
@ -265,6 +264,22 @@ function reloadFunctionClicks() {
$('.btn-action').on('click', clickUpdateDispositivo);
$('#editdi_texto').focus();
$( ".bloco_alteracao" ).sortable({
revert: true,
stop: function( event, ui ) {
var pk = ui.item.attr('pk');
var pk_bloco = ui.item.closest('.bloco').closest('.dpt').attr('pk');
console.log(pk+ ' - '+ pk_bloco);
},
});
$( ".bloco_alteracao .dpt" ).draggable({
connectToSortable: ".bloco_alteracao",
revert: 'invalid',
zIndex: 1,
});
$( ".bloco_alteracao" ).disableSelection();
}
$(document).ready(function() {
@ -284,4 +299,9 @@ $(document).ready(function() {
clickUpdateDispositivo(null, href[1], href[1], 'refresh', true);
}
$('main').click(function(event) {
if (event.target == this || event.target == this.firstElementChild)
clearEditSelected();
});
});

71
static/styles/compilacao.scss

@ -50,7 +50,6 @@ a:link:after, a:visited:after {
}
@mixin li_flutuante() {
& > ul {
transform: translateY(30px);
transition: transform 0.1s linear, opacity 0.1s linear, clip 0s 0.3s;
@ -67,9 +66,7 @@ a:link:after, a:visited:after {
border-right: 0px !important;
}
&:first-child {
&::before {
border-width: 0.375rem;
border-style: inset inset solid;
@ -172,7 +169,6 @@ a:link:after, a:visited:after {
.dpt {
font-size:1em;
transition: all 0.2s ease-in-out;
position: relative;
.ementa {
@ -262,7 +258,6 @@ a:link:after, a:visited:after {
margin-top: 2px;
}
.bloco_alteracao {
padding-left: 10%;
font-style: italic;
@ -535,16 +530,14 @@ a:link:after, a:visited:after {
position: absolute;
opacity: 0;
transition: all 0.4s ease-in-out;
z-index: 1;
z-index: 2000;
a {
&.btn-edit {
@include background-top-down(#3498DB, #2980C9);
background-color: #3498db;
color: #ffffff !important;
font-weight: bold;
padding: 5px 7px 3px;
padding: 8px 18px 6px;
display: inline-block;
line-height: 1;
}
}
}
@ -568,35 +561,25 @@ a:link:after, a:visited:after {
margin: 2em 0;
}
.bloco_alteracao {
border: 1px solid #ddd;
margin: -1px 0 0;
padding: 1em;
}
.articulacao1 {
margin-top: 2em;
&::before {
content: "Articulação";
background-color: #eee;
border-bottom: 1px dotted #E88C8C;
padding: 0.333em;
padding-left: 1em;
display:block;
margin: 1em 0;
padding: 0em ;
background-color: #edf0f1;
min-height: 36px;
.dpt {
width: 100% !important;
box-shadow: 0 -1px 0 #e5e5e5, 0 0 2px rgba(0,0,0,.12),0 2px 4px rgba(0,0,0,.24);
padding: 0em 1em;
margin: 1px 0;
background-color: #edf0f1;
z-index: 1;
&:not(:first-child) {
border-top: 1px solid white;
}
&.ui-draggable div {
cursor: pointer;
}
.bloco_alteracao1 {
@extend .articulacao1;
margin: -1px 0 0;
padding: 1em;
border: 1px dotted #E88C8C;
overflow: hidden;
&::before {
content: "Bloco de Alteração";
margin: -1em -1em 0;
display: block;
}
}
} /* fim dpt */
.dpt-selected {
@ -606,10 +589,8 @@ a:link:after, a:visited:after {
padding: 2.2em 2.2em 1.6em 2.2em;
box-shadow: -4px 15px 15px rgba(0, 0, 0, 0.1), 0px 6px 6px rgba(0, 0, 0, 0.23);
@include background-top-down(#eaeaee, #ddd);
ul {
list-style: none;
margin: 0;
@ -632,14 +613,20 @@ a:link:after, a:visited:after {
& > .bloco {
opacity: 1;
margin: 1em !important;
margin: 1em ;
}
.bloco_alteracao {
padding-top: 2em;
margin: 0;
padding: 1em;
@include background-top-down(#eaeaee, #ddd);
&:not(:first-child) {
border-top: 0px solid white;
}
.dpt {
background-color: white;
}
}
& > .dpt {
padding: 0;
@ -915,7 +902,7 @@ a:link:after, a:visited:after {
} /* actions_inserts */
.menu_flutuante {
.menu_flutuante, .menu_flutuante_fixo {
& > li {
@include li_flutuante();

6
templates/compilacao/text_edit_bloco.html

@ -48,7 +48,7 @@
{% endfor %}
</ul>
<ul class="actions_inserts {% if not dpt.tipo_dispositivo.dispositivo_de_articulacao %}menu_flutuante{%endif%}">
<ul class="actions_inserts {% if not dpt.tipo_dispositivo.dispositivo_de_articulacao and not dpt.tipo_dispositivo.dispositivo_de_alteracao%}menu_flutuante{% elif dpt.tipo_dispositivo.dispositivo_de_alteracao and dpt.tipo_dispositivo.dispositivo_de_articulacao%}menu_flutuante_fixo{%endif%}">
{% if dpt.dispositivo_subsequente == None %}
{% for inserts in view|select_provaveis_inserts:request %}
{% if inserts.itens %}
@ -130,7 +130,9 @@
{% endif %}
<div class="bloco {% dispositivo_desativado dpt view.inicio_vigencia view.fim_vigencia %} {{ dpt.tipo_dispositivo.class_css }}">
{% spaceless %}
{% if not dpt.tipo_dispositivo.dispositivo_de_alteracao %}
<div class="de" id="id{{dpt.id}}" pk="{{dpt.pk}}" ordem="{{dpt.ordem}}" name="{{dpt.pk}}" title="{{dpt.pk}} - {{dpt.ordem}}">{{ dpt.tipo_dispositivo.rotulo_prefixo_html|safe }}{{ dpt.rotulo }}{{ dpt.tipo_dispositivo.rotulo_sufixo_html|safe }}{{ dpt.tipo_dispositivo.texto_prefixo_html|safe }}{% if dpt.texto == '' and not dpt.tipo_dispositivo.dispositivo_de_articulacao %}<span class="semtexto">({{dpt.tipo_dispositivo}} sem texto)</span>{%else%}{{ dpt.texto|safe }}{%endif%}</div>
{% endif %}
{% if dpt.ta_publicado_id != None and not dpt.tipo_dispositivo.dispositivo_de_articulacao %}
<a class="link_alterador" href="{% url 'compilacao:ta_text_edit' dpt.ta_publicado.pk %}#{{dpt.dispositivo_atualizador_id}}">
{{ dpt.tipo_dispositivo.nota_automatica_prefixo_html|safe }}
@ -139,7 +141,7 @@
</a>
{% endif %}
{% endspaceless %}
{% if dpt.tipo_dispositivo.class_css == 'bloco_alteracao'%}
{% if dpt.tipo_dispositivo.dispositivo_de_alteracao %}
{%with node=dpt template_name='compilacao/text_edit_blocoalteracao.html' %}
{%include template_name%}
{%endwith%}

5
templates/compilacao/text_edit_blocoalteracao.html

@ -1,10 +1,9 @@
{% load compilacao_filters %}
{% load common_tags %}
aaaaa
{% for ch in dpt.pk|get_bloco_atualizador %}
{% spaceless %}
<div class="dpt" id="d{{ch.id}}">
<div class="{{ ch.tipo_dispositivo.class_css }}" id="id{{ch.id}}" nivel="{{ch.nivel}}">
<div class="dpt" id="d{{ch.id}}" pk="{{ch.id}}" >
<div class="{{ ch.tipo_dispositivo.class_css }}" id="id{{ch.id}}" nivel="{{ch.nivel}}" style="margin: 0px;">
{{ ch.tipo_dispositivo.rotulo_prefixo_html|safe }}<a name="{{ch.pk}}" href="{% url 'compilacao:ta_text_edit' ch.ta.pk %}#{{ch.pk}}">{{ ch.rotulo }}</a>{{ ch.tipo_dispositivo.rotulo_sufixo_html|safe }}{{ ch.tipo_dispositivo.texto_prefixo_html|safe }}{{ ch.texto|safe }}
</div>
</div>

Loading…
Cancel
Save