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.pk,
inst.dispositivo_atualizador)] inst.dispositivo_atualizador)]
def clean_dispositivo_substituido(self): def clean(self):
dst = self.cleaned_data['dispositivo_substituido'] """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: if dst and dst.ta != self.instance.ta:
raise ValidationError(_('Não é permitido selecionar um ' raise ValidationError(_('Não é permitido selecionar um '
'Dispositivo de outro Texto Articulado.')) 'Dispositivo de outro Texto Articulado.'))
if dst and dst.tipo_dispositivo != self.instance.tipo_dispositivo: if dst and dst.tipo_dispositivo != self.instance.tipo_dispositivo:
raise ValidationError(_('Não é permitido selecionar um ' raise ValidationError(_('Não é permitido selecionar um '
'Dispositivo de outro Tipo.')) '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: if dsq and dsq.ta != self.instance.ta:
raise ValidationError(_('Não é permitido selecionar um ' raise ValidationError(_('Não é permitido selecionar um '
'Dispositivo de outro Texto Articulado.')) 'Dispositivo de outro Texto Articulado.'))
if dsq and dsq.tipo_dispositivo != self.instance.tipo_dispositivo: if dsq and dsq.tipo_dispositivo != self.instance.tipo_dispositivo:
raise ValidationError(_('Não é permitido selecionar um ' raise ValidationError(_('Não é permitido selecionar um '
'Dispositivo de outro Tipo.')) '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\ if da and not (da.tipo_dispositivo.dispositivo_de_alteracao and
not da.tipo_dispositivo.dispositivo_de_articulacao: da.tipo_dispositivo.dispositivo_de_articulacao):
raise ValidationError(_('O Dispositivo de Atualização selecionado ' raise ValidationError(_('O Dispositivo de Atualização selecionado '
'não é um Bloco de Alteração.')) 'não é um Bloco de Alteração.'))
return da if not da and dst:
def clean(self):
data = self.cleaned_data
ndst = data['dispositivo_substituido']
nda = data['dispositivo_atualizador']
if not nda and ndst:
raise ValidationError(_('Não é permitido substituir um ' raise ValidationError(_('Não é permitido substituir um '
'Dispositivo sem haver um ' 'Dispositivo sem haver um '
'Dispositivo Alterador.')) '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: if view.pk_view == view.pk_edit and d_atual.pk == view.pk_view:
return True 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: if view.pk_view != view.pk_edit and d_atual.pk == view.pk_edit:
return True return True

11
compilacao/views.py

@ -1,6 +1,6 @@
import sys
from collections import OrderedDict from collections import OrderedDict
from datetime import datetime, timedelta from datetime import datetime, timedelta
import sys
from braces.views import FormMessagesMixin from braces.views import FormMessagesMixin
from django import forms from django import forms
@ -37,6 +37,7 @@ from compilacao.models import (Dispositivo, Nota,
from compilacao.utils import DISPOSITIVO_SELECT_RELATED from compilacao.utils import DISPOSITIVO_SELECT_RELATED
from crud.base import Crud, CrudListView, make_pagination from crud.base import Crud, CrudListView, make_pagination
TipoNotaCrud = Crud.build(TipoNota, 'tipo_nota') TipoNotaCrud = Crud.build(TipoNota, 'tipo_nota')
TipoVideCrud = Crud.build(TipoVide, 'tipo_vide') TipoVideCrud = Crud.build(TipoVide, 'tipo_vide')
TipoPublicacaoCrud = Crud.build(TipoPublicacao, 'tipo_publicacao') TipoPublicacaoCrud = Crud.build(TipoPublicacao, 'tipo_publicacao')
@ -1031,9 +1032,7 @@ class DispositivoSimpleEditView(TextEditView):
return itens return itens
def select_provaveis_inserts(self, request=None): def select_provaveis_inserts(self, request=None):
try: try:
if request and 'perfil_estrutural' not in request.session: if request and 'perfil_estrutural' not in request.session:
self.set_perfil_in_session(request) self.set_perfil_in_session(request)
@ -1247,10 +1246,14 @@ class DispositivoSimpleEditView(TextEditView):
# result.insert(1, r) # result.insert(1, r)
# remover temporariamente a opção inserir antes # remover temporariamente a opção inserir antes
# confirmar falta de necessidade # confirmar necessidade
if len(result) > 2: if len(result) > 2:
result.pop() result.pop()
if tipb.dispositivo_de_articulacao and\
tipb.dispositivo_de_alteracao:
result.pop()
except Exception as e: except Exception as e:
print(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); $('#dpt'+pk_refresh).css('min-height', $('.actions_right').height()*2);
$('.actions_inserts').removeClass('menu_flutuante'); $('.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').parent().removeClass("displaynone");
$('.csform .btn-salvar, .csform .fields').removeClass("displaynone"); $('.csform .btn-salvar, .csform .fields').removeClass("displaynone");
$('#dpt'+pk_refresh).css('min-height', $('.actions_right').height()*2); $('#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'); $(".edt-"+_editortype).addClass('selected');
//$(".container").addClass('class_color_container');
if (flag_actions_vibible == null || flag_actions_vibible) { if (flag_actions_vibible == null || flag_actions_vibible) {
$('#dpt'+pk_edit).addClass('dpt-selected'); $('#dpt'+pk_edit).addClass('dpt-selected');
@ -265,6 +264,22 @@ function reloadFunctionClicks() {
$('.btn-action').on('click', clickUpdateDispositivo); $('.btn-action').on('click', clickUpdateDispositivo);
$('#editdi_texto').focus(); $('#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() { $(document).ready(function() {
@ -284,4 +299,9 @@ $(document).ready(function() {
clickUpdateDispositivo(null, href[1], href[1], 'refresh', true); 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() { @mixin li_flutuante() {
& > ul { & > ul {
transform: translateY(30px); transform: translateY(30px);
transition: transform 0.1s linear, opacity 0.1s linear, clip 0s 0.3s; 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; border-right: 0px !important;
} }
&:first-child { &:first-child {
&::before { &::before {
border-width: 0.375rem; border-width: 0.375rem;
border-style: inset inset solid; border-style: inset inset solid;
@ -172,7 +169,6 @@ a:link:after, a:visited:after {
.dpt { .dpt {
font-size:1em; font-size:1em;
transition: all 0.2s ease-in-out;
position: relative; position: relative;
.ementa { .ementa {
@ -262,7 +258,6 @@ a:link:after, a:visited:after {
margin-top: 2px; margin-top: 2px;
} }
.bloco_alteracao { .bloco_alteracao {
padding-left: 10%; padding-left: 10%;
font-style: italic; font-style: italic;
@ -535,16 +530,14 @@ a:link:after, a:visited:after {
position: absolute; position: absolute;
opacity: 0; opacity: 0;
transition: all 0.4s ease-in-out; transition: all 0.4s ease-in-out;
z-index: 1; z-index: 2000;
a { a {
&.btn-edit { &.btn-edit {
@include background-top-down(#3498DB, #2980C9); background-color: #3498db;
color: #ffffff !important; color: #ffffff !important;
font-weight: bold; padding: 8px 18px 6px;
padding: 5px 7px 3px;
display: inline-block; display: inline-block;
line-height: 1; line-height: 1;
} }
} }
} }
@ -568,35 +561,25 @@ a:link:after, a:visited:after {
margin: 2em 0; margin: 2em 0;
} }
.bloco_alteracao { .bloco_alteracao {
border: 1px solid #ddd; margin: 1em 0;
margin: -1px 0 0; padding: 0em ;
padding: 1em; background-color: #edf0f1;
} min-height: 36px;
.dpt {
.articulacao1 { width: 100% !important;
margin-top: 2em; box-shadow: 0 -1px 0 #e5e5e5, 0 0 2px rgba(0,0,0,.12),0 2px 4px rgba(0,0,0,.24);
&::before { padding: 0em 1em;
content: "Articulação"; margin: 1px 0;
background-color: #eee; background-color: #edf0f1;
border-bottom: 1px dotted #E88C8C; z-index: 1;
padding: 0.333em; &:not(:first-child) {
padding-left: 1em; border-top: 1px solid white;
display:block;
} }
&.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 */ } /* fim dpt */
.dpt-selected { .dpt-selected {
@ -606,10 +589,8 @@ a:link:after, a:visited:after {
padding: 2.2em 2.2em 1.6em 2.2em; 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); 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); @include background-top-down(#eaeaee, #ddd);
ul { ul {
list-style: none; list-style: none;
margin: 0; margin: 0;
@ -632,14 +613,20 @@ a:link:after, a:visited:after {
& > .bloco { & > .bloco {
opacity: 1; opacity: 1;
margin: 1em !important; margin: 1em ;
} }
.bloco_alteracao { .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 { & > .dpt {
padding: 0; padding: 0;
@ -915,7 +902,7 @@ a:link:after, a:visited:after {
} /* actions_inserts */ } /* actions_inserts */
.menu_flutuante { .menu_flutuante, .menu_flutuante_fixo {
& > li { & > li {
@include li_flutuante(); @include li_flutuante();

6
templates/compilacao/text_edit_bloco.html

@ -48,7 +48,7 @@
{% endfor %} {% endfor %}
</ul> </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 %} {% if dpt.dispositivo_subsequente == None %}
{% for inserts in view|select_provaveis_inserts:request %} {% for inserts in view|select_provaveis_inserts:request %}
{% if inserts.itens %} {% if inserts.itens %}
@ -130,7 +130,9 @@
{% endif %} {% endif %}
<div class="bloco {% dispositivo_desativado dpt view.inicio_vigencia view.fim_vigencia %} {{ dpt.tipo_dispositivo.class_css }}"> <div class="bloco {% dispositivo_desativado dpt view.inicio_vigencia view.fim_vigencia %} {{ dpt.tipo_dispositivo.class_css }}">
{% spaceless %} {% 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> <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 %} {% 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}}"> <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 }} {{ dpt.tipo_dispositivo.nota_automatica_prefixo_html|safe }}
@ -139,7 +141,7 @@
</a> </a>
{% endif %} {% endif %}
{% endspaceless %} {% 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' %} {%with node=dpt template_name='compilacao/text_edit_blocoalteracao.html' %}
{%include template_name%} {%include template_name%}
{%endwith%} {%endwith%}

5
templates/compilacao/text_edit_blocoalteracao.html

@ -1,10 +1,9 @@
{% load compilacao_filters %} {% load compilacao_filters %}
{% load common_tags %} {% load common_tags %}
aaaaa
{% for ch in dpt.pk|get_bloco_atualizador %} {% for ch in dpt.pk|get_bloco_atualizador %}
{% spaceless %} {% spaceless %}
<div class="dpt" id="d{{ch.id}}"> <div class="dpt" id="d{{ch.id}}" pk="{{ch.id}}" >
<div class="{{ ch.tipo_dispositivo.class_css }}" id="id{{ch.id}}" nivel="{{ch.nivel}}"> <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 }} {{ 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>
</div> </div>

Loading…
Cancel
Save