Browse Source

Merge pull request #590 from interlegis/compilacao_refct_editor

Registro de Alteração de Dispositivos
pull/588/merge
Leandro Roberto da Silva 8 years ago
committed by GitHub
parent
commit
59a6271f5b
  1. 200
      sapl/compilacao/forms.py
  2. 20
      sapl/compilacao/migrations/0051_dispositivo_auto_inserido.py
  3. 19
      sapl/compilacao/migrations/0052_auto_20160915_1327.py
  4. 19
      sapl/compilacao/migrations/0053_auto_20160916_1420.py
  5. 19
      sapl/compilacao/migrations/0054_auto_20160916_1424.py
  6. 36
      sapl/compilacao/models.py
  7. 59
      sapl/compilacao/templatetags/compilacao_filters.py
  8. 8
      sapl/compilacao/urls.py
  9. 12
      sapl/compilacao/utils.py
  10. 1894
      sapl/compilacao/views.py
  11. 639
      sapl/static/js/compilacao_edit.js
  12. 27
      sapl/static/js/compilacao_view.js
  13. 12
      sapl/static/styles/app.scss
  14. 369
      sapl/static/styles/compilacao.scss
  15. 71
      sapl/templates/compilacao/ajax_actions_dinamic_edit.html
  16. 44
      sapl/templates/compilacao/dispositivo_form.html
  17. 17
      sapl/templates/compilacao/dispositivo_form_parents.html
  18. 4
      sapl/templates/compilacao/dispositivo_form_search.html
  19. 8
      sapl/templates/compilacao/dispositivo_form_search_fragment.html
  20. 2
      sapl/templates/compilacao/layout/dispositivo_checkbox.html
  21. 14
      sapl/templates/compilacao/layout/dispositivo_radio.html
  22. 17
      sapl/templates/compilacao/text_edit.html
  23. 232
      sapl/templates/compilacao/text_edit_bloco.html
  24. 6
      sapl/templates/compilacao/text_edit_blocoalteracao.html
  25. 1
      sapl/templates/compilacao/text_list.html
  26. 16
      sapl/templates/compilacao/text_list_bloco.html
  27. 16
      sapl/templates/compilacao/text_list_blocoalteracao.html
  28. 13
      sapl/templates/compilacao/text_notificacoes.html
  29. 1
      sapl/templates/compilacao/textoarticulado_detail.html
  30. 2
      sapl/templates/compilacao/textoarticulado_menu_config.html

200
sapl/compilacao/forms.py

@ -484,20 +484,31 @@ class DispositivoEdicaoBasicaForm(ModelForm):
inst = kwargs['instance'] if 'instance' in kwargs else None
editor_type = kwargs['initial']['editor_type']\
if'editor_type' in kwargs['initial'] else ''
if inst and inst.tipo_dispositivo.formato_variacao0 in [
TipoDispositivo.FNC8, TipoDispositivo.FNCN]:
# remove edição do rótulo se o tipo de disp. for não numerável
if 'rotulo' in DispositivoEdicaoBasicaForm.Meta.fields:
DispositivoEdicaoBasicaForm.Meta.fields.remove('rotulo')
for i in range(6):
DispositivoEdicaoBasicaForm.Meta.fields.remove(
'dispositivo%s' % i)
elif editor_type == 'get_form_base':
# remove edição do rótulo se a req do form vier do editor dinamico
if 'rotulo' in DispositivoEdicaoBasicaForm.Meta.fields:
DispositivoEdicaoBasicaForm.Meta.fields.remove('rotulo')
for i in range(6):
DispositivoEdicaoBasicaForm.Meta.fields.remove(
'dispositivo%s' % i)
else:
# adiciona campos de rótulo no formulário
if 'rotulo' not in DispositivoEdicaoBasicaForm.Meta.fields:
DispositivoEdicaoBasicaForm.Meta.fields.append('rotulo')
for i in range(6):
DispositivoEdicaoBasicaForm.Meta.fields.append(
'dispositivo%s' % i)
# adiciona campos de rótulo no formulário
self.dispositivo0 = forms.IntegerField(
min_value=0,
label=Dispositivo._meta.get_field('dispositivo0').verbose_name,
@ -552,6 +563,51 @@ class DispositivoEdicaoBasicaForm(ModelForm):
row_texto,
css_class="col-md-12"))
if editor_type == 'get_form_base' and inst.dispositivo_atualizador_id:
if inst and inst.tipo_dispositivo.dispositivo_de_articulacao:
if 'texto_atualizador' in\
DispositivoEdicaoBasicaForm.Meta.fields:
DispositivoEdicaoBasicaForm.Meta.fields.remove(
'texto_atualizador')
DispositivoEdicaoBasicaForm.Meta.fields.remove(
'visibilidade')
else:
if 'texto_atualizador' not in\
DispositivoEdicaoBasicaForm.Meta.fields:
DispositivoEdicaoBasicaForm.Meta.fields.append(
'texto_atualizador')
DispositivoEdicaoBasicaForm.Meta.fields.append(
'visibilidade')
self.texto_atualizador = forms.CharField(
required=False,
label='',
widget=forms.Textarea(),
help_text=_('Não havendo diferenças gráficas entre o '
'conteúdo que deve estar no Texto Original e '
'no Texto Alterador, não há necessidade '
'de duplicar a informação. A validação dos '
'dados negará a igualdade.'))
self.visibilidade = forms.ChoiceField(
label=Dispositivo._meta.get_field(
'visibilidade').verbose_name,
choices=utils.YES_NO_CHOICES,
widget=forms.RadioSelect())
layout.append(
Fieldset(Dispositivo._meta.get_field(
'texto_atualizador').verbose_name,
to_row([(InlineRadios('visibilidade'), 12)]),
to_row([('texto_atualizador', 12)]),
css_class="col-md-12"))
else:
if 'texto_atualizador' in\
DispositivoEdicaoBasicaForm.Meta.fields:
DispositivoEdicaoBasicaForm.Meta.fields.remove(
'texto_atualizador')
DispositivoEdicaoBasicaForm.Meta.fields.remove(
'visibilidade')
fields = DispositivoEdicaoBasicaForm.Meta.fields
if fields:
self.base_fields.clear()
@ -559,12 +615,66 @@ class DispositivoEdicaoBasicaForm(ModelForm):
self.base_fields.update({f: getattr(self, f)})
self.helper = FormHelper()
self.helper.layout = SaplFormLayout(
*layout,
label_cancel=_('Ir para o Editor Sequencial'))
if not editor_type:
label_cancel = _('Ir para o Editor Sequencial')
self.helper.layout = SaplFormLayout(
*layout, label_cancel=label_cancel)
elif editor_type == "get_form_base":
getattr(self, "actions_" + editor_type)(layout, inst)
super(DispositivoEdicaoBasicaForm, self).__init__(*args, **kwargs)
def actions_get_form_base(self, layout, inst):
label_cancel = _('Fechar')
more = [
HTML('<a class="btn btn-inverse btn-fechar">%s</a>' %
label_cancel),
]
btns_excluir = []
if not (inst.tipo_dispositivo.dispositivo_de_alteracao and
inst.tipo_dispositivo.dispositivo_de_articulacao):
btns_excluir = [
HTML('<a class="btn btn-danger btn-excluir" '
'action="json_delete_item_dispositivo" '
'title="%s" '
'pk="%s" '
'>%s</a>' % (_('Excluir apenas este dispositivo.'),
inst.pk,
_('Excluir Dispositivo')))]
if inst.dispositivos_filhos_set.filter(
auto_inserido=False).exists() or (
inst.tipo_dispositivo.dispositivo_de_alteracao and
inst.tipo_dispositivo.dispositivo_de_articulacao):
btns_excluir.append(
HTML(
'<a class="btn btn-danger btn-excluir" '
'action="json_delete_bloco_dispositivo" '
'title="%s" '
'pk="%s" '
'>%s</a>' % (_('Excluir este dispositivo '
'e toda sua estrutura.'),
inst.pk,
_('Excluir Bloco de Dispositivo.'))))
if btns_excluir and (not inst.auto_inserido or inst.ta_publicado):
css_class = 'btn-group pull-right btns-excluir'
more.append(Div(*btns_excluir, css_class=css_class))
if not inst.tipo_dispositivo.dispositivo_de_articulacao:
more.append(Submit('salvar', _('Salvar'), css_class='pull-right'))
buttons = FormActions(*more, css_class='form-group')
_fields = [Div(*layout, css_class="row-fluid")] + \
[to_row([(buttons, 12)])]
self.helper.layout = Layout(*_fields)
class DispositivoSearchModalForm(Form):
@ -624,7 +734,7 @@ class DispositivoSearchModalForm(Form):
placeholder=_('Digite palavras, letras, '
'números ou algo'
' que estejam no texto.')),
StrictButton(_('Buscar'), css_class='btn-busca')), 7))
StrictButton(_('Buscar'), css_class='btn-busca btn-primary')), 7))
)
)
@ -750,7 +860,7 @@ class DispositivoEdicaoVigenciaForm(ModelForm):
def clean_dispositivo_vigencia(self):
dv = self.cleaned_data['dispositivo_vigencia']
if dv and dv.is_relative_auto_insert():
if dv and dv.auto_inserido:
dv = dv.dispositivo_pai
return dv
@ -765,7 +875,7 @@ class DispositivoEdicaoVigenciaForm(ModelForm):
if extensao:
dv = data['dispositivo_vigencia']
if dv and dv.is_relative_auto_insert():
if dv and dv.auto_inserido:
dv = dv.dispositivo_pai
dv_pk = dv.pk if dv else None
@ -1020,6 +1130,19 @@ class DispositivoEdicaoAlteracaoForm(ModelForm):
'Dispositivo sem haver um '
'Dispositivo Alterador.'))
"""if dst.inicio_vigencia > self.instance.inicio_vigencia:
raise ValidationError(_('Não é permitido substituir um '
'Dispositivo que sua data de início '
'de vigência é superior a do dispositivo '
'em edição.'))
if dsq.inicio_vigencia <= self.instance.fim_vigencia:
raise ValidationError(_('Não é permitido possuir um Dispositivo '
'Subsequente que sua data de início '
'de vigência seja inferior a data de fim '
'de vigência do dispositivo em edição.'))
"""
def save(self):
data = self.cleaned_data
@ -1030,17 +1153,23 @@ class DispositivoEdicaoAlteracaoForm(ModelForm):
ndsq = data['dispositivo_subsequente']
nda = data['dispositivo_atualizador']
# Se o dispositivo substituído foi trocado na edição
if ndst != od.dispositivo_substituido:
# Se existia uma substituído, limpar seu subsequente e suas datas
# de fim de vigencia e eficacia
if od.dispositivo_substituido:
odst = od.dispositivo_substituido
odst.dispositivo_subsequente = None
odst.fim_vigencia = None
odst.fim_eficacia = None
odst.save()
# se foi selecionado um dispositivo para ser substituído
# self.instance é seu subsequente
if ndst:
# e se esse novo substituido possuia um outro sequente
if ndst.dispositivo_subsequente:
# o substituido desse subsequente não é mais ndst
ndst.dispositivo_subsequente.dispositivo_substituido = None
ndst.dispositivo_subsequente.save()
@ -1082,7 +1211,7 @@ class TextNotificacoesForm(Form):
type_notificacoes = forms.ChoiceField(
label=_('Níveis de Notificações'),
choices=[('default', _('Mostrar Dispositivos sem Notificações!')),
choices=[('default', _('Dispositivos sem Notificações!')),
('success', _('Informações!')),
('info', _('Boas Práticas!')),
('warning', _('Alertas!')),
@ -1101,3 +1230,56 @@ class TextNotificacoesForm(Form):
self.helper.layout = Layout(field_type_notificacoes)
super(TextNotificacoesForm, self).__init__(*args, **kwargs)
class DispositivoRegistroAlteracaoForm(Form):
dispositivo_alterado = forms.ModelChoiceField(
label=_('Dispositivo a ser alterado'),
required=False,
queryset=Dispositivo.objects.all())
dispositivo_search_form = forms.CharField(widget=forms.HiddenInput(),
required=False)
def __init__(self, *args, **kwargs):
layout = []
kwargs.pop('instance')
kwargs['initial'].pop('editor_type')
row_dispositivo = Field(
'dispositivo_alterado',
data_sapl_ta='DispositivoSearch',
data_field='dispositivo_alterado',
data_type_selection='radio',
template="compilacao/layout/dispositivo_radio.html")
layout.append(Fieldset(_('Registro de Alteração - '
'Seleção do Dispositivo a ser alterado'),
row_dispositivo,
css_class="col-md-12"))
layout.append(Field('dispositivo_search_form'))
more = [
HTML('<a class="btn btn-inverse btn-fechar">%s</a>' %
_('Cancelar')),
]
more.append(Submit('salvar', _('Salvar'), css_class='pull-right'))
buttons = FormActions(*more, css_class='form-group')
_fields = [Div(*layout, css_class="row-fluid")] + \
[to_row([(buttons, 12)])]
self.helper = FormHelper()
self.helper.layout = Layout(*_fields)
super(DispositivoRegistroAlteracaoForm, self).__init__(*args, **kwargs)
self.fields['dispositivo_alterado'].choices = []
def save(self):
super(DispositivoRegistroAlteracaoForm, self).save()
data = self.cleaned_data

20
sapl/compilacao/migrations/0051_dispositivo_auto_inserido.py

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-09-12 16:24
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('compilacao', '0050_auto_20160503_0926'),
]
operations = [
migrations.AddField(
model_name='dispositivo',
name='auto_inserido',
field=models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=False, verbose_name='Auto Inserido'),
),
]

19
sapl/compilacao/migrations/0052_auto_20160915_1327.py

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-09-15 16:27
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('compilacao', '0051_dispositivo_auto_inserido'),
]
operations = [
migrations.AlterUniqueTogether(
name='dispositivo',
unique_together=set([('ta', 'dispositivo0', 'dispositivo1', 'dispositivo2', 'dispositivo3', 'dispositivo4', 'dispositivo5', 'tipo_dispositivo', 'dispositivo_pai', 'dispositivo_atualizador', 'ta_publicado', 'publicacao'), ('ta', 'ordem')]),
),
]

19
sapl/compilacao/migrations/0053_auto_20160916_1420.py

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-09-16 17:20
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('compilacao', '0052_auto_20160915_1327'),
]
operations = [
migrations.AlterUniqueTogether(
name='dispositivo',
unique_together=set([('ta', 'ordem'), ('ta', 'dispositivo0', 'dispositivo1', 'dispositivo2', 'dispositivo3', 'dispositivo4', 'dispositivo5', 'tipo_dispositivo', 'dispositivo_pai', 'ta_publicado', 'publicacao')]),
),
]

19
sapl/compilacao/migrations/0054_auto_20160916_1424.py

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-09-16 17:24
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('compilacao', '0053_auto_20160916_1420'),
]
operations = [
migrations.AlterUniqueTogether(
name='dispositivo',
unique_together=set([('ta', 'ordem'), ('ta', 'dispositivo0', 'dispositivo1', 'dispositivo2', 'dispositivo3', 'dispositivo4', 'dispositivo5', 'tipo_dispositivo', 'dispositivo_pai', 'dispositivo_atualizador', 'ta_publicado', 'publicacao')]),
),
]

36
sapl/compilacao/models.py

@ -578,7 +578,10 @@ class Dispositivo(BaseModel, TimestampedMixin):
default=False,
choices=YES_NO_CHOICES,
verbose_name=_('Declarado Inconstitucional'))
# Relevant attribute only in altering norms
auto_inserido = models.BooleanField(
default=False,
choices=YES_NO_CHOICES,
verbose_name=_('Auto Inserido'))
visibilidade = models.BooleanField(
default=False,
choices=YES_NO_CHOICES,
@ -647,6 +650,7 @@ class Dispositivo(BaseModel, TimestampedMixin):
'dispositivo5',
'tipo_dispositivo',
'dispositivo_pai',
'dispositivo_atualizador',
'ta_publicado',
'publicacao',),
)
@ -924,12 +928,14 @@ class Dispositivo(BaseModel, TimestampedMixin):
def criar_espaco(self, espaco_a_criar, local):
if local == 'add_next':
if local == 'json_add_next':
proximo_bloco = Dispositivo.objects.filter(
ordem__gt=self.ordem,
nivel__lte=self.nivel,
ta_id=self.ta_id)[:1]
elif local == 'add_in':
elif local == 'json_add_in':
# FIXME: o exclude não deve estar limitado a uma class_css caput e
# sim a qualquer filho de inserção automática
proximo_bloco = Dispositivo.objects.filter(
ordem__gt=self.ordem,
nivel__lte=self.nivel + 1,
@ -951,7 +957,7 @@ class Dispositivo(BaseModel, TimestampedMixin):
ordem=F('ordem') + (
Dispositivo.INTERVALO_ORDEM * espaco_a_criar - 1))
else:
# inserção no fim da ta
# inserção no fim do ta
ordem_max = Dispositivo.objects.order_by(
'ordem').filter(
ta_id=self.ta_id).aggregate(
@ -1112,7 +1118,14 @@ class Dispositivo(BaseModel, TimestampedMixin):
ta_id=self.ta_id).last()
return anterior_articulacao
def is_relative_auto_insert(self, perfil_pk=None):
def get_niveis_zero(self):
niveis_zero = Dispositivo.objects.order_by('ordem').filter(
nivel=0,
ta_id=self.ta_id)
return niveis_zero
# metodo obsoleto, foi acrescentado o campo auto_inserido no modelo
def is_relative_auto_insert__obsoleto(self, perfil_pk=None):
if self.dispositivo_pai is not None:
# pp possiveis_pais
@ -1137,6 +1150,16 @@ class Dispositivo(BaseModel, TimestampedMixin):
dp = dp.dispositivo_pai
return dp
def history(self):
ultimo = self
while ultimo.dispositivo_subsequente:
ultimo = ultimo.dispositivo_subsequente
yield ultimo
while ultimo.dispositivo_substituido:
ultimo = ultimo.dispositivo_substituido
yield ultimo
@staticmethod
def new_instance_based_on(dispositivo_base, tipo_base):
dp = Dispositivo()
@ -1148,6 +1171,7 @@ class Dispositivo(BaseModel, TimestampedMixin):
dp.nivel = dispositivo_base.nivel
dp.texto = ''
dp.visibilidade = True
dp.auto_inserido = dispositivo_base.auto_inserido
dp.ta = dispositivo_base.ta
dp.dispositivo_pai = dispositivo_base.dispositivo_pai
dp.publicacao = dispositivo_base.publicacao
@ -1161,7 +1185,7 @@ class Dispositivo(BaseModel, TimestampedMixin):
else:
dp.inicio_eficacia = dispositivo_base.inicio_eficacia
dp.inicio_vigencia = dispositivo_base.inicio_vigencia
dp.fim_eficacia = dispositivo_base.inicio_eficacia
dp.fim_eficacia = dispositivo_base.fim_eficacia
dp.fim_vigencia = dispositivo_base.fim_vigencia
dp.ordem = dispositivo_base.ordem

59
sapl/compilacao/templatetags/compilacao_filters.py

@ -7,9 +7,56 @@ from django.utils.translation import ugettext_lazy as _
from sapl.compilacao.models import Dispositivo
register = template.Library()
class DispositivoTreeNode(template.Node):
def __init__(self, template_nodes, dispositivo_list_var):
self.template_nodes = template_nodes
self.dispositivo_list_var = dispositivo_list_var
def _render_node(self, context, node):
bits_alts = []
bits_filhos = []
context.push()
for child in node['alts']:
bits_alts.append(self._render_node(context, child))
for child in node['filhos']:
bits_filhos.append(self._render_node(context, child))
context['node'] = node
context['alts'] = mark_safe(''.join(bits_alts))
context['filhos'] = mark_safe(''.join(bits_filhos))
rendered = self.template_nodes.render(context)
context.pop()
return rendered
def render(self, context):
dispositivo_list_var = self.dispositivo_list_var.resolve(context)
bits = [self._render_node(context, node)
for node in dispositivo_list_var]
return ''.join(bits)
@register.tag
def dispositivotree(parser, token):
bits = token.contents.split()
if len(bits) != 2:
raise template.TemplateSyntaxError(
_('%s tag requires a queryset') % bits[0])
dispositivo_list_var = template.Variable(bits[1])
template_nodes = parser.parse(('enddispositivotree',))
parser.delete_first_token()
return DispositivoTreeNode(template_nodes, dispositivo_list_var)
# --------------------------------------------------------------
@register.filter
def get_bloco_atualizador(pk_atualizador):
return Dispositivo.objects.order_by('ordem_bloco_atualizador').filter(
@ -34,7 +81,7 @@ def dispositivo_desativado(dispositivo, inicio_vigencia, fim_vigencia):
@register.simple_tag
def nota_automatica(dispositivo, ta_pub_list):
if dispositivo.ta_publicado is not None:
if dispositivo.ta_publicado:
d = dispositivo.dispositivo_atualizador.dispositivo_pai
ta_publicado = ta_pub_list[dispositivo.ta_publicado_id] if\
@ -79,11 +126,6 @@ def select_provaveis_inserts(view, request):
return view.select_provaveis_inserts(request)
@register.filter
def is_relative_auto_insert(dpt, request):
return dpt.is_relative_auto_insert(request.session['perfil_estrutural'])
@register.filter
def isinst(value, class_str):
classe = value.__class__.__name__
@ -168,7 +210,9 @@ def heranca(request, d, ignore_ultimo=0, ignore_primeiro=0):
ta_dpts_parents = {}
ta_id = str(d.ta_id)
if ta_id not in ta_dpts_parents:
d_pk = str(d.pk)
if ta_id not in ta_dpts_parents or d_pk not in ta_dpts_parents[ta_id]:
print('recarregando estrutura temporaria de heranças')
dpts_parents = {}
ta_dpts_parents[ta_id] = dpts_parents
update_dispositivos_parents(dpts_parents, ta_id)
@ -185,7 +229,6 @@ def heranca(request, d, ignore_ultimo=0, ignore_primeiro=0):
request.session['herancas_fila'] = herancas_fila
request.session['herancas'] = ta_dpts_parents
d_pk = str(d.pk)
h = ta_dpts_parents[ta_id][d_pk]['h']
if h:

8
sapl/compilacao/urls.py

@ -34,7 +34,8 @@ urlpatterns_compilacao = [
views.DispositivoView.as_view(), name='dispositivo'),
url(r'^(?P<ta_id>[0-9]+)/text/(?P<dispositivo_id>[0-9]+)/refresh',
views.DispositivoSimpleEditView.as_view(), name='dispositivo_refresh'),
views.DispositivoDinamicEditView.as_view(),
name='dispositivo_refresh'),
url(r'^(?P<ta_id>[0-9]+)/text/(?P<pk>[0-9]+)/edit$',
views.DispositivoEdicaoBasicaView.as_view(), name='dispositivo_edit'),
@ -51,8 +52,6 @@ urlpatterns_compilacao = [
views.DispositivoDefinidorVigenciaView.as_view(),
name='dispositivo_edit_definidor_vigencia'),
url(r'^(?P<ta_id>[0-9]+)/text/(?P<dispositivo_id>[0-9]+)/actions',
views.ActionsEditView.as_view(), name='dispositivo_actions'),
url(r'^(?P<ta_id>[0-9]+)/text/'
'(?P<dispositivo_id>[0-9]+)/nota/create$',
@ -126,3 +125,6 @@ urlpatterns = [
include(VeiculoPublicacaoCrud.get_urls())),
]
"""url(r'^(?P<ta_id>[0-9]+)/text/(?P<dispositivo_id>[0-9]+)/actions',
views.ActionsEditView.as_view(), name='dispositivo_actions'),"""

12
sapl/compilacao/utils.py

@ -12,6 +12,18 @@ DISPOSITIVO_SELECT_RELATED = (
'ta_publicado',
'ta',)
DISPOSITIVO_SELECT_RELATED_EDIT = (
'ta_publicado',
'ta',
'dispositivo_atualizador',
'dispositivo_atualizador__dispositivo_pai',
'dispositivo_atualizador__dispositivo_pai__ta',
'dispositivo_atualizador__dispositivo_pai__ta__tipo_ta',
'dispositivo_pai',
'dispositivo_pai__tipo_dispositivo',
'ta_publicado',
'ta',)
def int_to_roman(int_value):
# if isinstance(int_value, type(1)):

1894
sapl/compilacao/views.py

File diff suppressed because it is too large

639
sapl/static/js/compilacao_edit.js

@ -1,317 +1,448 @@
function DispositivoEdit() {
// Função única - Singleton pattern - operador new sempre devolve o mesmo objeto
var instance;
var editortype = "textarea";
var onSubmitEditForm = function(event) {
var editortype = "textarea";
var texto = '';
var editorTiny = tinymce.get('editdi_texto');
if (!(this instanceof DispositivoEdit)) {
if (!instance) {
instance = new DispositivoEdit();
}
return instance;
}
instance = this;
DispositivoEdit = function() {
return instance;
};
if (editorTiny != null)
texto = editorTiny.getContent();
else
texto = $('#editdi_texto').val();
instance.bindActionsEditorType = function(event) {
editortype = this.getAttribute('editortype');
SetCookie("editortype", editortype, 30);
var dpt = $(this).closest('.dpt');
var formData = {
'csrfmiddlewaretoken' : $('input[name=csrfmiddlewaretoken]').val(),
'texto' : texto
};
var pk = dpt.attr('pk');
instance.clearEditSelected();
instance.triggerBtnDptEdit(pk);
}
var url = $('.csform form').attr( "action_ajax" );
$("#message_block").css("display", "block");
instance.bindActionsClick = function(event) {
var pk = this.getAttribute('pk');
$.post(url, formData)
.done(function(data) {
var form_data = {
'action' : this.getAttribute('action'),
'tipo_pk' : this.getAttribute('tipo_pk'),
'perfil_pk' : this.getAttribute('perfil_pk'),
'variacao' : this.getAttribute('variacao'),
};
if (typeof data == "string") {
$('.dpt-selected').html(data);
clearEditSelected();
reloadFunctionClicks();
return;
}
var url = pk+'/refresh';
instance.waitShow();
clearEditSelected();
$.get(url, form_data).done(function(data) {
instance.clearEditSelected();
if (data.pk != null) {
if (data.message !== undefined) {
if (data.message.modal) {
instance.modalMessage(data.message.value, 'alert-'+data.message.type, function() {
instance.waitShow();
instance.refreshScreenFocusPk(data);
});
return;
}
else {
instance.message(data)
}
}
instance.refreshScreenFocusPk(data);
}
}).fail(instance.waitHide).always(instance.waitHide);
}
if (data.pk != null)
refreshScreenFocusPk(data);
else {
alert('Erro na inserção!');
flag_refresh_all = false;
}
instance.clearEditSelected = function() {
$('.dpt-selected > .dpt-form').html('');
$('.dpt-actions, .dpt-actions-bottom').html('');
tinymce.remove();
$('.dpt-selected').removeClass('dpt-selected');
}
}).always(function() {
$("#message_block").css("display", "none");
});
if (event != null)
event.preventDefault();
}
instance.editDispositivo = function(event) {
var obj_click = (event.target.classList.contains('dpt-link')
? event.target
: (event.target.parentElement.classList.contains('dpt-link')
? event.target.parentElement
: null));
if (obj_click && obj_click.getAttribute('href') && obj_click.getAttribute('href').length > 0)
return;
var dpt = $(this).closest('.dpt');
if (dpt.hasClass('dpt-selected')) {
if (this.getAttribute('action') == 'editor-close')
instance.clearEditSelected();
return;
}
instance.clearEditSelected();
instance.loadActionsEdit(dpt);
var clickEditDispositivo = function(event) {
var _pk = event.currentTarget.getAttribute('pk');
if ($('#dpt'+_pk).hasClass("dpt-selected")) {
clearEditSelected();
return;
var formtype = dpt.attr('formtype');
dpt.on(formtype, instance[formtype]);
instance.loadForm(dpt, formtype);
}
clearEditSelected();
clickUpdateDispositivo(event);
}
var clickUpdateDispositivo = function(event, __pk_refresh, __pk_edit, __action, flag_actions_vibible, flag_refresh_all) {
var pk_refresh = __pk_refresh;
var pk_edit = __pk_edit;
var _action = __action;
var _variacao = '';
var _tipo_pk = '';
var _perfil_pk = '';
if (event != null) {
pk_refresh = event.currentTarget.getAttribute('pk');
_action = $(this).attr('action');
_variacao = $(this).attr('variacao');
_tipo_pk = $(this).attr('tipo_pk');
_perfil_pk = $(this).attr('perfil_pk');
instance.gc = function() {
setTimeout(function() {
$('.dpt:not(.dpt-selected) > .dpt-form').html('');
},500);
}
if (pk_edit == null)
pk_edit = pk_refresh;
instance.get_form_base = function () {
var _this = $(this);
_this.addClass('dpt-selected');
var url = '';
if (_action == '')
return;
else if ( _action == null) {
url = pk_refresh+'/refresh?edit='+pk_edit;
}
else if (_action.startsWith('refresh')) {
var str = _action.split(':');
if (str.length > 1) {
if(_action.endsWith('perfil')) {
url = '&perfil_pk='+_perfil_pk;
$("#message_block").css("display", "block");
}
else {
editortype = str[1];
SetCookie("editortype", editortype, 30)
}
}
url = pk_refresh+'/refresh?edit='+pk_edit+url;
}
else if (_action.startsWith('add_')) {
var dpt_form = _this.children().filter('.dpt-form');
dpt_form.find('form').submit(instance.onSubmitEditFormBase);
instance.scrollTo(_this);
_this.off('get_form_base')
url = pk_refresh+'/actions?action='+_action;
url += '&tipo_pk='+_tipo_pk;
url += '&variacao='+_variacao;
var btn_fechar = _this.find('.btn-fechar');
btn_fechar.on('click', function() {
instance.clearEditSelected();
});
$("#message_block").css("display", "block");
var btns_excluir = _this.find('.btns-excluir');
_this.find('.dpt-actions-bottom').first().append(btns_excluir);
btns_excluir.find('.btn-excluir').on('click', instance.bindActionsClick);
}
else if (_action.startsWith('set_')) {
url = pk_refresh+'/actions?action='+_action;
$("#message_block").css("display", "block");
instance.get_form_alteracao = function () {
var _this = $(this);
_this.off('get_form_alteracao');
$('.dpt-actions, .dpt-actions-bottom').html('');
var dpt_form = _this.children().filter('.dpt-form').children().first();
var url_search = dpt_form[0]['id_dispositivo_search_form'].value;
DispostivoSearch({
'url_form': url_search,
'text_button': 'Selecionar'
});
instance.scrollTo(_this);
dpt_form.submit(instance.onSubmitFormRegistraAlteracao);
var btn_fechar = _this.find('.btn-fechar');
btn_fechar.on('click', function() {
instance.clearEditSelected();
instance.triggerBtnDptEdit(_this.attr('pk'));
});
}
instance.loadActionsEdit = function(dpt) {
var pk = dpt.attr('pk');
var url = pk+'/refresh?action=get_actions';
$.get(url).done(function(data) {
dpt.find('.dpt-actions').first().html(data);
dpt.find('.btn-action').on('click', instance.bindActionsClick);
//dpt.find('.btn-perfis').on('click', instance.bindActionsClick);
dpt.find('.btn-compila').on('click', instance.loadFormsCompilacao);
dpt.find('.btn-editor-type').on('click', instance.bindActionsEditorType);
if (editortype == 'construct')
dpt.find('.btn-group-inserts').first().addClass('open');
dpt.find('.btn-group-inserts button').mouseenter(function(event) {
dpt.find('.btn-group-inserts').removeClass('open');
$(this.parentElement).addClass('open')
});
instance.gc();
});
}
else if (_action.startsWith('delete_')) {
var r = confirm("Confirma Exclusão deste dispositivo?");
if (!r) {
return
instance.loadForm = function(dpt, trigger) {
var pk = dpt.attr('pk');
var dpt_form = dpt.children().filter('.dpt-form');
if (dpt_form.length == 1) {
var url = pk+'/refresh?action='+trigger;
$.get(url).done(function(data) {
if (editortype != "construct") {
dpt_form.html(data);
if (editortype == 'tinymce' ) {
initTinymce();
}
}
dpt.trigger(trigger);
}).always(function() {
instance.waitHide();
});
}
url = pk_refresh+'/actions?action='+_action;
$("#message_block").css("display", "block");
}
$.get(url).done(function( data ) {
if ( _action == null || _action.startsWith('refresh')) {
instance.loadFormsCompilacao = function(event) {
var dpt = $(this).closest('.dpt');
var formtype = this.getAttribute('action');
dpt.on(formtype, instance[formtype]);
instance.loadForm(dpt, formtype);
}
if (flag_refresh_all) {
if (flag_actions_vibible)
clearEditSelected();
instance.modalMessage = function(message, alert, closeFunction) {
if (message != null && message != '') {
$('#modal-message #message').html(message);
$('#modal-message').modal('show');
$('#modal-message, #modal-message .alert button').off();
$('#modal-message .alert').removeClass('alert-success alert-info alert-warning alert-danger alert-danger');
$('#modal-message .alert').addClass(alert);
if (closeFunction != null)
$('#modal-message').on('hidden.bs.modal', closeFunction);
$('#modal-message .alert button').on('click', function() {
$('#modal-message').modal('hide');
});
return true;
}
return false;
}
$( '#dpt' + pk_refresh ).html( data);
}
else {
//console.log(pk_refresh + ' - '+pk_edit)
if (flag_actions_vibible == null || flag_actions_vibible)
clearEditSelected();
instance.message = function(data) {
if (!('message' in data))
return;
var cp_notify = $(".cp-notify")
cp_notify.removeClass('hide')
var msg = cp_notify.find('.message');
msg.text(data.message.value);
msg.removeClass('bg-primary bg-success bg-info bg-warning bg-danger').addClass('bg-'+data.message.type);
setTimeout(function() {
cp_notify.addClass('hide');
}, (data.message.time?data.message.time: 3000));
}
instance.offClicks = function() {
$('.btn-dpt-edit').off()
}
instance.onClicks = function(container) {
var objects;
if (container == null)
objects = $('.btn-dpt-edit');
else
objects = $(container).find('.btn-dpt-edit');
objects.on('click', instance.editDispositivo);
}
//$( '#dpt' + pk_refresh+' > .bloco' ).addClass('displaynone' );
$( '#dpt' + pk_refresh ).prepend( data );
}
instance.onSubmitFormRegistraAlteracao = function(event) {
var _this = this;
reloadFunctionClicks();
var form_data = {
'csrfmiddlewaretoken' : this['csrfmiddlewaretoken'].value,
'dispositivo_alterado' : this['dispositivo_alterado'].value,
'formtype': 'get_form_alteracao',
};
var url = $(this).closest('.dpt').attr( "pk" )+'/refresh';
var _editortype = editortype;
if ( $('.edt-'+_editortype).length == 0) {
_editortype = 'construct';
}
instance.waitShow();
if ( _editortype == 'tinymce' ) {
initTinymce();
}
else if (_editortype == 'textarea') {
$('.csform form').submit(onSubmitEditForm);
}
else if (_editortype == 'construct') {
$('.csform .btn-salvar').parent().addClass("displaynone");
$('.csform .btn-salvar, .csform .fields').addClass("displaynone");
$('#dpt'+pk_refresh).css('min-height', $('.actions_right').height()*2);
$('.actions_inserts').removeClass('menu_flutuante');
$.post(url, form_data)
.done(function(data) {
instance.clearEditSelected();
if (data.pk != null) {
instance.refreshScreenFocusPk(data);
instance.message(data);
}
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);
$('.actions_inserts').addClass('menu_flutuante');
else {
alert('Erro na resposta!');
}
$(".edt-"+_editortype).addClass('selected');
}).always(function() {
instance.waitHide();
});
if (event != null)
event.preventDefault();
if (flag_actions_vibible == null || flag_actions_vibible) {
$('#dpt'+pk_edit).addClass('dpt-selected');
try {
$('html, body').animate({
scrollTop: $('#dpt' + pk_edit ).offset().top - window.innerHeight / 9
}, 100);
}
catch(err) {
}
}
instance.onSubmitEditFormBase = function(event) {
var _this = this;
var texto = '';
var texto_atualizador = '';
var visibilidade = '';
var editor_tiny_texto = tinymce.get('id_texto');
var editor_tiny_texto_atualizador = tinymce.get('id_texto_atualizador');
if (editor_tiny_texto != null)
texto = editor_tiny_texto.getContent();
else
texto = this['id_texto'].value;
if (editor_tiny_texto_atualizador != null)
texto_atualizador = editor_tiny_texto_atualizador.getContent();
else if ('id_texto_atualizador' in this)
texto_atualizador = this['id_texto_atualizador'].value;
if ('visibilidade' in this)
visibilidade = this['visibilidade'].value;
var form_data = {
'csrfmiddlewaretoken' : this['csrfmiddlewaretoken'].value,
'texto' : texto,
'texto_atualizador' : texto_atualizador,
'visibilidade' : visibilidade,
'formtype': 'get_form_base',
};
var url = $(this).closest('.dpt').attr( "pk" )+'/refresh';
instance.waitShow();
$.post(url, form_data)
.done(function(data) {
if (typeof data == "string") { /* if obsoleto */
var dpt = $(_this).closest('.dpt');
dpt = $('#'+dpt.replaceWith(data).attr('id'));
instance.onClicks(dpt);
instance.waitHide();
return;
}
}
instance.clearEditSelected();
else if (_action == 'add_next' || _action == 'add_in') {
clearEditSelected();
if (data.pk != null) {
refreshScreenFocusPk(data);
instance.refreshScreenFocusPk(data);
instance.message(data);
}
else {
alert('Erro na inserção!');
alert('Erro na resposta!');
}
}
else if (_action.startsWith('delete_')) {
$("#message_block").css("display", "block");
clearEditSelected();
if (data.pk != null) {
if (!modalMessage(data.message, 'alert-danger', function() {
//refreshScreenFocusPk(data);
}))
refreshScreenFocusPk(data);
}
else {
alert('Erro exclusão de Dispositivo!');
}
}
else {
clearEditSelected();
reloadFunctionClicks();
modalMessage(data.message, 'alert-success', null);
}
}).always(function() {
$("#message_block").css("display", "none");
});
}
}).always(function() {
instance.waitHide();
});
if (event != null)
event.preventDefault();
}
instance.refreshContent = function(pais, trigger_edit_pk) {
if (pais.length == 0) {
instance.waitHide();
return;
}
var pk = pais.shift();
var url = pk+'/refresh';
function modalMessage(message, alert, closeFunction) {
if (message != null && message != '') {
$('#modal-message #message').html(message);
$('#modal-message').modal('show');
$('#modal-message, #modal-message .alert button').off();
$('#modal-message .alert').removeClass('alert-success alert-info alert-warning alert-danger alert-danger');
$('#modal-message .alert').addClass(alert);
$.get(url).done(function(data) {
var dpt = $('#id'+pk).closest('.dpt');
dpt = $('#'+dpt.replaceWith(data).attr('id'));
instance.onClicks(dpt);
instance.reloadFunctionsDraggables();
if (closeFunction != null)
$('#modal-message').on('hidden.bs.modal', closeFunction);
if (trigger_edit_pk > 0)
instance.triggerBtnDptEdit(trigger_edit_pk)
$('#modal-message .alert button').on('click', function() {
$('#modal-message').modal('hide');
instance.refreshContent(pais);
});
return true;
}
return false;
}
function refreshScreenFocusPk(data) {
instance.refreshScreenFocusPk = function (data) {
instance.waitShow();
if (data.pai[0] == -1) {
instance.waitShow()
href = location.href.split('#')[0]
location.href = href+'#'+data.pk;
location.reload(true)
}
else {
instance.refreshContent(data.pai, data.pk);
if (data.pai[0] == -1) {
$("#message_block").css("display", "block");
href = location.href.split('#')[0]
location.href = href+'#'+data.pk;
location.reload(true)
/*setTimeout(function() {
for (var pai = 1; pai < data.pai.length; pai++)
instance.refreshContent(data.pai[pai]);
instance.waitHide();
}, 1000);*/
}
else {
clickUpdateDispositivo(null, data.pai[0], data.pk, 'refresh', true, true);
setTimeout(function() {
for (var pai = 1; pai < data.pai.length; pai++)
clickUpdateDispositivo(null, data.pai[pai], data.pk, 'refresh', false, true);
}, 1000);
}
}
function clearEditSelected() {
$('.bloco' ).removeClass('displaynone' );
$(".container").removeClass('class_color_container');
tinymce.remove();
$('.dpt-selected').removeClass('dpt-selected');
$('.dpt').css('min-height', '');
$('.csform').remove();
}
instance.reloadFunctionsDraggables = function() {
$( ".dpt-alts" ).sortable({
revert: true,
distance: 15,
start: function( event, ui ) {
}
,
stop: function( event, ui ) {
var pk = ui.item.attr('pk');
var bloco_pk = ui.item.closest('.dpt-alts').closest('.dpt').attr('pk');
var url = pk+'/refresh?action=json_drag_move_dpt_alterado&index='+ui.item.index()+'&bloco_pk='+bloco_pk;
$.get(url).done(function( data ) {
console.log(pk+ ' - '+ bloco_pk);
//reloadFunctionsForObjectsOfCompilacao();
});
}
});
function reloadFunctionClicks() {
$('.dpt .de, .btn-action, .btn-edit').off();
$('.dpt .de, .btn-edit').on('click', clickEditDispositivo);
$('.btn-action').on('click', clickUpdateDispositivo);
$('#editdi_texto').focus();
$( ".bloco_alteracao" ).sortable({
revert: true,
stop: function( event, ui ) {
var pk = ui.item.attr('pk');
var bloco_pk = ui.item.closest('.bloco').closest('.dpt').attr('pk');
url = pk+'/actions?action=move_dpt_alterado&index='+ui.item.index()+'&bloco_pk='+bloco_pk;
$.get(url).done(function( data ) {
console.log(pk+ ' - '+ bloco_pk);
});
}
});
$( ".bloco_alteracao .dpt" ).draggable({
connectToSortable: ".bloco_alteracao",
revert: 'invalid',
zIndex: 1,
drag: function( event, ui ) {
$( ".bloco_alteracao" ).addClass('drag');
},
stop: function( event, ui ) {
$( ".bloco_alteracao" ).removeClass('drag');
},
});
$( ".bloco_alteracao" ).disableSelection();
}
$( ".dpt-alts .dpt" ).draggable({
connectToSortable: ".dpt-alts",
revert: 'invalid',
zIndex: 1,
distance: 15,
drag: function( event, ui ) {
//$('.dpt-comp-selected').removeClass('dpt-comp-selected');
$(".dpt-alts").addClass('drag');
},
stop: function( event, ui ) {
$(".dpt-alts").removeClass('drag');
},
});
$(document).ready(function() {
$(".dpt-alts").disableSelection();
}
instance.scrollTo = function(dpt) {
try {
$('html, body').animate({
scrollTop: dpt.offset().top - window.innerHeight / 9
}, 100);
}
catch(err) {
}
}
instance.triggerBtnDptEdit =function(pk) {
var btn_dpt_edit = $('#id'+pk + ' > .dpt-text.btn-dpt-edit');
if (btn_dpt_edit.length == 0)
btn_dpt_edit = $('#id'+pk + ' > .dpt-actions-fixed > .btn-dpt-edit');
btn_dpt_edit.trigger( "click" );
}
instance.waitHide = function() {
$("#wait_message").addClass("displaynone");
}
instance.waitShow = function() {
$("#wait_message").removeClass("displaynone");
}
editortype = ReadCookie("editortype")
if (editortype == null || editortype == "") {
editortype = "textarea"
SetCookie("editortype", editortype, 30)
instance.init = function() {
editortype = ReadCookie("editortype");
if (editortype == null || editortype == '') {
editortype = "textarea"
SetCookie("editortype", editortype, 30)
}
//editortype = "textarea";
instance.offClicks();
instance.onClicks();
instance.reloadFunctionsDraggables();
href = location.href.split('#')
if (href.length == 2 && href[1] != '') {
instance.triggerBtnDptEdit(href[1])
}
$('main').click(function(event) {
if (event.target == this || event.target == this.firstElementChild)
instance.clearEditSelected();
});
instance.waitHide();
}
instance.init();
}
reloadFunctionClicks();
$("#message_block").css("display", "none");
href = location.href.split('#')
if (href.length == 2 && href[1] != '') {
clickUpdateDispositivo(null, href[1], href[1], 'refresh', true);
}
$(document).ready(function() {
$('main').click(function(event) {
if (event.target == this || event.target == this.firstElementChild)
clearEditSelected();
});
DispositivoEdit();
});

27
sapl/static/js/compilacao_view.js

@ -36,7 +36,7 @@ function textoMultiVigente(item, diff) {
$(".dptt.desativado").removeClass("displaynone");
$(".dtxt").removeClass("displaynone");
$(".dtxt.diff").remove();
$(".link_alterador").removeClass("displaynone");
$(".nota-alteracao").removeClass("displaynone");
if (diff) {
$(".dtxt[id^='da'").each(function() {
@ -95,9 +95,14 @@ function textoMultiVigente(item, diff) {
}
if (elv) {
$('html, body').animate({
scrollTop: $(elv).parent().offset().top - 60
}, 0);
try {
$('html, body').animate({
scrollTop: $(elv).parent().offset().top - 60
}, 0);
}
catch(err) {
}
}
}
@ -121,14 +126,18 @@ function textoVigente(item, link) {
$(item).addClass("selected")
$(".dptt.desativado").addClass("displaynone");
$(".link_alterador").removeClass("displaynone");
$(".nota-alteracao").removeClass("displaynone");
if (!link)
$(".link_alterador").addClass("displaynone");
$(".nota-alteracao").addClass("displaynone");
if (elv) {
$('html, body').animate({
scrollTop: $(elv).parent().offset().top - 60
}, 0);
try {
$('html, body').animate({
scrollTop: $(elv).parent().offset().top - 60
}, 0);
}
catch(err) {
}
}
}

12
sapl/static/styles/app.scss

@ -8,6 +8,12 @@
float: none;
}
nav {
&.navbar {
border-radius: 0;
}
}
.masthead {
padding: 10px;
.nav {
@ -140,12 +146,6 @@ fieldset {
}
}
.btn-primary, .btn-danger{
font-size: 16px;
height: 40px !important;
display: inline-block;
}
/* INDEX */
#conteudo {
position: relative;

369
sapl/static/styles/compilacao.scss

@ -61,6 +61,7 @@ a:link:after, a:visited:after {
-webkit-transition-delay: 0.4s; /* Safari */
transition-delay: 0.4s;
li {
a {
border-right: 0px !important;
@ -84,7 +85,6 @@ a:link:after, a:visited:after {
}
}
}
// This bridges the gap between the top bar and a dropdown.
&::after {
content: "";
position: absolute;
@ -93,27 +93,23 @@ a:link:after, a:visited:after {
top: rem-calc(-25px);
height: rem-calc(25px);
width: 100%;
// This transition is for hover-on.
transition: all 0.3s cubic-bezier(0.55,0,0.1,1);
}
}
&:hover > ul {
transform: translateY(7px);
// This transition is actually for when we hover-out of the dropdown.
transition: transform 0.4s linear,
opacity 0.4s linear,
clip 0s 0.2s;
opacity: 1;
clip: rect(-100px, 2000px, 2000px, -100px);
}
}
.test_import:nth-child(even) {
background-color: #ccc;
}
#message_block {
#wait_message {
display: block;
position: fixed;
top: 0;
@ -137,12 +133,40 @@ a:link:after, a:visited:after {
box-shadow: 0 1px 2px #999;
}
}
.text-center {
text-align: center;
}
.cp-notify {
z-index: 9999;
position:fixed;
top: 2em;
left: 50%;
min-width: 600px;
transform: translate(-50%, 0);
transition: all 0.4s ease;
opacity: 0.97;
&.hide {
opacity: 0;
top: -1000px;
display: block !important;
transition: all 0.4s ease;
}
.message {
padding: 1em;
border: 2px solid rgba(0, 0, 0, 0.1);
border-radius: 4px;
color: rgba(0, 0, 0, 0.6);
line-height: 1em;
font-size: 1.3em;
text-align: center;
box-shadow: 0 0 100px rgba(0, 0, 0, 0.2);
}
}
.cp {
.desativado {
.dtxt, .dtxt * {
.dtxt, .dtxt *, .dpt-link, .dpt-link * {
text-decoration: line-through;
color: #999 !important;
@ -365,15 +389,14 @@ a:link:after, a:visited:after {
}
}
}
}
.dptt {
& > a {
color: #444444;
&.link_alterador {
color: #2980B9;
&.nota-alteracao {
color: #02baf2;
font-size: 0.75em;
&:hover {
text-decoration: underline;
@ -418,7 +441,6 @@ a:link:after, a:visited:after {
}
}
}
.dne-nota {
position: relative;
transform: scaleX(1);
@ -491,6 +513,261 @@ a:link:after, a:visited:after {
} /* end cp */
.cp.cpe {
.desativado {
text-decoration: line-through;
color: #999 !important;
table, table td {
border: 1px dotted #ccc;
}
a.nota-alteracao * {
color: #02baf2 !important;
}
}
.dpt {
display: block;
& > .dpt-actions-fixed {
position: absolute;
right: -0.8em;
top: -0.8em;
z-index: 3;
opacity: 0;
.activate {
display:none;
}
.deactivate {
display:inline;
}
.btn-dpt-edit.btn-default {
color: #333;
&:hover {
color: #fff;
background-color: #02baf2;
}
}
}
& > .dpt-actions, & > .dpt-actions-bottom {
display: none;
}
& > .dpt-text {
cursor: text;
min-height: 30px;
border: 1px solid transparent;
&:hover, &.hover-fixed {
background-color: rgba(0, 0, 0, 0.01);
color: $color_buttons;
border: 1px solid #eee;
transition: color 0.3s ease;
}
&.artigo {
float: none;
}
a {
&.link-rotulo {
color: #000;
}
}
}
&:hover {
& > .dpt-actions-fixed {
opacity: 1;
&:hover {
& ~ .dpt-text {
background-color: rgba(0, 0, 0, 0.01);
color: $color_buttons;
border: 1px solid #eee;
transition: color 0.3s ease;
}
}
}
}
.semtexto {
font-weight: bold;
color: #9aaed6;
&:hover {
color: #5f76a4;
}
}
} /* fim .dpt */
.dpt-alts {
margin: 0;
margin-bottom: 1em;
padding: 0;
background-color: transparent;
min-height: 100px;
border: 2px dashed #fff;
&:hover {
border-color: #d9ddde;
}
&:empty {
border-color: #ddd;
}
&.drag {
width: 100% !important;
border-color: #d9ddde;
.dpt {
transition-duration: 0s !important;
}
}
.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: 0;
margin: 0;
background-color: #edf0f1;
height: auto !important;
min-height: 2em;
z-index: 1;
&:not(:first-child) {
border-top: 1px solid white;
}
& > .dpt-text {
padding: 0.3em 1em;
margin-top: 0;
margin-bottom: 0;
a {
&.link-rotulo {
text-decoration: underline;
}
}
}
}
.dpt-selected {
&.dpt {
margin: 0em -0.5em;
}
}
} /* fim dpt-alts */
.dpt-selected {
&.dpt {
width: auto !important;
margin: 1em -0.5em;
border: 1px solid #ddd !important;
padding: 0;
background-color: #fafafa;
border-radius: 3px;
z-index: 4;
& > .dpt-text {
border: 1px solid transparent;
&:hover {
border: 1px solid transparent;
background-color: rgba(0, 0, 0, 0.0);
}
}
& > .dpt-form {
margin-bottom: 0em;
}
& > .dpt-actions, & > .dpt-actions-bottom {
display: table;
background-color: #e5e5e5;
padding: 1em;
margin-bottom: 0em;
width: 100%;
& > .btn-action {
display: table-cell;
float: none;
}
.btn-excluir {
display: inline-block;
opacity: 0.3;
&:hover {
opacity: 1;
}
}
}
& > .dpt-actions-bottom {
margin:0;
}
}
.dpt-block {
border-top: 1px solid #e5e5e5 !important;
opacity: 0.6;
transition: opacity 0.4s ease;
&:hover {
opacity: 1;
}
}
.dpt {
&:only-child {
/*border-bottom: 1px solid #e5e5e5 !important;*/
}
&:not(:last-child) {
/*border-bottom: 1px solid #e5e5e5 !important;*/
}
}
.dpt-text {
opacity: 0.7;
margin: 0;
padding: 0.7em;
&:hover {
opacity: 1;
background-color: #f5f5f5;
}
}
.dpt-alts {
margin: 1em;
.dpt {
box-shadow: 0 0 0;
}
}
& > .dpt-actions-fixed {
opacity: 1;
top: -12px;
right: 0.5em;
.activate {
display:inline;
}
.deactivate {
display:none;
}
.btn-dpt-edit {
padding-top: 2px;
padding-bottom: 1px;
&.btn-default {
background-color: #fad46b;
}
}
}
.dropdown-menu {
&.dropdown-menu-left {
right: auto !important;
left: 0;
padding: 2px 0;
& > .top.arrow {
right: 88%;
left: auto;
}
}
li {
a {
padding-top: 2px;
padding-bottom: 2px;
}
}
}
.btn-group {
.radius-right {
border-bottom-right-radius: 4px !important;
border-top-right-radius: 4px !important;
}
}
&:hover {
& > .dpt-actions-fixed {
opacity: 1;
}
}
}
}
.cp.cpe1 {
margin-bottom: 15em;
@ -530,14 +807,19 @@ a:link:after, a:visited:after {
position: absolute;
opacity: 0;
transition: all 0.4s ease-in-out;
z-index: 2000;
z-index: 1000;
a {
&.btn-edit {
&.btn-bloco {
background-color: #3498db;
color: #ffffff !important;
padding: 8px 18px 6px;
display: inline-block;
line-height: 1;
float: right;
&:hover{
opacity: 1;
@include background-top-down(#1c81c4, #0b6dad);
}
}
}
}
@ -570,13 +852,17 @@ a:link:after, a:visited:after {
border-color: #d9ddde;
}
&.drag {
width: 100% !important;
border-color: #d9ddde;
.dpt {
transition-duration: 0s !important;
}
}
.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: 0.3em 1em;
margin: 1px 0;
margin: 0;
background-color: #edf0f1;
z-index: 1;
&:not(:first-child) {
@ -585,6 +871,12 @@ a:link:after, a:visited:after {
&.ui-draggable div {
cursor: pointer;
}
&.dpt-comp-selected {
transition: all 0.3s ease;
width: auto !important;
margin: 2em -3.7em;
box-shadow: 0 0 6px rgba(0,0,0,.16),0 6px 12px rgba(0,0,0,.32);
}
}
}
} /* fim dpt */
@ -592,7 +884,7 @@ a:link:after, a:visited:after {
.dpt-selected {
font-size: 1em;
border: 0px solid $color_actions_border;
margin: 1em -2em 1em -2.8em;
margin: 1em -1.8em 1em -1.8em;
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);
@ -626,12 +918,26 @@ a:link:after, a:visited:after {
.bloco_alteracao {
margin: 0;
padding: 1em;
border: 0 transparent;
@include background-top-down(#eaeaee, #ddd);
&:not(:first-child) {
border-top: 0px solid white;
&:hover {
border-color: transparent;
}
&.drag {
width: 100% !important;
.dpt {
transition-duration: 0s !important;
}
}
.dpt {
width: auto !important;
transition: all 0.3s ease;
background-color: white;
&:not(:first-child) {
border-top: 0px solid white;
}
}
}
@ -643,7 +949,11 @@ a:link:after, a:visited:after {
}
& > .actions_right {
display: none;
a {
&.btn-bloco {
display: none;
}
}
}
.csform { /* compilacao simple form */
@ -910,6 +1220,7 @@ a:link:after, a:visited:after {
.menu_flutuante, .menu_flutuante_fixo {
z-index: 2000;
& > li {
@include li_flutuante();
@ -956,7 +1267,8 @@ a:link:after, a:visited:after {
}
}
} /* fim csform*/
}
} /* fim dpt-selected */
.selected {
background-color: rgba(255, 255, 255, 0.5);
@ -1092,8 +1404,10 @@ a:link:after, a:visited:after {
clear:both;
}
.mce-panel {
/*border: 0px solid #ccc !important;*/
.mce-tinymce.mce-container {
border: 1px solid #ccc !important;
margin-right: 2px;
}
.mce-btn button:hover {
background-color: rgba(0,0,0,0.1) !important;
@ -1108,16 +1422,16 @@ a:link:after, a:visited:after {
display: none !important;
}
@media only screen and (max-width: 40.0625em) {
@media only screen and (max-width: 800px) {
.cp .fixed{
z-index:98;
position: relative;
}
.cpe {
.cp.cpe1 {
.dpt-selected {
margin:1em -1em 1em -1.8em;
margin: 1em 0;
.csform {
.actions_parents, .label_status {
@ -1126,6 +1440,9 @@ a:link:after, a:visited:after {
display: block !important;
padding: 0em;
height: auto !important;
left: 0;
right: auto;
text-align: left;
div, li {
display: inline-block !important;
}
@ -1179,7 +1496,7 @@ a:link:after, a:visited:after {
margin-left: 0;
margin-right: 0.5em;
li:first-child::before {
right: 27%;
right: 0;
left: auto;
}
}

71
sapl/templates/compilacao/ajax_actions_dinamic_edit.html

@ -0,0 +1,71 @@
{% load i18n %}
<div class="btn-toolbar pull-right" role="toolbar" >
{% if object.tipo_dispositivo.dispositivo_de_articulacao and object.tipo_dispositivo.dispositivo_de_alteracao %}
<div class="btn-group " role="group">
<button type="button" class="btn btn-default btn-sm btn-compila" pk="{{object.pk}}" action="get_form_revogacao" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
Registrar Revogação
</button>
<button type="button" class="btn btn-default btn-sm btn-compila" pk="{{object.pk}}" action="get_form_alteracao" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
Registrar Alteração
</button>
<button type="button" class="btn btn-default btn-sm btn-compila" pk="{{object.pk}}" action="get_form_inclusao" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
Registrar Inclusão
</button>
</div>
{%endif%}
<div class="btn-group " role="group">
<button type="button" class="btn btn-default btn-sm radius-right" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
<i class="fa fa-edit fa-lg"></i>
</button>
<ul class="dropdown-menu">
<div class="arrow top"></div>
<li><a class="btn-editor-type" editortype="construct">Construtor</a></li>
<li><a class="btn-editor-type" editortype="textarea">Editor Simples</a></li>
<li><a class="btn-editor-type" editortype="tinymce">Editor Tinymce</a></li>
<li><a class="btn-editor-avancado" href="{% url 'sapl.compilacao:dispositivo_edit' object.ta_id object.pk %}" >Editor Avançado</a></li>
</ul>
</div>
</div>
<div class="btn-toolbar" role="toolbar" >
<div class="btn-group dropdown" role="group">
{% if object.dispositivo_subsequente == None %}
{% for inserts in allowed_inserts %}
{% if inserts.itens %}
<div class="btn-group btn-group-inserts" role="group">
<button type="button" class="btn btn-success btn-sm {% if forloop.last %}radius-right{%endif%}" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
{{inserts.icone|safe}}<span>{{inserts.tipo_insert}}</span>
</button>
<ul class="dropdown-menu dropdown-menu-left">
<div class="arrow top"></div>
{% for item in inserts.itens %}
<li><a class="btn-inserts btn-action " action="{{inserts.action}}" pk="{{item.dispositivo_base}}" variacao="{{item.variacao}}" tipo_pk="{{item.tipo_pk}}">{{item.provavel|safe}}</a></li>
{% endfor %}
</ul>
</div>
{% endif %}
{% endfor %}
{% endif %}
</div>
<div class="btn-group " role="group">
{% if object.dispositivo_subsequente == None %}
{% for perfil in perfil_estrutural_list%}
<button type="button" class="btn-action btn-perfis btn btn-xs {%if request.session.perfil_estrutural == perfil.pk%}btn-primary{%else%}btn-default{%endif%}" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true" pk="{{object.pk}}" perfil_pk="{{perfil.pk}}" action="json_get_perfis" title="{{perfil.nome}}">
{{perfil.sigla}}
</button>
{% endfor %}
{%endif%}
</div>
{% if not object.ta_publicado%}
<div class="btn-group " role="group">
<button type="button" class="btn-action btn btn-xs radius-right {% if object.pk == object.dispositivo_vigencia_id %}btn-primary{%else%}btn-default{%endif%}" pk="{{object.pk}}" action="json_set_dvt" title="{% if object.pk == object.dispositivo_vigencia_id %}{% trans 'Dispositivo de Vigência Atual'%}{%else%}{% trans 'Tornar este o Dispositivo de Vigência de todo o Texto Articulado.'%}{%endif%}">
DVt
</button>
</div>
{%endif%}
</div>

44
sapl/templates/compilacao/dispositivo_form.html

@ -5,17 +5,16 @@
<link rel="stylesheet" href="{% sass_src 'styles/compilacao.scss' %}" type="text/css">
{% endblock %}
{% block sections_nav %}
<ul class="nav nav-pills navbar-right">
{% url 'sapl.compilacao:dispositivo_edit' object.ta_id object.pk as edit_url%}
{% url 'sapl.compilacao:dispositivo_edit_vigencia' object.ta_id object.pk as edit_vigencia_url %}
{% url 'sapl.compilacao:dispositivo_edit_alteracao' object.ta_id object.pk as edit_alteracao_url %}
{% url 'sapl.compilacao:dispositivo_edit_definidor_vigencia' object.ta_id object.pk as edit_definidor_vigencia_url %}
<li {% if request.get_full_path == edit_url %}class="active"{%endif%}><a class="btn-warning" href="{{ edit_url }}">{% trans 'Dados Básicos' %}</a></li>
<li {% if request.get_full_path == edit_vigencia_url %}class="active"{%endif%}><a class="btn-warning" href="{{ edit_vigencia_url }}" >{% trans 'Vigência' %}</a></li>
<li {% if request.get_full_path == edit_definidor_vigencia_url %}class="active"{%endif%}><a class="btn-danger" href="{{ edit_definidor_vigencia_url }}" >{% trans 'Definidor de Vigência' %}</a></li>
<li {% if request.get_full_path == edit_alteracao_url %}class="active"{%endif%}><a class="btn-danger" href="{{ edit_alteracao_url }}" >{% trans 'Alteração' %}</a></li>
<li><a href="#" class="btn-danger">{% trans 'Alterador' %}</a></li>
</ul>
<ul class="nav nav-pills navbar-right">
{% url 'sapl.compilacao:dispositivo_edit' object.ta_id object.pk as edit_url%}
{% url 'sapl.compilacao:dispositivo_edit_vigencia' object.ta_id object.pk as edit_vigencia_url %}
{% url 'sapl.compilacao:dispositivo_edit_alteracao' object.ta_id object.pk as edit_alteracao_url %}
{% url 'sapl.compilacao:dispositivo_edit_definidor_vigencia' object.ta_id object.pk as edit_definidor_vigencia_url %}
<li {% if request.get_full_path == edit_url %}class="active"{%endif%}><a class="btn-warning" href="{{ edit_url }}">{% trans 'Dados Básicos' %}</a></li>
<li {% if request.get_full_path == edit_vigencia_url %}class="active"{%endif%}><a class="btn-warning" href="{{ edit_vigencia_url }}" >{% trans 'Vigência' %}</a></li>
<li {% if request.get_full_path == edit_definidor_vigencia_url %}class="active"{%endif%}><a class="btn-danger" href="{{ edit_definidor_vigencia_url }}" >{% trans 'Definidor de Vigência' %}</a></li>
<li {% if request.get_full_path == edit_alteracao_url %}class="active"{%endif%}><a class="btn-danger" href="{{ edit_alteracao_url }}" >{% trans 'Alteração' %}</a></li>
</ul>
{% endblock sections_nav %}{% trans '' %}
{% block title %}
@ -23,16 +22,37 @@
{% endblock%}
{% block base_content %}
<div class="btn-group btn-group-sm" role="group">
<div class="cp-nav-parents btn-group btn-group-sm" role="group">
<a href="#" class="btn btn-default">
{% trans "Articulações" %}
<span class="caret"></span>
</a>
<ul class="dropdown-menu">
<li>
{%for parent in object.get_niveis_zero %}
<a href="{% url view.get_url_this_view parent.ta_id parent.pk %}">
{{parent.dispositivo0}} - {{parent|nomenclatura}}
</a>
{%endfor %}
</li>
</ul>
</div>
{%for parent in object.get_parents_asc %}
{%with node=parent active=False template_name='compilacao/dispositivo_form_parents.html' %}
{%include template_name%}
{%endwith%}
{%endfor %}
{%with node=object active=True template_name='compilacao/dispositivo_form_parents.html' %}
{%include template_name%}
{%endwith%}
</div>
<br>
{%if object.ta_publicado_id %}
<a class="text-warning" href="{%url 'compilacao:ta_text' object.ta_publicado.pk %}#{{object.dispositivo_atualizador_id}}">
<small>{{ object.tipo_dispositivo.nota_automatica_prefixo_html|safe }}
{% nota_automatica object None %}
{{ object.tipo_dispositivo.nota_automatica_sufixo_html|safe }}</small></a>
{%endif%}
<br><br>
{% crispy form %}
{% endblock %}

17
sapl/templates/compilacao/dispositivo_form_parents.html

@ -4,28 +4,25 @@
<a href="{% url view.get_url_this_view node.ta_id node.pk %}" class="btn btn-default {%if active%}btn-primary{%endif%}">
{{node|nomenclatura}}
</a>
{% else %}
{% else %}
<div class="cp-nav-parents btn-group btn-group-sm" role="group">
<a href="{% url view.get_url_this_view node.ta_id node.pk %}" class="btn btn-default {%if active%}btn-primary{%endif%}">
{{node|nomenclatura}}
{% if not node.rotulo and node.nivel == 0 %}{{node.dispositivo0}} - {% endif %}{{node|nomenclatura}}
<span class="caret"></span>
</a>
<ul class="dropdown-menu">
<li>
{%for parent in node.dispositivos_filhos_set.all %}
<a href="{% url view.get_url_this_view parent.ta_id parent.pk %}">
{{parent|nomenclatura}} {% if parent.dispositivo_subsequente_id %}({% trans "Alterado" %}){% endif %}
{{parent|nomenclatura}} {% if parent.ta_publicado_id %}<small class="text-warning">
{{ parent.tipo_dispositivo.nota_automatica_prefixo_html|safe }}
{% nota_automatica parent None %}
{{ parent.tipo_dispositivo.nota_automatica_sufixo_html|safe }}
</small>{% endif %}
</a>
{%endfor %}
</li>
</ul>
</div>
{% endif %}

4
sapl/templates/compilacao/dispositivo_form_search.html

@ -5,14 +5,14 @@
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="{% trans 'Fechar' %}"><span aria-hidden="true">&times;</span></button>
<h4 class="modal-title" id="gridSystemModalLabel">{% trans "Selecionar Dispositivo(s)" %}</h4>
<h4 class="modal-title" id="gridSystemModalLabel">{% trans "Seleção de Dispositivo(s)" %}</h4>
</div>
<div class="modal-body">
{% crispy form form.helper%}
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">{% trans 'Fechar' %}</button>
<button type="button" class="btn btn-primary" id="btn-modal-select">{% trans "Selecionar" %}</button>
<button type="button" class="btn btn-success" id="btn-modal-select">{% trans "Selecionar" %}</button>
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->

8
sapl/templates/compilacao/dispositivo_form_search_fragment.html

@ -24,7 +24,7 @@
{% endif %}
{% endifchanged %}
{% if dpt.tipo_dispositivo.dispositivo_de_alteracao or dpt.dispositivo_pai.nivel > 0 and dpt.is_relative_auto_insert and dpt.dispositivo_pai not in object_list %}
{% if dpt.tipo_dispositivo.dispositivo_de_alteracao or dpt.dispositivo_pai.nivel > 0 and dpt.auto_inserido and dpt.dispositivo_pai not in object_list %}
<li>
<div class="iteminput">
<input type="{{request.GET.data_type_selection}}" name="{{request.GET.data_field}}" id="dpt{{dpt.pk}}" value="{{dpt.pk}}"/>
@ -40,7 +40,7 @@
{{ dpt.dispositivo_pai.tipo_dispositivo.rotulo_sufixo_html|safe }}
<span class="dtxt" id="d{% if not dpt.dispositivo_pai.dispositivo_subsequente_id and dpt.dispositivo_pai.dispositivo_substituido_id %}a{% endif %}{{dpt.dispositivo_pai.pk}}" pks="{{dpt.dispositivo_pai.dispositivo_substituido_id|default:''}}" pk="{{dpt.dispositivo_pai.pk}}">{{ dpt.dispositivo_pai.tipo_dispositivo.texto_prefixo_html|safe }}{%if dpt.dispositivo_pai.texto %}{{ dpt.dispositivo_pai.texto|safe }}{%else%}{%if not dpt.dispositivo_pai.tipo_dispositivo.dispositivo_de_articulacao %}&nbsp;{% endif %}{% endif %}</span>
{% if dpt.dispositivo_pai.ta_publicado_id %}
<a class="link_alterador" href="{% url 'sapl.compilacao:ta_text' dpt.dispositivo_pai.ta_publicado.pk %}#{{dpt.dispositivo_pai.dispositivo_atualizador_id}}">
<a class="nota-alteracao" href="{% url 'sapl.compilacao:ta_text' dpt.dispositivo_pai.ta_publicado.pk %}#{{dpt.dispositivo_pai.dispositivo_atualizador_id}}">
{{ dpt.dispositivo_pai.tipo_dispositivo.nota_automatica_prefixo_html|safe }}
{% nota_automatica dpt.dispositivo_pai ta_pub_list %}
{{ dpt.dispositivo_pai.tipo_dispositivo.nota_automatica_sufixo_html|safe }}
@ -72,7 +72,7 @@
pks="{{dpt.dispositivo_substituido_id|default:''}}"
pk="{{dpt.pk}}">{{ dpt.tipo_dispositivo.texto_prefixo_html|safe }}{%if dpt.texto %}{{ dpt.texto|safe }}{%else%}{%if not dpt.tipo_dispositivo.dispositivo_de_articulacao %}&nbsp;{% endif %}{% endif %}</span>
{% if dpt.ta_publicado_id %}
<a class="link_alterador" href="{% url 'sapl.compilacao:ta_text' dpt.ta_publicado.pk %}#{{dpt.dispositivo_atualizador_id}}">
<a class="nota-alteracao" href="{% url 'sapl.compilacao:ta_text' dpt.ta_publicado.pk %}#{{dpt.dispositivo_atualizador_id}}">
{{ dpt.tipo_dispositivo.nota_automatica_prefixo_html|safe }}
{% nota_automatica dpt ta_pub_list %}
{{ dpt.tipo_dispositivo.nota_automatica_sufixo_html|safe }}
@ -108,7 +108,7 @@
{{ df.tipo_dispositivo.rotulo_sufixo_html|safe }}
<span class="dtxt" id="d{% if not df.dispositivo_subsequente_id and df.dispositivo_substituido_id %}a{% endif %}{{df.pk}}" pks="{{df.dispositivo_substituido_id|default:''}}" pk="{{df.pk}}">{{ df.tipo_dispositivo.texto_prefixo_html|safe }}{%if df.texto %}{{ df.texto|safe }}{%else%}{%if not df.tipo_dispositivo.dispositivo_de_articulacao %}&nbsp;{% endif %}{% endif %}</span>
{% if df.ta_publicado_id %}
<a class="link_alterador" href="{% url 'sapl.compilacao:ta_text' df.ta_publicado.pk %}#{{df.dispositivo_atualizador_id}}">
<a class="nota-alteracao" href="{% url 'sapl.compilacao:ta_text' df.ta_publicado.pk %}#{{df.dispositivo_atualizador_id}}">
{{ df.tipo_dispositivo.nota_automatica_prefixo_html|safe }}
{% nota_automatica df ta_pub_list %}
{{ df.tipo_dispositivo.nota_automatica_sufixo_html|safe }}

2
sapl/templates/compilacao/layout/dispositivo_checkbox.html

@ -34,7 +34,7 @@
{{ choice.1.tipo_dispositivo.rotulo_sufixo_html|safe }}
<span class="dtxt" id="d{% if not choice.1.dispositivo_subsequente_id and choice.1.dispositivo_substituido_id %}a{% endif %}{{choice.1.pk}}" pks="{{choice.1.dispositivo_substituido_id|default:''}}" pk="{{choice.1.pk}}">{{ choice.1.tipo_dispositivo.texto_prefixo_html|safe }}{%if choice.1.texto %}{{ choice.1.texto|safe }}{%else%}{%if not choice.1.tipo_dispositivo.dispositivo_de_articulacao %}&nbsp;{% endif %}{% endif %}</span>
{% if choice.1.ta_publicado_id and not choice.1.tipo_dispositivo.dispositivo_de_articulacao %}
<a class="link_alterador" target="_blank" href="{% url 'sapl.compilacao:ta_text' choice.1.ta_publicado.pk %}#{{choice.1.dispositivo_atualizador_id}}">
<a class="nota-alteracao" target="_blank" href="{% url 'sapl.compilacao:ta_text' choice.1.ta_publicado.pk %}#{{choice.1.dispositivo_atualizador_id}}">
{{ choice.1.tipo_dispositivo.nota_automatica_prefixo_html|safe }}
{% nota_automatica choice.1 ta_pub_list %}
{{ choice.1.tipo_dispositivo.nota_automatica_sufixo_html|safe }}

14
sapl/templates/compilacao/layout/dispositivo_radio.html

@ -18,7 +18,7 @@
</div>
<div class="itemlabel dpt">
{% if dpt.nivel > 1 %}
<a class="clearfix" target="_blank" href="{% url 'sapl.compilacao:ta_text' dpt.ta.pk%}#{{dpt.pk}}" class="nomenclatura_heranca">{% trans "Herança:" %} {% heranca request dpt 1 0 %}</a>
<a class="clearfix" target="_blank" href="{% url 'sapl.compilacao:ta_text' dpt.ta.pk%}#{{dpt.pk}}" class="nomenclatura_heranca">{% trans "Herança:" %} {% heranca request dpt 0 0 %}</a>
{% endif %}
<div class="{{ dpt.tipo_dispositivo.class_css }}">
<div class="dptt {% dispositivo_desativado dpt None None %}" id="dptt{{dpt.pk}}" >
@ -29,6 +29,18 @@
id="d{% if not dpt.dispositivo_subsequente_id and dpt.dispositivo_substituido_id %}a{% endif %}{{dpt.pk}}"
pks="{{dpt.dispositivo_substituido_id|default:''}}"
pk="{{dpt.pk}}">{{ dpt.tipo_dispositivo.texto_prefixo_html|safe }}{%if dpt.texto %}{{ dpt.texto|safe }}{%else%}{%if not dpt.tipo_dispositivo.dispositivo_de_articulacao %}&nbsp;{% endif %}{% endif %}</span>
{% if dpt.ta_publicado_id and not dpt.tipo_dispositivo.dispositivo_de_articulacao %}
<a class="nota-alteracao" href="{%url 'compilacao:ta_text' dpt.ta_publicado.pk %}#{{dpt.dispositivo_atualizador_id}}">
{{ dpt.tipo_dispositivo.nota_automatica_prefixo_html|safe }}
{% nota_automatica dpt ta_pub_list %}
{{ dpt.tipo_dispositivo.nota_automatica_sufixo_html|safe }}
</a>
{% else %}
<div class="alert alert-info" role="alert">
{% trans "Dispositivo do Texto Original." %}
</div>
{% endif %}
</div>
</div>
</div>

17
sapl/templates/compilacao/text_edit.html

@ -11,7 +11,7 @@
{% endblock %}
{% block title%}
<h1><b>Edição:</b> {{ view.title }} - <i>{% trans 'Texto Multivigente' %}</i></h1>
<h1>{{object }}. <small><i>{% trans 'Texto Multivigente em Edição' %}</i></small></h1>
{% endblock %}
{% block actions %}
@ -19,20 +19,23 @@
<div class="actions btn-toolbar pull-right" role="toolbar">
<div class="actions btn-group" role="group">
<a href="{% url 'sapl.compilacao:ta_edit' object.pk %}" class="btn btn-default">{% trans 'Editar Metadados do Texto Articulado' %}</a>
{% include 'compilacao/textoarticulado_menu_config.html' %}
</div>
{% include 'compilacao/textoarticulado_menu_config.html' %}
</div>
</div>
{% endblock actions %}
{% block base_content %}{{block.super}}
<div id="message_block"><div id="msg">{% trans 'Aguarde... Atualizando informações!!!'%}</div></div>
<div id="wait_message"><div id="msg">{% trans 'Aguarde... Atualizando informações!!!'%}</div></div>
<div class="cp-notify hide">
<div class="message"></div>
</div>
<div id="modal-message" class="modal fade" tabindex="-1" role="dialog">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="alert" role="alert">
<button type="button" class="close fa-times fa" aria-label="Close"></button>
<div id="message"></div>
@ -42,8 +45,12 @@
</div>
<div class="cp cpe">
{% include 'compilacao/text_edit_bloco.html'%}
{%include 'compilacao/text_edit_bloco.html'%}
</div>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<div class="modal fade" id="modal-help" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
<div class="modal-dialog modal-xs modal-lg" role="document">

232
sapl/templates/compilacao/text_edit_bloco.html

@ -2,141 +2,136 @@
{% load compilacao_filters %}
{% load common_tags %}
{% for dpt in object_list %}
{% if dpt.tipo_dispositivo.dispositivo_de_alteracao and not dpt.tipo_dispositivo.dispositivo_de_articulacao%}
{% else %}
{% if dpt.nivel == view.flag_nivel_old %}
{% dispositivotree dispositivos_list %}
<div class="dpt" id="id{{node.dpt.id}}" pk="{{node.dpt.pk}}" ordem="{{node.dpt.ordem}}" name="{{node.dpt.pk}}" title="{{node.dpt.pk}} - {{node.dpt.ordem}}" formtype="get_form_base">
<div class="dpt-actions"></div>
<div class="dpt-actions-fixed">
<a class="btn-dpt-edit btn btn-default btn-sm" pk="{{node.dpt.pk}}" title=""><span class="deactivate">{% trans 'Editar'%}</span><span class="activate">{% trans 'Em Edição'%}:</span> {{ node.td.nome }} {{ node.dpt.rotulo }}</a>
<div class="btn-group">
<a class="btn-dpt-edit btn btn-warning btn-sm activate" pk="{{node.dpt.pk}}" action="editor-help" data-toggle="modal" data-target="#modal-help"><span class="deactivate"></span><span class="activate"><i class="fa fa-question" aria-hidden="true"></i></span></a>
</div>
{% elif dpt.nivel < view.flag_nivel_old %}
{% close_div view.flag_nivel_old dpt.nivel 0 %}
{% endif%}
<div class="btn-group">
<a class="btn-dpt-edit btn btn-info btn-sm activate" pk="{{node.dpt.pk}}" action="editor-close" title="{% trans 'Fechar Edição' %}"><span class="deactivate"></span><span class="activate"><i class="fa fa-times" aria-hidden="true"></i></span></a>
</div>
{% if not node.dpt.rotulo and not node.dpt.texto and node.td.dispositivo_de_articulacao%}
{% endif %}
</div>
<div class="dpt-text {{node.td.class_css}} {%if node.dpt.fim_vigencia %}desativado{%endif%} {%if not node.filhos and node.td.dispositivo_de_articulacao %}hover-fixed{%endif%}">
{% if node.dpt.auto_inserido and node.da%}
{{ node.dpt.dispositivo_pai.tipo_dispositivo.rotulo_prefixo_html|safe }}
{% if node.da and node in node.da.alts %}
<a class="dpt-link link-rotulo" name="{{node.dpt.pk}}" href="{% url 'sapl.compilacao:ta_text_edit' node.dpt.dispositivo_pai.ta_id %}#{{node.dpt.pk}}" title="{% trans 'Abrir editor deste dispositivo em seu Texto Articulado Original'%}">{{ node.dpt.dispositivo_pai.rotulo }}</a>
{% else %}
<a class="dpt-link link-rotulo" name="{{node.dpt.pk}}">{{ node.dpt.dispositivo_pai.rotulo }}</a>
{% endif %}
{% if forloop.first and view|isinst:'DispositivoSimpleEditView' %}
{% else %}
<div class="dpt" id="dpt{{dpt.pk}}" pk="{{dpt.pk}}">
{% endif%}
{{ node.dpt.dispositivo_pai.tipo_dispositivo.rotulo_sufixo_html|safe }}
{% if view|render_actions_head:dpt %}
<div class="csform">
<form method="post" action="" action_ajax="{{dpt.pk}}/refresh">
<ul class="btns-action actions_top">
{% if not dpt.tipo_dispositivo.dispositivo_de_articulacao %}
<li class="edt-textarea"><a class="btn-top btn-action" pk="{{dpt.pk}}" action="refresh:textarea" title="{% trans 'Edição simples apenas do texto'%}">E</a></li>
<li class="edt-tinymce"><a class="btn-top btn-action" pk="{{dpt.pk}}" action="refresh:tinymce" title="{% trans 'Editar o texto com TinyMCE'%}">E+</a></li>
{%endif%}
<li class="edt-detail"><a class="btn-top" href="{% url 'sapl.compilacao:dispositivo_edit' dpt.ta_id dpt.pk %}" title="{% trans 'Edição Avançada'%}">E*</a></li>
<li class="edt-construct"><a class="btn-top btn-action" pk="{{dpt.pk}}" action="refresh:construct" title="{% trans 'Construçao da estrutura do Texto Articulado'%}">C</a></li>
</ul>
<ul class="btns-action actions_right">
<li><a class="btn-right btn-action" pk="{{dpt.pk}}" action="set_dvt" title="{% trans 'Definir como Dispositivo de Vigência para todos os Dispositivos Originais deste Texto, bem como, dos Textos Anteriores alterados por este Texto!'%}">DVt</a></li>
{% comment %}
<li><a class="btn-right btn-action" pk="{{dpt.pk}}" action="refresh" title="{% trans 'TODO: Reduzir nível do Dispositivo'%}">&#10092;</a></li>
<li><a class="btn-right btn-action" pk="{{dpt.pk}}" action="refresh" title="{% trans 'TODO: Aumentar nível do Dispositivo'%}">&#10093;</a></li>
<li><a class="btn-right btn-action" pk="{{dpt.pk}}" action="refresh" title="{% trans 'TODO: Subir uma posição'%}">&#8593;</a></li>
<li><a class="btn-right btn-action" pk="{{dpt.pk}}" action="refresh" title="{% trans 'TODO: Descer uma posição'%}">&#8595;</a></li>
<li><a class="btn-right btn-action" pk="{{dpt.pk}}" action="refresh" title="{% trans 'TODO: Subir uma posição com todos os subniveis'%}">&#8648;</a></li>
<li><a class="btn-right btn-action" pk="{{dpt.pk}}" action="refresh" title="{% trans 'TODO: Descer uma posição com todos os subniveis'%}">&#8650;</a></li>
{% endcomment %}
</ul>
<ul class="btns-action actions_left">
<li><a href ="{% url 'sapl.compilacao:ta_text' dpt.ta.pk%}#{{dpt.pk}}" class="btn-left btn-action" pk="{{dpt.pk}}" title="{% trans 'Ir para Texto'%}">T</a></li>
</ul>
<ul class="btns-action actions_bottom">
{% for perfil in perfil_estrutural_list%}
<li class="{%if request.session.perfil_estrutural == perfil.pk%}selected{%endif%}"><a class="btn-bottom btn-action" pk="{{dpt.pk}}" perfil_pk="{{perfil.pk}}" action="refresh:perfil" title="{{perfil.nome}}">{{perfil.sigla}}</a></li>
{% endfor %}
</ul>
<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 %}
<li class="{{inserts.action}}"><a class="btn-inserts" action="" pk="{{dpt.pk}}">{{inserts.icone|safe}}<span>{{inserts.tipo_insert}}</span></a>
<ul id="afe{{dpt.id}}" >
{% for item in inserts.itens %}
<li><a class="btn-inserts btn-action" action="{{inserts.action}}" pk="{{item.dispositivo_base}}" variacao="{{item.variacao}}" tipo_pk="{{item.tipo_pk}}">{{item.provavel}}</a></li>
{% endfor %}
</ul>
</li>
{% endif %}
{% endfor %}
{%endif%}
{% if not dpt|is_relative_auto_insert:request %}
<li class="menu_excluir"><a {% if not dpt.dispositivos_filhos_set.exists %}class="btn-excluir btn-action" action="delete_item_dispositivo" pk={{dpt.pk}}{%else%}class="btn-excluir"{%endif%}>&nbsp;<span>Excluir</span></a>
{% if dpt.dispositivos_filhos_set.exists %}
<ul>
<li><a href="#" class="btn-excluir btn-action" action="delete_item_dispositivo" pk={{dpt.pk}}>{% trans 'Excluir apenas este dispositivo'%}</a></li>
<li><a href="#" class="btn-excluir btn-action" action="delete_bloco_dispositivo" pk={{dpt.pk}}>{% trans 'Excluir este dispositivo e toda sua estrutura'%}</a></li>
</ul>
{% endif %}
</li>
{% else %}
{{ node.td.rotulo_prefixo_html|safe }}
{% if node.da and node in node.da.alts %}
<a class="dpt-link link-rotulo" name="{{node.dpt.pk}}" href="{% url 'sapl.compilacao:ta_text_edit' node.dpt.ta_id %}#{{node.dpt.pk}}" title="{% trans 'Abrir editor deste dispositivo em seu Texto Articulado Original'%}">{{ node.dpt.rotulo }}</a>
{% else %}
<a class="dpt-link link-rotulo" name="{{node.dpt.pk}}">{{ node.dpt.rotulo }}</a>
{% endif %}
{{ node.td.rotulo_sufixo_html|safe }}
{% endif %}
{{ node.td.texto_prefixo_html|safe }}
{% if node.da and node in node.da.alts and not node.dpt.visibilidade %}<small>({% trans 'Dispositivo visível apenas no Texto Articulado Original'%})</small>{% endif %}
{% if not node.dpt.texto and not node.td.dispositivo_de_articulacao %}
<span class="semtexto">({{node.td}} sem texto)</span>
{%else%}
{% if node.da and node.dpt.texto_atualizador and node in node.da.alts%}{{ node.dpt.texto_atualizador|safe }}{% else %}{{ node.dpt.texto|safe }}{% endif %}
{%endif%}
{% if node.na %}
<a class="dpt-link nota-alteracao" href="{% url 'compilacao:ta_text_edit' node.da.dpt.ta_id %}#{{node.da.dpt.pk}}" title="{% trans 'Abrir Edição do Dispositivo Alterador'%}">
<small>
{{ node.td.nota_automatica_prefixo_html|safe }}
{{ node.na }}
{{ node.td.nota_automatica_sufixo_html|safe }}
</small>
</a>
{% endif %}
</div>
<div class="dpt-form clearfix"></div>
<div class="dpt-actions-bottom btn-group"></div>
{% if node.alts or node.td.dispositivo_de_alteracao and node.td.dispositivo_de_articulacao %}
<div class="dpt-alts">{{ alts }}</div>
{% endif %}
{% if node.filhos %}
<div class="dpt-block">
{{ filhos }}
</div>
{% endif %}
</div>
{% enddispositivotree %}
<li><a onclick="onSubmitEditForm()" class="btn-salvar">&nbsp<span>Salvar</span></a></li>
</ul>
{% comment %}
<div class="fields">
{% csrf_token %}
{% for item in dispositivos_list %}
{% if not dpt.tipo_dispositivo.dispositivo_de_articulacao %}
<textarea id="editdi_texto" placeholder="{% trans "Insirir o texto do dispositivo aqui... Use, nos menus das bordas de edição, 'E+' ou 'E*' para outras opções de editores."%}" name="texto" rows="7">{{ dpt.texto|safe }}</textarea>
{%endif%}
</div>
<ul class="label_status" >
<li>p: {{dpt.dispositivo_substituido_id|default:''}}</li>
<li>&#8226;</li>
<li>n: {{dpt.dispositivo_subsequente_id|default:''}}</li>
<li>&#8226;</li>
<li>Ordem: {{dpt.ordem}}</li>
<li>&#8226;</li>
<li>Nivel: {{dpt.nivel}}</li>
<li>&#8226;</li>
<li>Número: {{dpt.get_numero_completo}}</li>
<div class="dpt-alts">
{% if item.alts %}
{%with dispositivos_list=item.alts %}
{%include 'compilacao/text_edit_bloco.html'%}
{%endwith%}
{% endif %}
</div>
<<<<<<< d5a8cdb5d563a8353942e0dc3c3b2484bd636ea6:templates/compilacao/text_edit_bloco.html
=======
{% if dpt.dispositivo_vigencia %}
<li>&#8226;</li>
<li>{% field_verbose_name dpt 'dispositivo_vigencia'%}: <a href="{% url 'sapl.compilacao:ta_text_edit' dpt.dispositivo_vigencia.ta_id %}#{{ dpt.dispositivo_vigencia_id }}" action="refresh" pk="{{dpt.dispositivo_vigencia.pk}}" title="{% field_verbose_name dpt 'dispositivo_vigencia'%} {% trans 'em' %}:&#013;{{dpt.dispositivo_vigencia.ta}}">{{dpt.dispositivo_vigencia|nomenclatura}}</a> </li>
{% endif %}
>>>>>>> Fix #497 Encaps apps secundárias dentro app sapl:sapl/templates/compilacao/text_edit_bloco.html
<li>&#8226;</li>
<li><a type="button" data-toggle="modal" data-target="#modal-help">
?
</a>
</li>
</ul>
</div>
<ul class="btns-action actions_parents">
<div>Em Edição:</div>
{%for parent in dpt.get_parents_asc %}
<li><a action="refresh" pk="{{parent.pk}}" ordem="{{parent.ordem}}" name="{{parent.pk}}" title="{{parent.texto|short_string:50}}" class="btn-parents btn-action">{{parent|nomenclatura}}</a></li>
{%endfor %}
<li class="selected"><a action="refresh" pk="{{dpt.pk}}" ordem="{{dpt.ordem}}" name="{{dpt.pk}}" title="{{dpt.texto|short_string:50}}" class="btn-parents btn-action">{{dpt|nomenclatura}}</a></li>
</ul>
</form>
</div>
{% endif%}
{% if view.pk_view == 0 and view.pk_edit == 0 or view.pk_edit != view.pk_view %}
{% if not dpt.rotulo and not dpt.texto and dpt.tipo_dispositivo.dispositivo_de_articulacao%}
<div class="btns-action actions_right">
<a class="btn-edit" pk="{{dpt.pk}}">{% trans 'Editar'%} {{ dpt.tipo_dispositivo.nome }} {{ dpt.rotulo }}</a>
{% endfor%}
{% for dpt in object_list %}
<div class="bloco {{ 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 %}
<<<<<<< d5a8cdb5d563a8353942e0dc3c3b2484bd636ea6:templates/compilacao/text_edit_bloco.html
{% if dpt.ta_publicado_id != None and not dpt.tipo_dispositivo.dispositivo_de_articulacao %}
<a class="nota-alteracao" href="{% url 'compilacao:ta_text_edit' dpt.ta_publicado.pk %}#{{dpt.dispositivo_atualizador_id}}">
{{ dpt.tipo_dispositivo.nota_automatica_prefixo_html|safe }}
{% nota_automatica dpt ta_pub_list %}
{{ dpt.tipo_dispositivo.nota_automatica_sufixo_html|safe }}
</a>
{% endif %}
{% endspaceless %}
=======
<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 'sapl.compilacao:ta_text_edit' dpt.ta_publicado.pk %}#{{dpt.dispositivo_atualizador_id}}">
<a class="nota-alteracao" href="{% url 'sapl.compilacao:ta_text_edit' dpt.ta_publicado.pk %}#{{dpt.dispositivo_atualizador_id}}">
{{ dpt.tipo_dispositivo.nota_automatica_prefixo_html|safe }}
{% nota_automatica dpt ta_pub_list %}
{{ dpt.tipo_dispositivo.nota_automatica_sufixo_html|safe }}
@ -150,13 +145,14 @@
{% endif%}
</div>
{% endif%}
>>>>>>> Fix #497 Encaps apps secundárias dentro app sapl:sapl/templates/compilacao/text_edit_bloco.html
{% set_nivel_old view dpt.nivel %}
{% endif%}
{% endfor %}
{% if dpt.tipo_dispositivo.dispositivo_de_alteracao %}
{%with node=dpt template_name='compilacao/text_edit_blocoalteracao.html' %}
{%include template_name%}
{%endwith%}
{% endif%}
{% if view|isinst:'DispositivoSimpleEditView' %}
{% close_div view.flag_nivel_old view.flag_nivel_ini -1 %}
{% else %}
{% close_div view.flag_nivel_old view.flag_nivel_ini 0 %}
{% endif%}
</div>
{% endfor %}
{% endcomment %}

6
sapl/templates/compilacao/text_edit_blocoalteracao.html

@ -2,9 +2,11 @@
{% load common_tags %}
{% for ch in dpt.pk|get_bloco_atualizador %}
{% spaceless %}
<div class="dpt" id="d{{ch.id}}" pk="{{ch.id}}" >
<div class="dpt" id="dpt{{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 'sapl.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 class="de-compilacao" id="id{{ch.id}}" pk="{{ch.pk}}" ordem="{{ch.ordem}}" name="{{ch.pk}}" title="{{ch.pk}} - {{ch.ordem}}">
{{ ch.tipo_dispositivo.rotulo_prefixo_html|safe }}<a name="{{ch.pk}}" href="{% url 'sapl.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>
{% endspaceless %}

1
sapl/templates/compilacao/text_list.html

@ -72,6 +72,7 @@
{% else %}
<li class="{% if values.inicio_vigencia.year == key %}active{% endif %}"><a data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false">{{ key }}</a>
<ul class="dropdown-menu">
<div class="arrow top"></div>
{% for dispositivo in values %}
<li>
{% if not forloop.parentloop.first %}

16
sapl/templates/compilacao/text_list_bloco.html

@ -19,12 +19,20 @@
{% spaceless %}
<div class="{{ dpt.tipo_dispositivo.class_css }}">
<div class="dptt {% dispositivo_desativado dpt view.inicio_vigencia view.fim_vigencia %}" id="dptt{{dpt.pk}}" >
{{ dpt.tipo_dispositivo.rotulo_prefixo_html|safe }}
<a name="{{dpt.pk}}" title="{{dpt.pk}}">{{ dpt.rotulo }}</a>
{{ dpt.tipo_dispositivo.rotulo_sufixo_html|safe }}
{% if not dpt.tipo_dispositivo.dispositivo_de_articulacao %}
{% if dpt.auto_inserido %}
{{ dpt.dispositivo_pai.tipo_dispositivo.rotulo_prefixo_html|safe }}
<a class="dpt-link" name="{{dpt.pk}}">{{ dpt.dispositivo_pai.rotulo }}</a>
{{ dpt.dispositivo_pai.tipo_dispositivo.rotulo_sufixo_html|safe }}
{% else %}
{{ dpt.tipo_dispositivo.rotulo_prefixo_html|safe }}
<a class="dpt-link" name="{{dpt.pk}}" title="{{dpt.pk}}">{{ dpt.rotulo }}</a>
{{ dpt.tipo_dispositivo.rotulo_sufixo_html|safe }}
{% endif %}
{% endif %}
<span class="dtxt" id="d{% if not dpt.dispositivo_subsequente_id and dpt.dispositivo_substituido_id %}a{% endif %}{{dpt.pk}}" pks="{{dpt.dispositivo_substituido_id|default:''}}" pk="{{dpt.pk}}">{{ dpt.tipo_dispositivo.texto_prefixo_html|safe }}{%if dpt.texto %}{{ dpt.texto|safe }}{%else%}{%if not dpt.tipo_dispositivo.dispositivo_de_articulacao %}&nbsp;{% endif %}{% endif %}</span>
{% if dpt.ta_publicado_id and not dpt.tipo_dispositivo.dispositivo_de_articulacao %}
<a class="link_alterador" href="{% url 'sapl.compilacao:ta_text' dpt.ta_publicado.pk %}#{{dpt.dispositivo_atualizador_id}}">
<a class="nota-alteracao" href="{%url 'sapl.compilacao:ta_text' dpt.ta_publicado.pk %}#{{dpt.dispositivo_atualizador_id}}">
{{ dpt.tipo_dispositivo.nota_automatica_prefixo_html|safe }}
{% nota_automatica dpt ta_pub_list %}
{{ dpt.tipo_dispositivo.nota_automatica_sufixo_html|safe }}

16
sapl/templates/compilacao/text_list_blocoalteracao.html

@ -3,11 +3,19 @@
{% for ch in dpt.pk|get_bloco_atualizador %}
{% spaceless %}
{% if ch.visibilidade %}
<div class="dpt" id="d{{ch.id}}" nivel="{{ch.nivel}}">
<div class="{{ ch.tipo_dispositivo.class_css }}" id="id{{ch.id}}" nivel="{{ch.nivel}}">
{{ ch.tipo_dispositivo.rotulo_prefixo_html|safe }}<a name="{{ch.pk}}" href="{% url 'sapl.compilacao:ta_text' 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 class="dpt" id="d{{ch.id}}" nivel="{{ch.nivel}}">
<div class="{{ ch.tipo_dispositivo.class_css }}" id="id{{ch.id}}" nivel="{{ch.nivel}}">
{% if ch.auto_inserido %}
{{ ch.dispositivo_pai.tipo_dispositivo.rotulo_prefixo_html|safe }}
<a name="{{ch.dispositivo_pai.pk}}" href="{% url 'sapl.compilacao:ta_text' ch.dispositivo_pai.ta.pk %}#{{ch.dispositivo_pai.pk}}">{{ ch.dispositivo_pai.rotulo }}</a>
{{ ch.dispositivo_pai.tipo_dispositivo.rotulo_sufixo_html|safe }}
{% endif %}
{{ ch.tipo_dispositivo.rotulo_prefixo_html|safe }}
<a name="{{ch.pk}}" href="{% url 'sapl.compilacao:ta_text' 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>
{%endif%}
{% endspaceless %}
{% endfor %}

13
sapl/templates/compilacao/text_notificacoes.html

@ -5,10 +5,10 @@
{% block head_content %}{{block.super}}
<link rel="stylesheet" href="{% sass_src 'styles/compilacao.scss' %}" type="text/css">
{% endblock %}
{% crispy form %}
<table class="table table-striped table-hover table-notificacoes">
<thead>
<tr>
@ -30,6 +30,13 @@
id="d{% if not dpt.dispositivo_subsequente_id and dpt.dispositivo_substituido_id %}a{% endif %}{{dpt.pk}}"
pks="{{dpt.dispositivo_substituido_id|default:''}}"
pk="{{dpt.pk}}">{{ dpt.tipo_dispositivo.texto_prefixo_html|safe }}{%if dpt.texto %}{{ dpt.texto|safe }}{%else%}{%if not dpt.tipo_dispositivo.dispositivo_de_articulacao %}&nbsp;{% endif %}{% endif %}</span>
{%if dpt.ta_publicado_id %}
<a class="nota-alteracao clearfix" href="{%url 'compilacao:ta_text' dpt.ta_publicado.pk %}#{{dpt.dispositivo_atualizador_id}}">
{{ dpt.tipo_dispositivo.nota_automatica_prefixo_html|safe }}
{% nota_automatica dpt None %}
{{ dpt.tipo_dispositivo.nota_automatica_sufixo_html|safe }}</a>
{%endif%}
</div>
</div>
</div>

1
sapl/templates/compilacao/textoarticulado_detail.html

@ -72,7 +72,6 @@
</div>
</div>
</div>
<br>
<div class="row">
<div class="col-md-12">
<div id="div_id_ementa" class="holder">

2
sapl/templates/compilacao/textoarticulado_menu_config.html

@ -1,6 +1,5 @@
{% load i18n %}
{% load common_tags %}
<div class="btn-group" role="group">
<button type="button" class="btn btn-danger dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<i class="fa fa-cog fa-1x fa-fw"></i>
</button>
@ -13,4 +12,3 @@
<li><a href="#">TODO: Tipo de Dispositivo</a></li>
<li><a href="#">TODO: Perfil Estrutural de Textos Articulados</a></li>
</ul>
</div>

Loading…
Cancel
Save