diff --git a/agenda/migrations/0001_initial.py b/agenda/migrations/0001_initial.py index 19518ab5..f182c679 100644 --- a/agenda/migrations/0001_initial.py +++ b/agenda/migrations/0001_initial.py @@ -1,9 +1,10 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.10.7 on 2017-08-24 19:01 +# Generated by Django 1.11.15 on 2020-05-02 23:55 from __future__ import unicode_literals from django.db import migrations, models import django.db.models.deletion +import django.db.models.manager class Migration(migrations.Migration): @@ -20,13 +21,23 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('date', models.DateTimeField()), - ('url', models.URLField()), - ('location', models.CharField(max_length=1024)), - ('description', models.TextField(blank=True)), + ('url', models.URLField(blank=True, null=True)), + ('location', models.TextField(blank=True)), + ('description', models.CharField(blank=True, max_length=1024)), + ('long_description', models.TextField(blank=True)), + ('contact_info', models.TextField(help_text='Aqu\xed puedes escribir un n\xfamero telef\xf3nico, un email o un whatsapp.', verbose_name='C\xf3mo te pueden contactar las personas interesadas?')), + ('important', models.BooleanField(default=False, verbose_name='Es este evento importante?')), + ('background_image', models.ImageField(blank=True, help_text='ser\xe1 la imagen que utilicemos en la lista de eventos', null=True, upload_to='agenda/activities/', verbose_name='Una imagen para el evento')), ('updated', models.DateTimeField(auto_now_add=True)), ('created', models.DateTimeField(auto_now=True)), ('object_id', models.CharField(blank=True, max_length=1024, null=True)), ('content_type', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType')), ], + options={ + 'ordering': ['date'], + }, + managers=[ + ('futures', django.db.models.manager.Manager()), + ], ), ] diff --git a/agenda/migrations/0002_auto_20180502_1434.py b/agenda/migrations/0002_auto_20180502_1434.py deleted file mode 100644 index f5ee978a..00000000 --- a/agenda/migrations/0002_auto_20180502_1434.py +++ /dev/null @@ -1,34 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.9 on 2018-05-02 14:34 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('agenda', '0001_initial'), - ] - - operations = [ - migrations.AlterModelOptions( - name='activity', - options={'ordering': ['-date']}, - ), - migrations.AddField( - model_name='activity', - name='background_image', - field=models.ImageField(blank=True, help_text='ser\xe1 la imagen que utilicemos en la lista de eventos', null=True, upload_to='agenda/activities/', verbose_name='Una imagen para el evento'), - ), - migrations.AlterField( - model_name='activity', - name='description', - field=models.CharField(blank=True, max_length=1024), - ), - migrations.AlterField( - model_name='activity', - name='url', - field=models.URLField(blank=True, null=True), - ), - ] diff --git a/agenda/migrations/0003_activity_long_description.py b/agenda/migrations/0003_activity_long_description.py deleted file mode 100644 index bc0ee60a..00000000 --- a/agenda/migrations/0003_activity_long_description.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.9 on 2018-05-02 21:12 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('agenda', '0002_auto_20180502_1434'), - ] - - operations = [ - migrations.AddField( - model_name='activity', - name='long_description', - field=models.TextField(blank=True), - ), - ] diff --git a/agenda/migrations/0004_auto_20180525_1552.py b/agenda/migrations/0004_auto_20180525_1552.py deleted file mode 100644 index b51ca906..00000000 --- a/agenda/migrations/0004_auto_20180525_1552.py +++ /dev/null @@ -1,38 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.9 on 2018-05-25 15:52 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.manager - - -class Migration(migrations.Migration): - - dependencies = [ - ('agenda', '0003_activity_long_description'), - ] - - operations = [ - migrations.AlterModelManagers( - name='activity', - managers=[ - ('futures', django.db.models.manager.Manager()), - ], - ), - migrations.AddField( - model_name='activity', - name='contact_info', - field=models.TextField(default='Contact info', help_text='Aqu\xed puedes escribir un n\xfamero telef\xf3nico, un email o un whatsapp.', verbose_name='C\xf3mo te pueden contactar las personas interesadas?'), - preserve_default=False, - ), - migrations.AddField( - model_name='activity', - name='important', - field=models.BooleanField(default=False, verbose_name='Es este evento importante?'), - ), - migrations.AlterField( - model_name='activity', - name='location', - field=models.TextField(blank=True), - ), - ] diff --git a/agenda/migrations/0005_auto_20180905_1922.py b/agenda/migrations/0005_auto_20180905_1922.py deleted file mode 100644 index 593192ef..00000000 --- a/agenda/migrations/0005_auto_20180905_1922.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.9 on 2018-09-05 19:22 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('agenda', '0004_auto_20180525_1552'), - ] - - operations = [ - migrations.AlterModelOptions( - name='activity', - options={'ordering': ['date']}, - ), - ] diff --git a/areas_cariocas_elecao_2018.yaml b/areas_cariocas_elecao_2018.yaml deleted file mode 100644 index 6d6fd580..00000000 --- a/areas_cariocas_elecao_2018.yaml +++ /dev/null @@ -1,481 +0,0 @@ -- model: popolo.area - pk: '1' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.596281+00:00', - updated_at: ! '2018-05-09 15:17:01.629994+00:00', name: Rio de Janeiro, identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '1'} -- model: popolo.area - pk: '10' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.684091+00:00', - updated_at: ! '2018-05-09 15:17:01.687682+00:00', name: Volta Redonda, identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '10'} -- model: popolo.area - pk: '11' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.690390+00:00', - updated_at: ! '2018-05-09 15:17:01.694113+00:00', name: "Mag\xE9", identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '11'} -- model: popolo.area - pk: '12' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.696518+00:00', - updated_at: ! '2018-05-09 15:17:01.700130+00:00', name: "Itabora\xED", identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '12'} -- model: popolo.area - pk: '13' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.702624+00:00', - updated_at: ! '2018-05-09 15:17:01.706032+00:00', name: Nova Friburgo, identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '13'} -- model: popolo.area - pk: '14' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.708383+00:00', - updated_at: ! '2018-05-09 15:17:01.711882+00:00', name: "Maca\xE9", identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '14'} -- model: popolo.area - pk: '15' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.714241+00:00', - updated_at: ! '2018-05-09 15:17:01.717869+00:00', name: Cabo Frio, identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '15'} -- model: popolo.area - pk: '16' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.720208+00:00', - updated_at: ! '2018-05-09 15:17:01.723635+00:00', name: Angra dos Reis, identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '16'} -- model: popolo.area - pk: '17' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.725877+00:00', - updated_at: ! '2018-05-09 15:17:01.729367+00:00', name: Barra Mansa, identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '17'} -- model: popolo.area - pk: '18' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.731750+00:00', - updated_at: ! '2018-05-09 15:17:01.735262+00:00', name: Mesquita, identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '18'} -- model: popolo.area - pk: '19' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.737639+00:00', - updated_at: ! '2018-05-09 15:17:01.741104+00:00', name: "Teres\xF3polis", identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '19'} -- model: popolo.area - pk: '2' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.634076+00:00', - updated_at: ! '2018-05-09 15:17:01.637887+00:00', name: "S\xE3o Gon\xE7alo", identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '2'} -- model: popolo.area - pk: '20' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.743439+00:00', - updated_at: ! '2018-05-09 15:17:01.747036+00:00', name: "Nil\xF3polis", identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '20'} -- model: popolo.area - pk: '21' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.749399+00:00', - updated_at: ! '2018-05-09 15:17:01.752833+00:00', name: "Maric\xE1", identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '21'} -- model: popolo.area - pk: '22' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.755225+00:00', - updated_at: ! '2018-05-09 15:17:01.758617+00:00', name: Queimados, identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '22'} -- model: popolo.area - pk: '23' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.761015+00:00', - updated_at: ! '2018-05-09 15:17:01.764619+00:00', name: Rio das Ostras, identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '23'} -- model: popolo.area - pk: '24' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.766873+00:00', - updated_at: ! '2018-05-09 15:17:01.770174+00:00', name: Resende, identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '24'} -- model: popolo.area - pk: '25' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.772556+00:00', - updated_at: ! '2018-05-09 15:17:01.776351+00:00', name: Araruama, identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '25'} -- model: popolo.area - pk: '26' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.778802+00:00', - updated_at: ! '2018-05-09 15:17:01.782299+00:00', name: "Itagua\xED", identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '26'} -- model: popolo.area - pk: '27' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.784557+00:00', - updated_at: ! '2018-05-09 15:17:01.788196+00:00', name: Japeri, identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '27'} -- model: popolo.area - pk: '28' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.790879+00:00', - updated_at: ! '2018-05-09 15:17:01.794352+00:00', name: Itaperuna, identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '28'} -- model: popolo.area - pk: '29' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.796678+00:00', - updated_at: ! '2018-05-09 15:17:01.800152+00:00', name: "S\xE3o Pedro da Aldeia", - identifier: '', classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, - slug: '29'} -- model: popolo.area - pk: '3' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.640413+00:00', - updated_at: ! '2018-05-09 15:17:01.643913+00:00', name: Duque de Caxias, identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '3'} -- model: popolo.area - pk: '30' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.802700+00:00', - updated_at: ! '2018-05-09 15:17:01.806376+00:00', name: "Barra do Pira\xED", identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '30'} -- model: popolo.area - pk: '31' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.808843+00:00', - updated_at: ! '2018-05-09 15:17:01.812410+00:00', name: "Serop\xE9dica", identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '31'} -- model: popolo.area - pk: '32' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.814736+00:00', - updated_at: ! '2018-05-09 15:17:01.818168+00:00', name: Saquarema, identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '32'} -- model: popolo.area - pk: '33' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.820524+00:00', - updated_at: ! '2018-05-09 15:17:01.824002+00:00', name: "Tr\xEAs Rios", identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '33'} -- model: popolo.area - pk: '34' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.826308+00:00', - updated_at: ! '2018-05-09 15:17:01.829716+00:00', name: "Valen\xE7a", identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '34'} -- model: popolo.area - pk: '35' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.832745+00:00', - updated_at: ! '2018-05-09 15:17:01.836581+00:00', name: Rio Bonito, identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '35'} -- model: popolo.area - pk: '36' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.839038+00:00', - updated_at: ! '2018-05-09 15:17:01.842603+00:00', name: Guapimirim, identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '36'} -- model: popolo.area - pk: '37' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.845007+00:00', - updated_at: ! '2018-05-09 15:17:01.848739+00:00', name: Cachoeiras de Macacu, - identifier: '', classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, - slug: '37'} -- model: popolo.area - pk: '38' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.851580+00:00', - updated_at: ! '2018-05-09 15:17:01.855079+00:00', name: Paracambi, identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '38'} -- model: popolo.area - pk: '39' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.857443+00:00', - updated_at: ! '2018-05-09 15:17:01.860772+00:00', name: "Para\xEDba do Sul", identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '39'} -- model: popolo.area - pk: '4' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.646468+00:00', - updated_at: ! '2018-05-09 15:17:01.650025+00:00', name: "Nova Igua\xE7u", identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '4'} -- model: popolo.area - pk: '40' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.863154+00:00', - updated_at: ! '2018-05-09 15:17:01.866662+00:00', name: "S\xE3o Francisco de Itabapoana", - identifier: '', classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, - slug: '40'} -- model: popolo.area - pk: '41' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.868877+00:00', - updated_at: ! '2018-05-09 15:17:01.872116+00:00', name: "Santo Ant\xF4nio de P\xE1dua", - identifier: '', classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, - slug: '41'} -- model: popolo.area - pk: '42' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.874669+00:00', - updated_at: ! '2018-05-09 15:17:01.877967+00:00', name: Mangaratiba, identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '42'} -- model: popolo.area - pk: '43' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.880245+00:00', - updated_at: ! '2018-05-09 15:17:01.883698+00:00', name: Paraty, identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '43'} -- model: popolo.area - pk: '44' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.885929+00:00', - updated_at: ! '2018-05-09 15:17:01.889135+00:00', name: Casimiro de Abreu, identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '44'} -- model: popolo.area - pk: '45' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.891271+00:00', - updated_at: ! '2018-05-09 15:17:01.894527+00:00', name: "S\xE3o Fid\xE9lis", identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '45'} -- model: popolo.area - pk: '46' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.896938+00:00', - updated_at: ! '2018-05-09 15:17:01.900231+00:00', name: Bom Jesus do Itabapoana, - identifier: '', classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, - slug: '46'} -- model: popolo.area - pk: '47' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.902701+00:00', - updated_at: ! '2018-05-09 15:17:01.906372+00:00', name: Vassouras, identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '47'} -- model: popolo.area - pk: '48' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.908744+00:00', - updated_at: ! '2018-05-09 15:17:01.912124+00:00', name: "S\xE3o Jo\xE3o da Barra", - identifier: '', classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, - slug: '48'} -- model: popolo.area - pk: '49' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.914682+00:00', - updated_at: ! '2018-05-09 15:17:01.918570+00:00', name: "Tangu\xE1", identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '49'} -- model: popolo.area - pk: '5' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.652558+00:00', - updated_at: ! '2018-05-09 15:17:01.656246+00:00', name: "Niter\xF3i", identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '5'} -- model: popolo.area - pk: '50' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.920778+00:00', - updated_at: ! '2018-05-09 15:17:01.924357+00:00', name: "Arma\xE7\xE3o dos B\xFAzios", - identifier: '', classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, - slug: '50'} -- model: popolo.area - pk: '51' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.926625+00:00', - updated_at: ! '2018-05-09 15:17:01.930097+00:00', name: Itatiaia, identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '51'} -- model: popolo.area - pk: '52' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.932384+00:00', - updated_at: ! '2018-05-09 15:17:01.935672+00:00', name: Arraial do Cabo, identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '52'} -- model: popolo.area - pk: '53' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.937890+00:00', - updated_at: ! '2018-05-09 15:17:01.941064+00:00', name: "Concei\xE7\xE3o de Macabu", - identifier: '', classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, - slug: '53'} -- model: popolo.area - pk: '54' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.943488+00:00', - updated_at: ! '2018-05-09 15:17:01.947256+00:00', name: "Pira\xED", identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '54'} -- model: popolo.area - pk: '55' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.949669+00:00', - updated_at: ! '2018-05-09 15:17:01.952936+00:00', name: Paty do Alferes, identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '55'} -- model: popolo.area - pk: '56' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.955174+00:00', - updated_at: ! '2018-05-09 15:17:01.959013+00:00', name: Miracema, identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '56'} -- model: popolo.area - pk: '57' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.961814+00:00', - updated_at: ! '2018-05-09 15:17:01.965219+00:00', name: Bom Jardim, identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '57'} -- model: popolo.area - pk: '58' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.967745+00:00', - updated_at: ! '2018-05-09 15:17:01.971867+00:00', name: Iguaba Grande, identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '58'} -- model: popolo.area - pk: '59' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.974318+00:00', - updated_at: ! '2018-05-09 15:17:01.978214+00:00', name: Miguel Pereira, identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '59'} -- model: popolo.area - pk: '6' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.659036+00:00', - updated_at: ! '2018-05-09 15:17:01.663078+00:00', name: "S\xE3o Jo\xE3o de Meriti", - identifier: '', classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, - slug: '6'} -- model: popolo.area - pk: '60' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.980726+00:00', - updated_at: ! '2018-05-09 15:17:01.984132+00:00', name: Pinheiral, identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '60'} -- model: popolo.area - pk: '61' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.986467+00:00', - updated_at: ! '2018-05-09 15:17:01.990912+00:00', name: Itaocara, identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '61'} -- model: popolo.area - pk: '62' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.994023+00:00', - updated_at: ! '2018-05-09 15:17:01.997483+00:00', name: Silva Jardim, identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '62'} -- model: popolo.area - pk: '63' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.999970+00:00', - updated_at: ! '2018-05-09 15:17:02.006820+00:00', name: Cordeiro, identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '63'} -- model: popolo.area - pk: '64' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:02.009779+00:00', - updated_at: ! '2018-05-09 15:17:02.013674+00:00', name: "S\xE3o Jos\xE9 do Vale - do Rio Preto", identifier: '', classification: "munic\xEDpio", parent: rj, geom: null, - inhabitants: null, slug: '64'} -- model: popolo.area - pk: '65' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:02.016113+00:00', - updated_at: ! '2018-05-09 15:17:02.019585+00:00', name: "Quissam\xE3", identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '65'} -- model: popolo.area - pk: '66' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:02.021913+00:00', - updated_at: ! '2018-05-09 15:17:02.025405+00:00', name: Cantagalo, identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '66'} -- model: popolo.area - pk: '67' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:02.028155+00:00', - updated_at: ! '2018-05-09 15:17:02.031827+00:00', name: Porto Real, identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '67'} -- model: popolo.area - pk: '68' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:02.034224+00:00', - updated_at: ! '2018-05-09 15:17:02.037669+00:00', name: Carmo, identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '68'} -- model: popolo.area - pk: '69' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:02.040467+00:00', - updated_at: ! '2018-05-09 15:17:02.043868+00:00', name: Mendes, identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '69'} -- model: popolo.area - pk: '7' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.665585+00:00', - updated_at: ! '2018-05-09 15:17:01.669065+00:00', name: Belford Roxo, identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '7'} -- model: popolo.area - pk: '70' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:02.046271+00:00', - updated_at: ! '2018-05-09 15:17:02.049694+00:00', name: "Porci\xFAncula", identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '70'} -- model: popolo.area - pk: '71' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:02.052112+00:00', - updated_at: ! '2018-05-09 15:17:02.055631+00:00', name: Rio Claro, identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '71'} -- model: popolo.area - pk: '72' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:02.058183+00:00', - updated_at: ! '2018-05-09 15:17:02.061713+00:00', name: Sapucaia, identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '72'} -- model: popolo.area - pk: '73' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:02.063938+00:00', - updated_at: ! '2018-05-09 15:17:02.067181+00:00', name: Sumidouro, identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '73'} -- model: popolo.area - pk: '74' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:02.069446+00:00', - updated_at: ! '2018-05-09 15:17:02.074141+00:00', name: Natividade, identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '74'} -- model: popolo.area - pk: '75' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:02.076461+00:00', - updated_at: ! '2018-05-09 15:17:02.079887+00:00', name: Carapebus, identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '75'} -- model: popolo.area - pk: '76' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:02.082289+00:00', - updated_at: ! '2018-05-09 15:17:02.085791+00:00', name: Cambuci, identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '76'} -- model: popolo.area - pk: '77' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:02.088532+00:00', - updated_at: ! '2018-05-09 15:17:02.092816+00:00', name: Italva, identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '77'} -- model: popolo.area - pk: '78' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:02.095172+00:00', - updated_at: ! '2018-05-09 15:17:02.098532+00:00', name: Engenheiro Paulo de Frontin, - identifier: '', classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, - slug: '78'} -- model: popolo.area - pk: '79' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:02.100854+00:00', - updated_at: ! '2018-05-09 15:17:02.104594+00:00', name: Quatis, identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '79'} -- model: popolo.area - pk: '8' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.671615+00:00', - updated_at: ! '2018-05-09 15:17:01.675374+00:00', name: Campos dos Goytacazes, - identifier: '', classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, - slug: '8'} -- model: popolo.area - pk: '80' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:02.107052+00:00', - updated_at: ! '2018-05-09 15:17:02.110436+00:00', name: Cardoso Moreira, identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '80'} -- model: popolo.area - pk: '81' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:02.112801+00:00', - updated_at: ! '2018-05-09 15:17:02.116655+00:00', name: Areal, identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '81'} -- model: popolo.area - pk: '82' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:02.119212+00:00', - updated_at: ! '2018-05-09 15:17:02.122625+00:00', name: Duas Barras, identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '82'} -- model: popolo.area - pk: '83' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:02.124958+00:00', - updated_at: ! '2018-05-09 15:17:02.128534+00:00', name: "Aperib\xE9", identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '83'} -- model: popolo.area - pk: '84' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:02.130820+00:00', - updated_at: ! '2018-05-09 15:17:02.134335+00:00', name: Varre-Sai, identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '84'} -- model: popolo.area - pk: '85' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:02.136745+00:00', - updated_at: ! '2018-05-09 15:17:02.140229+00:00', name: Trajano de Moraes, identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '85'} -- model: popolo.area - pk: '86' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:02.142499+00:00', - updated_at: ! '2018-05-09 15:17:02.146346+00:00', name: Santa Maria Madalena, - identifier: '', classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, - slug: '86'} -- model: popolo.area - pk: '87' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:02.148822+00:00', - updated_at: ! '2018-05-09 15:17:02.154367+00:00', name: "S\xE3o Sebasti\xE3o do - Alto", identifier: '', classification: "munic\xEDpio", parent: rj, geom: null, - inhabitants: null, slug: '87'} -- model: popolo.area - pk: '88' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:02.156809+00:00', - updated_at: ! '2018-05-09 15:17:02.160259+00:00', name: Rio das Flores, identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '88'} -- model: popolo.area - pk: '89' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:02.162787+00:00', - updated_at: ! '2018-05-09 15:17:02.166244+00:00', name: Comendador Levy Gasparian, - identifier: '', classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, - slug: '89'} -- model: popolo.area - pk: '9' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:01.678091+00:00', - updated_at: ! '2018-05-09 15:17:01.681571+00:00', name: "Petr\xF3polis", identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '9'} -- model: popolo.area - pk: '90' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:02.168641+00:00', - updated_at: ! '2018-05-09 15:17:02.172482+00:00', name: "Laje do Muria\xE9", identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '90'} -- model: popolo.area - pk: '91' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:02.175012+00:00', - updated_at: ! '2018-05-09 15:17:02.178725+00:00', name: "S\xE3o Jos\xE9 de Ub\xE1", - identifier: '', classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, - slug: '91'} -- model: popolo.area - pk: '92' - fields: {start_date: null, end_date: null, created_at: ! '2018-05-09 15:17:02.181086+00:00', - updated_at: ! '2018-05-09 15:17:02.184782+00:00', name: Macuco, identifier: '', - classification: "munic\xEDpio", parent: rj, geom: null, inhabitants: null, slug: '92'} -- model: popolo.area - pk: rj - fields: {start_date: null, end_date: null, created_at: ! '2018-04-16 17:26:16.160741+00:00', - updated_at: ! '2018-04-16 17:28:41.950889+00:00', name: Rio de Janeiro, identifier: RJ, - classification: estado, parent: null, geom: '', inhabitants: null, slug: area} diff --git a/backend_candidate/migrations/0001_initial.py b/backend_candidate/migrations/0001_initial.py index 291caf26..5d6bd194 100644 --- a/backend_candidate/migrations/0001_initial.py +++ b/backend_candidate/migrations/0001_initial.py @@ -1,10 +1,11 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-07-01 21:03 +# Generated by Django 1.11.15 on 2020-05-02 23:55 from __future__ import unicode_literals from django.conf import settings from django.db import migrations, models import django.db.models.deletion +import uuid class Migration(migrations.Migration): @@ -12,8 +13,8 @@ class Migration(migrations.Migration): initial = True dependencies = [ + ('elections', '0001_initial'), migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('elections', '0025_auto_20160701_1735'), ] operations = [ @@ -24,7 +25,21 @@ class Migration(migrations.Migration): ('created', models.DateTimeField(auto_now_add=True, null=True)), ('updated', models.DateTimeField(auto_now=True, null=True)), ('candidate', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='elections.Candidate')), - ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='candidacies', to=settings.AUTH_USER_MODEL)), + ], + ), + migrations.CreateModel( + name='CandidacyContact', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('mail', models.EmailField(max_length=254)), + ('times_email_has_been_sent', models.IntegerField(default=0)), + ('used_by_candidate', models.BooleanField(default=False)), + ('identifier', models.UUIDField(default=uuid.uuid4)), + ('initial_password', models.CharField(blank=True, max_length=255)), + ('candidacy', models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.CASCADE, to='backend_candidate.Candidacy')), + ('candidate', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='contacts', to='elections.Candidate')), + ('user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='candidacy_contact', to=settings.AUTH_USER_MODEL)), ], ), ] diff --git a/backend_candidate/migrations/0002_auto_20160801_1531.py b/backend_candidate/migrations/0002_auto_20160801_1531.py deleted file mode 100644 index 976fbc92..00000000 --- a/backend_candidate/migrations/0002_auto_20160801_1531.py +++ /dev/null @@ -1,33 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-08-01 15:31 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('elections', '0025_auto_20160701_1735'), - ('backend_candidate', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='CandidacyContact', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('mail', models.EmailField(max_length=254)), - ('times_email_has_been_sent', models.IntegerField(default=0)), - ('used_by_candidate', models.BooleanField(default=False)), - ('candidate', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='contacts', to='elections.Candidate')), - ], - ), - migrations.AlterField( - model_name='candidacy', - name='user', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='candidacies', to=settings.AUTH_USER_MODEL), - ), - ] diff --git a/backend_candidate/migrations/0003_auto_20160801_1637.py b/backend_candidate/migrations/0003_auto_20160801_1637.py deleted file mode 100644 index 1ee0518c..00000000 --- a/backend_candidate/migrations/0003_auto_20160801_1637.py +++ /dev/null @@ -1,27 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-08-01 16:37 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion -import uuid - - -class Migration(migrations.Migration): - - dependencies = [ - ('backend_candidate', '0002_auto_20160801_1531'), - ] - - operations = [ - migrations.AddField( - model_name='candidacycontact', - name='candidacy', - field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.CASCADE, to='backend_candidate.Candidacy'), - ), - migrations.AddField( - model_name='candidacycontact', - name='identifier', - field=models.UUIDField(default=uuid.uuid4), - ), - ] diff --git a/backend_candidate/migrations/0004_candidacycontact_initial_password.py b/backend_candidate/migrations/0004_candidacycontact_initial_password.py deleted file mode 100644 index 29b63500..00000000 --- a/backend_candidate/migrations/0004_candidacycontact_initial_password.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-08-05 19:45 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('backend_candidate', '0003_auto_20160801_1637'), - ] - - operations = [ - migrations.AddField( - model_name='candidacycontact', - name='initial_password', - field=models.CharField(blank=True, max_length=255), - ), - ] diff --git a/backend_candidate/migrations/0005_auto_20171005_2216.py b/backend_candidate/migrations/0005_auto_20171005_2216.py deleted file mode 100644 index 359a9b44..00000000 --- a/backend_candidate/migrations/0005_auto_20171005_2216.py +++ /dev/null @@ -1,46 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.7 on 2017-10-05 22:16 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion -import picklefield.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('popular_proposal', '0027_auto_20170914_1841'), - ('backend_candidate', '0004_candidacycontact_initial_password'), - ] - - operations = [ - migrations.CreateModel( - name='IncrementalsCandidateFilter', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(blank=True, max_length=12288, null=True)), - ('text', models.TextField()), - ('filter_qs', picklefield.fields.PickledObjectField(editable=False)), - ('exclude_qs', picklefield.fields.PickledObjectField(editable=False)), - ], - options={ - 'verbose_name': 'Filtro de propuestas para candidatos', - 'verbose_name_plural': 'Filtros de propuestas para candidatos', - }, - ), - migrations.CreateModel( - name='ProposalSuggestionForIncremental', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('sent', models.BooleanField(default=False)), - ('incremental', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='suggestions', to='backend_candidate.IncrementalsCandidateFilter')), - ('proposal', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='suggested_proposals', to='popular_proposal.PopularProposal')), - ], - ), - migrations.AddField( - model_name='incrementalscandidatefilter', - name='suggested_proposals', - field=models.ManyToManyField(through='backend_candidate.ProposalSuggestionForIncremental', to='popular_proposal.PopularProposal'), - ), - ] diff --git a/backend_candidate/migrations/0006_proposalsuggestionforincremental_summary.py b/backend_candidate/migrations/0006_proposalsuggestionforincremental_summary.py deleted file mode 100644 index 9a47c263..00000000 --- a/backend_candidate/migrations/0006_proposalsuggestionforincremental_summary.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.7 on 2017-10-23 17:59 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('backend_candidate', '0005_auto_20171005_2216'), - ] - - operations = [ - migrations.AddField( - model_name='proposalsuggestionforincremental', - name='summary', - field=models.TextField(default=''), - ), - ] diff --git a/backend_candidate/migrations/0007_candidateincremental.py b/backend_candidate/migrations/0007_candidateincremental.py deleted file mode 100644 index f28d4b52..00000000 --- a/backend_candidate/migrations/0007_candidateincremental.py +++ /dev/null @@ -1,27 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.7 on 2017-10-23 21:24 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion -import uuid - - -class Migration(migrations.Migration): - - dependencies = [ - ('elections', '0030_election_candidates_can_commit_everywhere'), - ('backend_candidate', '0006_proposalsuggestionforincremental_summary'), - ] - - operations = [ - migrations.CreateModel( - name='CandidateIncremental', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('identifier', models.UUIDField(default=uuid.uuid4)), - ('candidate', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='elections.Candidate')), - ('suggestion', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='backend_candidate.IncrementalsCandidateFilter')), - ], - ), - ] diff --git a/backend_candidate/migrations/0008_auto_20171023_2146.py b/backend_candidate/migrations/0008_auto_20171023_2146.py deleted file mode 100644 index 1c6acc0a..00000000 --- a/backend_candidate/migrations/0008_auto_20171023_2146.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.7 on 2017-10-23 21:46 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('backend_candidate', '0007_candidateincremental'), - ] - - operations = [ - migrations.AlterField( - model_name='proposalsuggestionforincremental', - name='summary', - field=models.TextField(blank=True, default=''), - ), - ] diff --git a/backend_candidate/migrations/0009_auto_20171024_1420.py b/backend_candidate/migrations/0009_auto_20171024_1420.py deleted file mode 100644 index 44ba4483..00000000 --- a/backend_candidate/migrations/0009_auto_20171024_1420.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.7 on 2017-10-24 14:20 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('backend_candidate', '0008_auto_20171023_2146'), - ] - - operations = [ - migrations.AlterField( - model_name='incrementalscandidatefilter', - name='text', - field=models.TextField(blank=True), - ), - ] diff --git a/backend_candidate/migrations/0010_candidateincremental_used.py b/backend_candidate/migrations/0010_candidateincremental_used.py deleted file mode 100644 index 498c5dc7..00000000 --- a/backend_candidate/migrations/0010_candidateincremental_used.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.7 on 2017-10-24 18:43 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('backend_candidate', '0009_auto_20171024_1420'), - ] - - operations = [ - migrations.AddField( - model_name='candidateincremental', - name='used', - field=models.BooleanField(default=False), - ), - ] diff --git a/backend_candidate/migrations/0011_auto_20171026_1412.py b/backend_candidate/migrations/0011_auto_20171026_1412.py deleted file mode 100644 index c7c47d7f..00000000 --- a/backend_candidate/migrations/0011_auto_20171026_1412.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.7 on 2017-10-26 14:12 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('backend_candidate', '0010_candidateincremental_used'), - ] - - operations = [ - migrations.AddField( - model_name='candidateincremental', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AddField( - model_name='candidateincremental', - name='updated', - field=models.DateTimeField(auto_now=True, null=True), - ), - ] diff --git a/backend_candidate/migrations/0012_auto_20171026_1955.py b/backend_candidate/migrations/0012_auto_20171026_1955.py deleted file mode 100644 index 6c73f20e..00000000 --- a/backend_candidate/migrations/0012_auto_20171026_1955.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.7 on 2017-10-26 19:55 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('backend_candidate', '0011_auto_20171026_1412'), - ] - - operations = [ - migrations.AlterField( - model_name='candidateincremental', - name='suggestion', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='backend_candidate.IncrementalsCandidateFilter'), - ), - ] diff --git a/backend_candidate/migrations/0013_auto_20171117_1432.py b/backend_candidate/migrations/0013_auto_20171117_1432.py deleted file mode 100644 index 889e8b53..00000000 --- a/backend_candidate/migrations/0013_auto_20171117_1432.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.7 on 2017-11-17 14:32 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('backend_candidate', '0012_auto_20171026_1955'), - ] - - operations = [ - migrations.AddField( - model_name='incrementalscandidatefilter', - name='subject', - field=models.CharField(blank=True, max_length=256, null=True), - ), - migrations.AlterField( - model_name='candidateincremental', - name='suggestion', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='backend_candidate.IncrementalsCandidateFilter'), - ), - ] diff --git a/backend_candidate/migrations/0014_remove_suggesting_models.py b/backend_candidate/migrations/0014_remove_suggesting_models.py deleted file mode 100644 index 229482b7..00000000 --- a/backend_candidate/migrations/0014_remove_suggesting_models.py +++ /dev/null @@ -1,29 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.9 on 2018-03-09 20:40 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('backend_candidate', '0013_auto_20171117_1432'), - ] - database_operations = [ - migrations.AlterModelTable('IncrementalsCandidateFilter', 'suggestions_for_candidates_incrementalscandidatefilter'), - migrations.AlterModelTable('CandidateIncremental', 'suggestions_for_candidates_candidateincremental'), - migrations.AlterModelTable('ProposalSuggestionForIncremental', 'suggestions_for_candidates_proposalsuggestionforincremental') - ] - - state_operations = [ - migrations.DeleteModel('IncrementalsCandidateFilter'), - migrations.DeleteModel('CandidateIncremental'), - migrations.DeleteModel('ProposalSuggestionForIncremental') - ] - - operations = [ - migrations.SeparateDatabaseAndState( - database_operations=database_operations, - state_operations=state_operations) - ] diff --git a/backend_candidate/migrations/0015_candidacycontact_user.py b/backend_candidate/migrations/0015_candidacycontact_user.py deleted file mode 100644 index 44986d77..00000000 --- a/backend_candidate/migrations/0015_candidacycontact_user.py +++ /dev/null @@ -1,23 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.9 on 2018-08-14 13:41 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('backend_candidate', '0014_remove_suggesting_models'), - ] - - operations = [ - migrations.AddField( - model_name='candidacycontact', - name='user', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='candidacy_contact', to=settings.AUTH_USER_MODEL), - ), - ] diff --git a/backend_citizen/migrations/0002_profile.py b/backend_citizen/migrations/0001_initial.py similarity index 62% rename from backend_citizen/migrations/0002_profile.py rename to backend_citizen/migrations/0001_initial.py index 59c74b96..934ea781 100644 --- a/backend_citizen/migrations/0002_profile.py +++ b/backend_citizen/migrations/0001_initial.py @@ -1,10 +1,11 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-07-07 21:34 +# Generated by Django 1.11.15 on 2020-05-02 23:55 from __future__ import unicode_literals from django.conf import settings from django.db import migrations, models import django.db.models.deletion +import uuid class Migration(migrations.Migration): @@ -13,7 +14,6 @@ class Migration(migrations.Migration): dependencies = [ migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('backend_citizen', '0001_initial_squashed_0003_auto_20160426_1432'), ] operations = [ @@ -21,9 +21,13 @@ class Migration(migrations.Migration): name='Profile', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('is_organization', models.BooleanField(default=False)), ('image', models.ImageField(blank=True, null=True, upload_to='users/profiles/', verbose_name='Tu imagen de perfil')), - ('description', models.TextField(verbose_name='Tu descripci\xf3n')), + ('description', models.TextField(blank=True, null=True, verbose_name='Tu descripci\xf3n')), + ('first_time_in_backend_citizen', models.BooleanField(default=False)), + ('is_organization', models.BooleanField(default=False)), + ('is_journalist', models.BooleanField(default=False)), + ('unsubscribed', models.BooleanField(default=False, verbose_name='No quiero recibir noticias sobre las propuestas que me gustan')), + ('unsubscribe_token', models.UUIDField(default=uuid.uuid4)), ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), ], ), diff --git a/backend_citizen/migrations/0001_initial_squashed_0003_auto_20160426_1432.py b/backend_citizen/migrations/0001_initial_squashed_0003_auto_20160426_1432.py deleted file mode 100644 index a2ac5ebe..00000000 --- a/backend_citizen/migrations/0001_initial_squashed_0003_auto_20160426_1432.py +++ /dev/null @@ -1,17 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-04-28 15:55 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('popolo', '0001_initial'), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ] - - operations = [ - ] diff --git a/backend_citizen/migrations/0003_auto_20160712_1722.py b/backend_citizen/migrations/0003_auto_20160712_1722.py deleted file mode 100644 index f1d8e110..00000000 --- a/backend_citizen/migrations/0003_auto_20160712_1722.py +++ /dev/null @@ -1,49 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-07-12 17:22 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion -import images.models - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('popolo', '0001_initial'), - ('backend_citizen', '0002_profile'), - ] - - operations = [ - migrations.CreateModel( - name='Enrollment', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', models.DateTimeField(auto_now_add=True)), - ('updated', models.DateTimeField(auto_now_add=True)), - ], - ), - migrations.CreateModel( - name='Organization', - fields=[ - ('organization_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, to='popolo.Organization')), - ('_id', models.AutoField(primary_key=True, serialize=False)), - ], - options={ - 'abstract': False, - }, - bases=('popolo.organization', images.models.HasImageMixin), - ), - migrations.AddField( - model_name='enrollment', - name='organization', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='enrollments', to='backend_citizen.Organization'), - ), - migrations.AddField( - model_name='enrollment', - name='user', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='enrollments', to=settings.AUTH_USER_MODEL), - ), - ] diff --git a/backend_citizen/migrations/0004_profile_first_time_in_backend_citizen.py b/backend_citizen/migrations/0004_profile_first_time_in_backend_citizen.py deleted file mode 100644 index 947474a3..00000000 --- a/backend_citizen/migrations/0004_profile_first_time_in_backend_citizen.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-07-12 22:24 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('backend_citizen', '0003_auto_20160712_1722'), - ] - - operations = [ - migrations.AddField( - model_name='profile', - name='first_time_in_backend_citizen', - field=models.BooleanField(default=False), - ), - ] diff --git a/backend_citizen/migrations/0005_remove_profile_is_organization.py b/backend_citizen/migrations/0005_remove_profile_is_organization.py deleted file mode 100644 index 52ae1058..00000000 --- a/backend_citizen/migrations/0005_remove_profile_is_organization.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-07-12 23:01 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('backend_citizen', '0004_profile_first_time_in_backend_citizen'), - ] - - operations = [ - migrations.RemoveField( - model_name='profile', - name='is_organization', - ), - ] diff --git a/backend_citizen/migrations/0006_profile_is_organization.py b/backend_citizen/migrations/0006_profile_is_organization.py deleted file mode 100644 index 62a8b0f7..00000000 --- a/backend_citizen/migrations/0006_profile_is_organization.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-07-15 21:52 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('backend_citizen', '0005_remove_profile_is_organization'), - ] - - operations = [ - migrations.AddField( - model_name='profile', - name='is_organization', - field=models.BooleanField(default=False), - ), - ] diff --git a/backend_citizen/migrations/0007_profile_is_journalist.py b/backend_citizen/migrations/0007_profile_is_journalist.py deleted file mode 100644 index 0c1650a0..00000000 --- a/backend_citizen/migrations/0007_profile_is_journalist.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-08-04 20:38 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('backend_citizen', '0006_profile_is_organization'), - ] - - operations = [ - migrations.AddField( - model_name='profile', - name='is_journalist', - field=models.BooleanField(default=False), - ), - ] diff --git a/backend_citizen/migrations/0008_auto_20160804_2047.py b/backend_citizen/migrations/0008_auto_20160804_2047.py deleted file mode 100644 index 4fe3bd01..00000000 --- a/backend_citizen/migrations/0008_auto_20160804_2047.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-08-04 20:47 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('backend_citizen', '0007_profile_is_journalist'), - ] - - operations = [ - migrations.AlterField( - model_name='profile', - name='description', - field=models.TextField(blank=True, null=True, verbose_name='Tu descripci\xf3n'), - ), - ] diff --git a/backend_citizen/migrations/0009_auto_20171005_1822.py b/backend_citizen/migrations/0009_auto_20171005_1822.py deleted file mode 100644 index 657a1924..00000000 --- a/backend_citizen/migrations/0009_auto_20171005_1822.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.7 on 2017-10-05 18:22 -from __future__ import unicode_literals - -from django.db import migrations, models -import uuid - - -class Migration(migrations.Migration): - - dependencies = [ - ('backend_citizen', '0008_auto_20160804_2047'), - ] - - operations = [ - migrations.AddField( - model_name='profile', - name='unsubscribe_token', - field=models.UUIDField(default=uuid.uuid4), - ), - migrations.AddField( - model_name='profile', - name='unsubscribed', - field=models.BooleanField(default=False), - ), - ] diff --git a/backend_citizen/migrations/0010_auto_20171005_1822.py b/backend_citizen/migrations/0010_auto_20171005_1822.py deleted file mode 100644 index 3d3384ee..00000000 --- a/backend_citizen/migrations/0010_auto_20171005_1822.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.7 on 2017-10-05 18:22 -from __future__ import unicode_literals - -from django.db import migrations -import uuid - - -def create_unsubscribe_token_for_profile(apps, schema_editor): - # We can't import the Person model directly as it may be a newer - # version than this migration expects. We use the historical version. - Profile = apps.get_model('backend_citizen', 'Profile') - for profile in Profile.objects.all(): - profile.unsubscribe_token = uuid.uuid4() - profile.save() - -class Migration(migrations.Migration): - - dependencies = [ - ('backend_citizen', '0009_auto_20171005_1822'), - ] - - operations = [ - migrations.RunPython(create_unsubscribe_token_for_profile), - ] diff --git a/backend_citizen/migrations/0011_auto_20180308_1857.py b/backend_citizen/migrations/0011_auto_20180308_1857.py deleted file mode 100644 index e60fb91f..00000000 --- a/backend_citizen/migrations/0011_auto_20180308_1857.py +++ /dev/null @@ -1,39 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.9 on 2018-03-08 18:57 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('popular_proposal', '0032_auto_20180308_1857'), - ('backend_citizen', '0010_auto_20171005_1822'), - ] - - operations = [ - migrations.RemoveField( - model_name='enrollment', - name='organization', - ), - migrations.RemoveField( - model_name='enrollment', - name='user', - ), - migrations.RemoveField( - model_name='organization', - name='organization_ptr', - ), - migrations.AlterField( - model_name='profile', - name='unsubscribed', - field=models.BooleanField(default=False, verbose_name='No quiero recibir noticias sobre las propuestas que me gustan'), - ), - migrations.DeleteModel( - name='Enrollment', - ), - migrations.DeleteModel( - name='Organization', - ), - ] diff --git a/backend_staff/stats.py b/backend_staff/stats.py index 381dab52..170b51bf 100644 --- a/backend_staff/stats.py +++ b/backend_staff/stats.py @@ -22,7 +22,7 @@ def __init__(self, filter_kwargs={}): class Stats(object): def __init__(self): - self.all_candidates_qs = Candidate.objects.exclude(elections__area__id=config.HIDDEN_AREAS) + self.all_candidates_qs = Candidate.objects.exclude(elections__area__slug=config.HIDDEN_AREAS) self.candidates_qs = self.all_candidates_qs super(Stats, self).__init__() @@ -124,7 +124,7 @@ def __init__(self, area): self.commitments_qs = self.all_commitments_qs self.all_commiters_qs = Candidate.objects.filter(elections__area=self.area).exclude(commitments__isnull=True) self.commiters_qs = self.all_commiters_qs - self.all_candidates_qs = Candidate.objects.exclude(elections__area__id=config.HIDDEN_AREAS) + self.all_candidates_qs = Candidate.objects.exclude(elections__area__slug=config.HIDDEN_AREAS) self.all_candidates_qs = self.all_candidates_qs.filter(elections__area=self.area) self.candidates_qs = self.all_candidates_qs super(PerAreaStaffStats, self).__init__() diff --git a/backend_staff/tests/forms_tests.py b/backend_staff/tests/forms_tests.py index 680077a8..880cb899 100644 --- a/backend_staff/tests/forms_tests.py +++ b/backend_staff/tests/forms_tests.py @@ -6,7 +6,6 @@ from popular_proposal.forms import RejectionForm from elections.models import Area from elections.models import Election, Candidate -from preguntales.models import Message from django.core import mail from backend_staff.forms import AddContactAndSendMailForm from backend_candidate.models import CandidacyContact diff --git a/backend_staff/tests/views_tests.py b/backend_staff/tests/views_tests.py index 7a5a52c7..9b859af0 100644 --- a/backend_staff/tests/views_tests.py +++ b/backend_staff/tests/views_tests.py @@ -6,7 +6,6 @@ from popular_proposal.forms import RejectionForm from elections.models import Area from elections.models import Election, Candidate -from preguntales.models import Message from django.core import mail from backend_staff.views import Stats from backend_staff.stats import PerAreaStaffStats @@ -125,13 +124,6 @@ def test_context(self): # Temporary datas are listed in the index so we can moderate them # or update them. - message = Message.objects.create(election=self.election, - author_name='author', - author_email='author@email.com', - subject='Perrito', - content='content', - ) - # Messages are listed as well url = reverse('backend_staff:index') self.client.login(username=self.fiera.username, @@ -142,7 +134,6 @@ def test_context(self): self.assertIn(temporary_data, response.context['proposals']) self.assertIn(temporary_data2, response.context['proposals']) self.assertIn(temporary_data3, response.context['proposals']) - self.assertIn(message, response.context['needing_moderation_messages'].all()) def test_get_proposal_moderation_view(self): temporary_data = ProposalTemporaryData.objects.create(proposer=self.feli, diff --git a/backend_staff/views.py b/backend_staff/views.py index 7ba56894..9ddb3fb0 100644 --- a/backend_staff/views.py +++ b/backend_staff/views.py @@ -4,7 +4,6 @@ from django.contrib.auth.decorators import login_required from django.utils.decorators import method_decorator from popular_proposal.models import ProposalTemporaryData, Commitment -from preguntales.models import Message from django.views.generic.edit import FormView from popular_proposal.forms import CommentsForm, RejectionForm from backend_staff.forms import AddContactAndSendMailForm @@ -30,7 +29,6 @@ def dispatch(self, request, *args, **kwargs): def get_context_data(self, **kwargs): context = super(IndexView, self).get_context_data(**kwargs) context['proposals'] = ProposalTemporaryData.objects.all().order_by('-created') - context['needing_moderation_messages'] = Message.objects.needing_moderation_messages() return context diff --git a/custom_sites/migrations/0001_initial.py b/custom_sites/migrations/0001_initial.py index fcfbed30..bdd21624 100644 --- a/custom_sites/migrations/0001_initial.py +++ b/custom_sites/migrations/0001_initial.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.10.7 on 2017-08-08 22:48 +# Generated by Django 1.11.15 on 2020-05-02 23:55 from __future__ import unicode_literals from django.db import migrations, models diff --git a/elections/admin.py b/elections/admin.py index 644fec9a..a62f6ce3 100644 --- a/elections/admin.py +++ b/elections/admin.py @@ -9,8 +9,8 @@ from django.contrib.contenttypes.admin import GenericTabularInline from django import forms from django.conf import settings +from elections.models import Topic from candidator.models import Position as CanPosition, TakenPosition as CanTakenPosition -from elections.models import Topic, CandidateFlatPage from django.utils.encoding import python_2_unicode_compatible @@ -290,11 +290,6 @@ def save_model(self, request, obj, form, change): admin.site.register(Candidate, CandidateAdmin) -class CandidateFlatPageAdmin(admin.ModelAdmin): - pass -admin.site.register(CandidateFlatPage, CandidateFlatPageAdmin) - - class AreaAdmin(admin.ModelAdmin): def get_queryset(self, request): qs = Area.objects.all() diff --git a/elections/bin/second_round.py b/elections/bin/second_round.py index 51b2a683..632c456d 100644 --- a/elections/bin/second_round.py +++ b/elections/bin/second_round.py @@ -30,23 +30,10 @@ def get_second_round(self): for candidate in self.candidates: second_round.candidates.add(candidate) self.copy_categories(second_round) - self.copy_messages(second_round) self.election.second_round = second_round self.election.save() return second_round - def copy_messages(self, second_round): - for message in self.election.messages.all(): - _message = copy_model_instance(message) - _message.id = None - _message.election = second_round - _message.save() - for answer in message.answers.all(): - _answer = copy_model_instance(answer) - _answer.id = None - _answer.message = _message - _answer.save() - def copy_categories(self, second_round): for category in self.election.categories.all(): category_copy = copy_model_instance(category) diff --git a/elections/fixtures/mini_2.yaml b/elections/fixtures/mini_2.yaml index 8a2416c1..f6a450a6 100644 --- a/elections/fixtures/mini_2.yaml +++ b/elections/fixtures/mini_2.yaml @@ -28,24 +28,36 @@ user_permissions: [] - model: popolo.area pk: "1" - fields: {slug: algarrobo, start_date: null, end_date: null, + fields: {start_date: null, end_date: null, name: Algarrobo, identifier: '5602', classification: 'Comuna', parent: null, geom: null, inhabitants: null} - model: popolo.area pk: "2" - fields: {slug: alhue, start_date: null, end_date: null, + fields: {start_date: null, end_date: null, name: "Alhu\xE9", identifier: '13502', classification: 'Comuna', parent: null, geom: null, inhabitants: null} - model: popolo.area pk: "3" - fields: {slug: arica, start_date: null, end_date: null, + fields: {start_date: null, end_date: null, name: Arica, identifier: '15101', classification: '', parent: null, geom: null, inhabitants: null} - model: popolo.area pk: "4" - fields: {slug: ciudadanoi, start_date: null, end_date: null, + fields: {start_date: null, end_date: null, name: CiudadanoI, identifier: '15102', classification: '', parent: null, geom: null, inhabitants: null} +- model: elections.area + pk: 1 + fields: {area_ptr_id: 1, slug: 'algarrobo'} +- model: elections.area + pk: 2 + fields: {area_ptr_id: 2, slug: 'alhue'} +- model: elections.area + pk: 3 + fields: {area_ptr_id: 3, slug: 'arica'} +- model: elections.area + pk: 4 + fields: {area_ptr_id: 4, slug: 'ciudadaniai'} - model: backend_citizen.profile pk: 1 fields: {user: 1, image: '', description: '', first_time_in_backend_citizen: true} @@ -64,40 +76,40 @@ searchable: true, slug: 4a-circunscripcion-coquimbo, area: 1} model: elections.election pk: 2 -- fields: { slug: candidato-1, name: Manuel Rojas } +- fields: { name: Manuel Rojas } model: popolo.person pk: 1 -- fields: { slug: candidato-2, name: Alejandro Guillier} +- fields: { name: Alejandro Guillier} model: popolo.person pk: 2 -- fields: { slug: candidato-3, name: Pedro Araya} +- fields: { name: Pedro Araya} model: popolo.person pk: 3 -- fields: { slug: candidato-4, name: Gisela Contreras, email: gcontreras@votai.cl} +- fields: { name: Gisela Contreras, email: gcontreras@votai.cl} model: popolo.person pk: 4 -- fields: { slug: candidato-5, name: Carlos Cantero, email: ccantero@votai.com} +- fields: { name: Carlos Cantero, email: ccantero@votai.com} model: popolo.person pk: 5 -- fields: { slug: candidato-6, name: Daniel Guevara, email: dguevara@votai.io} +- fields: { name: Daniel Guevara, email: dguevara@votai.io} model: popolo.person pk: 6 -- fields: { slug: candidato-7, name: Jimena Orrego} +- fields: { name: Jimena Orrego} model: popolo.person pk: 7 -- fields: { slug: candidato-8, name: Gonzalo Uriarte} +- fields: { name: Gonzalo Uriarte} model: popolo.person pk: 8 -- fields: { slug: candidato-9, name: Mario Bertolino} +- fields: { name: Mario Bertolino} model: popolo.person pk: 9 -- fields: { slug: candidato-10, name: Jorge Pizarro} +- fields: { name: Jorge Pizarro} model: popolo.person pk: 10 -- fields: { slug: candidato-11, name: "Adriana Munoz"} +- fields: { name: "Adriana Munoz"} model: popolo.person pk: 11 -- fields: { slug: candidato-12, name: Luis Vega} +- fields: { name: Luis Vega} model: popolo.person pk: 12 - fields: {name: Perros y gatos, slug: perros-y-gatos} @@ -184,22 +196,22 @@ - fields: {label: 'no', topic: 6} model: candidator.position pk: 14 -- fields: {person_ptr: 1, name: Manuel Rojas, elections: [2], extra_info: {}} +- fields: {person_ptr: 1, slug: candidate-1, name: Manuel Rojas, elections: [2], extra_info: {}} model: elections.candidate pk: 1 -- fields: {person_ptr: 2, name: Alejandro Guillier, elections: [2], extra_info: {}} +- fields: {person_ptr: 2, slug: candidate-2, name: Alejandro Guillier, elections: [2], extra_info: {}} model: elections.candidate pk: 2 -- fields: {person_ptr: 3, name: Pedro Araya, elections: [2], extra_info: {}} +- fields: {person_ptr: 3, slug: candidate-3, name: Pedro Araya, elections: [2], extra_info: {}} model: elections.candidate pk: 3 -- fields: {person_ptr: 4, name: Gisela Contreras, elections: [1], extra_info: {}} +- fields: {person_ptr: 4, slug: candidate-4, name: Gisela Contreras, elections: [1], extra_info: {}} model: elections.candidate pk: 4 -- fields: {person_ptr: 5, name: Carlos Cantero, elections: [1], extra_info: {}} +- fields: {person_ptr: 5, slug: candidate-5, name: Carlos Cantero, elections: [1], extra_info: {}} model: elections.candidate pk: 5 -- fields: {person_ptr: 6, name: Daniel Guevara, elections: [1], extra_info: {}} +- fields: {person_ptr: 6, slug: candidate-6, name: Daniel Guevara, elections: [1], extra_info: {}} model: elections.candidate pk: 6 - fields: {topic: 4, position: 8, person: 1} diff --git a/elections/migrations/0001_initial.py b/elections/migrations/0001_initial.py index dbaa9be1..21df8dfc 100644 --- a/elections/migrations/0001_initial.py +++ b/elections/migrations/0001_initial.py @@ -1,40 +1,143 @@ # -*- coding: utf-8 -*- +# Generated by Django 1.11.15 on 2020-05-02 23:54 from __future__ import unicode_literals -from django.db import models, migrations import autoslug.fields +from django.db import migrations, models +import django.db.models.deletion +import django.db.models.manager +import picklefield.fields import taggit.managers +import votai_utils.open_graph class Migration(migrations.Migration): + initial = True + dependencies = [ - ('taggit', '0001_initial'), - ('popolo', '__first__'), + ('popolo', '0002_update_models_from_upstream'), + ('taggit', '0002_auto_20150616_2121'), + ('candidator', '0005_auto_20200502_2354'), ] operations = [ + migrations.CreateModel( + name='Area', + fields=[ + ('area_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='popolo.Area')), + ('slug', autoslug.fields.AutoSlugField(editable=False, populate_from=b'name', unique=True)), + ], + options={ + 'abstract': False, + }, + bases=('popolo.area', votai_utils.open_graph.OGPMixin), + managers=[ + ('public', django.db.models.manager.Manager()), + ], + ), + migrations.CreateModel( + name='Candidate', + fields=[ + ('person_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='popolo.Person')), + ('extra_info', picklefield.fields.PickledObjectField(default={}, editable=False)), + ('slug', autoslug.fields.AutoSlugField(editable=False, populate_from=b'name', unique=True)), + ('force_has_answer', models.BooleanField(default=False, help_text='Marca esto si quieres que el candidato aparezca como que no ha respondido')), + ('has_won', models.BooleanField(default=False)), + ], + options={ + 'verbose_name': 'Candidato', + 'verbose_name_plural': 'Candidatos', + }, + bases=('popolo.person', models.Model, votai_utils.open_graph.OGPMixin), + ), migrations.CreateModel( name='Election', fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('extra_info', picklefield.fields.PickledObjectField(default={}, editable=False)), ('name', models.CharField(max_length=255)), - ('slug', autoslug.fields.AutoSlugField(unique=True, editable=False)), + ('slug', autoslug.fields.AutoSlugField(editable=False, populate_from=b'name', unique=True)), ('description', models.TextField(blank=True)), ('searchable', models.BooleanField(default=True)), ('highlighted', models.BooleanField(default=False)), - ('extra_info_title', models.CharField(max_length=50, null=True, blank=True)), - ('extra_info_content', models.TextField(help_text='Puedes usar Markdown.
Markdown syntax allowed, but no raw HTML. Examples: **bold**, *italic*, indent 4 spaces for a code block.', max_length=3000, null=True, blank=True)), - ('uses_preguntales', models.BooleanField(default=True, help_text='Esta elecci\xf3n debe usar preguntales?')), - ('uses_ranking', models.BooleanField(default=True, help_text='Esta elecci\xf3n debe usar ranking')), + ('extra_info_title', models.CharField(blank=True, max_length=50, null=True)), + ('extra_info_content', models.TextField(blank=True, help_text='Puedes usar Markdown.
Markdown syntax allowed, but no raw HTML. Examples: **bold**, *italic*, indent 4 spaces for a code block.', max_length=3000, null=True)), + ('uses_preguntales', models.BooleanField(default=False, help_text='Esta elecci\xf3n debe usar preguntales?')), + ('uses_ranking', models.BooleanField(default=False, help_text='Esta elecci\xf3n debe usar ranking')), ('uses_face_to_face', models.BooleanField(default=True, help_text='Esta elecci\xf3n debe usar frente a frente')), ('uses_soul_mate', models.BooleanField(default=True, help_text='Esta elecci\xf3n debe usar 1/2 naranja')), ('uses_questionary', models.BooleanField(default=True, help_text='Esta elecci\xf3n debe usar cuestionario')), - ('tags', taggit.managers.TaggableManager(to='taggit.Tag', through='taggit.TaggedItem', blank=True, help_text='A comma-separated list of tags.', verbose_name='Tags')), + ('candidates_can_commit_everywhere', models.BooleanField(default=True, help_text='Los candidatos en esta elecci\xf3n pueden comprometerse en todas las elecciones')), + ('position', models.CharField(blank=True, default=b'', help_text='A qu\xe9 cargo est\xe1 postulando?', max_length=255, null=True)), + ('area', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='elections', to='elections.Area')), + ('second_round', models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.CASCADE, to='elections.Election')), + ('tags', taggit.managers.TaggableManager(blank=True, help_text='A comma-separated list of tags.', through='taggit.TaggedItem', to='taggit.Tag', verbose_name='Tags')), ], options={ 'verbose_name': 'Mi Elecci\xf3n', 'verbose_name_plural': 'Mis Elecciones', }, + bases=(models.Model, votai_utils.open_graph.OGPMixin), + ), + migrations.CreateModel( + name='PersonalData', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.CharField(max_length=512)), + ('value', models.CharField(max_length=4096)), + ('candidate', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='personal_datas', to='elections.Candidate')), + ], + ), + migrations.CreateModel( + name='QuestionCategory', + fields=[ + ('category_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='candidator.Category')), + ('election', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='categories', to='elections.Election')), + ], + options={ + 'verbose_name': 'Categor\xeda de pregunta', + 'verbose_name_plural': 'Categor\xedas de pregunta', + }, + bases=('candidator.category',), + ), + migrations.CreateModel( + name='Position', + fields=[ + ], + options={ + 'verbose_name': 'Position', + 'proxy': True, + 'verbose_name_plural': 'Positions', + 'indexes': [], + }, + bases=('candidator.position',), + ), + migrations.CreateModel( + name='TakenPosition', + fields=[ + ], + options={ + 'proxy': True, + 'indexes': [], + }, + bases=('candidator.takenposition',), + ), + migrations.CreateModel( + name='Topic', + fields=[ + ], + options={ + 'verbose_name': 'Pregunta', + 'proxy': True, + 'verbose_name_plural': 'Preguntas', + 'indexes': [], + }, + bases=('candidator.topic',), + ), + migrations.AddField( + model_name='candidate', + name='elections', + field=models.ManyToManyField(default=None, related_name='candidates', to='elections.Election'), ), ] diff --git a/elections/migrations/0002_candidate.py b/elections/migrations/0002_candidate.py deleted file mode 100644 index df53829a..00000000 --- a/elections/migrations/0002_candidate.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('popolo', '__first__'), - ('elections', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='Candidate', - fields=[ - ('person_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='popolo.Person')), - ], - options={ - 'abstract': False, - }, - bases=('popolo.person',), - ), - ] diff --git a/elections/migrations/0003_candidate_election.py b/elections/migrations/0003_candidate_election.py deleted file mode 100644 index 54837c74..00000000 --- a/elections/migrations/0003_candidate_election.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('elections', '0002_candidate'), - ] - - operations = [ - migrations.AddField( - model_name='candidate', - name='election', - field=models.ForeignKey(related_name='candidates', to='elections.Election', null=True), - ), - ] diff --git a/elections/migrations/0004_questioncategory.py b/elections/migrations/0004_questioncategory.py deleted file mode 100644 index 90b6b08a..00000000 --- a/elections/migrations/0004_questioncategory.py +++ /dev/null @@ -1,23 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('candidator', '__first__'), - ('elections', '0003_candidate_election'), - ] - - operations = [ - migrations.CreateModel( - name='QuestionCategory', - fields=[ - ('category_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='candidator.Category')), - ('election', models.ForeignKey(related_name='categories', to='elections.Election', null=True)), - ], - bases=('candidator.category',), - ), - ] diff --git a/elections/migrations/0005_candidate_extra_info.py b/elections/migrations/0005_candidate_extra_info.py deleted file mode 100644 index eae50f36..00000000 --- a/elections/migrations/0005_candidate_extra_info.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations -import picklefield.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('elections', '0004_questioncategory'), - ] - - operations = [ - migrations.AddField( - model_name='candidate', - name='extra_info', - field=picklefield.fields.PickledObjectField(default={}, editable=False), - ), - ] diff --git a/elections/migrations/0006_personaldata.py b/elections/migrations/0006_personaldata.py deleted file mode 100644 index 5bb3e960..00000000 --- a/elections/migrations/0006_personaldata.py +++ /dev/null @@ -1,23 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('elections', '0005_candidate_extra_info'), - ] - - operations = [ - migrations.CreateModel( - name='PersonalData', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('label', models.CharField(max_length=512)), - ('value', models.CharField(max_length=1024)), - ('candidate', models.ForeignKey(related_name='personal_datas', to='elections.Candidate')), - ], - ), - ] diff --git a/elections/migrations/0007_election_extra_info.py b/elections/migrations/0007_election_extra_info.py deleted file mode 100644 index 528e071b..00000000 --- a/elections/migrations/0007_election_extra_info.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations -import picklefield.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('elections', '0006_personaldata'), - ] - - operations = [ - migrations.AddField( - model_name='election', - name='extra_info', - field=picklefield.fields.PickledObjectField(default={}, editable=False), - ), - ] diff --git a/elections/migrations/0008_election_area.py b/elections/migrations/0008_election_area.py deleted file mode 100644 index 08900a96..00000000 --- a/elections/migrations/0008_election_area.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('popolo', '__first__'), - ('elections', '0007_election_extra_info'), - ] - - operations = [ - migrations.AddField( - model_name='election', - name='area', - field=models.ForeignKey(related_name='elections', to='popolo.Area', null=True), - ), - ] diff --git a/elections/migrations/0009_topic.py b/elections/migrations/0009_topic.py deleted file mode 100644 index 673ccc0d..00000000 --- a/elections/migrations/0009_topic.py +++ /dev/null @@ -1,24 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('candidator', '__first__'), - ('elections', '0008_election_area'), - ] - - operations = [ - migrations.CreateModel( - name='Topic', - fields=[ - ], - options={ - 'proxy': True, - }, - bases=('candidator.topic',), - ), - ] diff --git a/elections/migrations/0010_candidateflatpage.py b/elections/migrations/0010_candidateflatpage.py deleted file mode 100644 index 1674beb0..00000000 --- a/elections/migrations/0010_candidateflatpage.py +++ /dev/null @@ -1,23 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('flatpages', '0001_initial'), - ('elections', '0009_topic'), - ] - - operations = [ - migrations.CreateModel( - name='CandidateFlatPage', - fields=[ - ('flatpage_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='flatpages.FlatPage')), - ('candidate', models.ForeignKey(to='elections.Candidate')), - ], - bases=('flatpages.flatpage',), - ), - ] diff --git a/elections/migrations/0011_auto_20150722_1710.py b/elections/migrations/0011_auto_20150722_1710.py deleted file mode 100644 index bee2837a..00000000 --- a/elections/migrations/0011_auto_20150722_1710.py +++ /dev/null @@ -1,35 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('elections', '0010_candidateflatpage'), - ] - - operations = [ - migrations.AlterModelOptions( - name='candidate', - options={'verbose_name': 'Candidato', 'verbose_name_plural': 'Candidatos'}, - ), - migrations.AlterModelOptions( - name='candidateflatpage', - options={'verbose_name': 'P\xe1gina est\xe1ticas por candidato', 'verbose_name_plural': 'P\xe1ginas est\xe1ticas por candidato'}, - ), - migrations.AlterModelOptions( - name='questioncategory', - options={'verbose_name': 'Categor\xeda de pregunta', 'verbose_name_plural': 'Categor\xedas de pregunta'}, - ), - migrations.AlterModelOptions( - name='topic', - options={'verbose_name': 'Pregunta', 'verbose_name_plural': 'Preguntas'}, - ), - migrations.AlterField( - model_name='candidateflatpage', - name='candidate', - field=models.ForeignKey(related_name='flatpages', to='elections.Candidate'), - ), - ] diff --git a/elections/migrations/0012_candidate_force_has_answer.py b/elections/migrations/0012_candidate_force_has_answer.py deleted file mode 100644 index b5c104a0..00000000 --- a/elections/migrations/0012_candidate_force_has_answer.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('elections', '0011_auto_20150722_1710'), - ] - - operations = [ - migrations.AddField( - model_name='candidate', - name='force_has_answer', - field=models.BooleanField(default=False), - ), - ] diff --git a/elections/migrations/0013_auto_20150820_1614.py b/elections/migrations/0013_auto_20150820_1614.py deleted file mode 100644 index 13563770..00000000 --- a/elections/migrations/0013_auto_20150820_1614.py +++ /dev/null @@ -1,40 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('candidator', '0004_auto_20150714_1756'), - ('elections', '0012_candidate_force_has_answer'), - ] - - operations = [ - migrations.CreateModel( - name='Position', - fields=[ - ], - options={ - 'verbose_name': 'Position', - 'proxy': True, - 'verbose_name_plural': 'Positions', - }, - bases=('candidator.position',), - ), - migrations.CreateModel( - name='TakenPosition', - fields=[ - ], - options={ - 'proxy': True, - }, - bases=('candidator.takenposition',), - ), - migrations.AlterField( - model_name='candidate', - name='force_has_answer', - field=models.BooleanField(default=False, help_text='Marca esto si quieres que el candidato aparezca como que no ha respondido'), - ), - ] diff --git a/elections/migrations/0014_votainteligentemessage_election.py b/elections/migrations/0014_votainteligentemessage_election.py deleted file mode 100644 index 93ef5a76..00000000 --- a/elections/migrations/0014_votainteligentemessage_election.py +++ /dev/null @@ -1,14 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('elections', '0013_auto_20150820_1614'), - ] - - operations = [ - ] diff --git a/elections/migrations/0015_auto_20150820_2218.py b/elections/migrations/0015_auto_20150820_2218.py deleted file mode 100644 index dfde65c9..00000000 --- a/elections/migrations/0015_auto_20150820_2218.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations -import autoslug.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('elections', '0014_votainteligentemessage_election'), - ] - - operations = [ - migrations.AlterField( - model_name='election', - name='slug', - field=autoslug.fields.AutoSlugField(populate_from=b'name', unique=True, editable=False), - ), - ] diff --git a/elections/migrations/0016_votainteligenteanswer.py b/elections/migrations/0016_votainteligenteanswer.py deleted file mode 100644 index 9ecf1b56..00000000 --- a/elections/migrations/0016_votainteligenteanswer.py +++ /dev/null @@ -1,15 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('popolo', '__first__'), - ('elections', '0015_auto_20150820_2218'), - ] - - operations = [ - ] diff --git a/elections/migrations/0017_auto_20150820_2245.py b/elections/migrations/0017_auto_20150820_2245.py deleted file mode 100644 index 7e08c1f2..00000000 --- a/elections/migrations/0017_auto_20150820_2245.py +++ /dev/null @@ -1,14 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('elections', '0016_votainteligenteanswer'), - ] - - operations = [ - ] diff --git a/elections/migrations/0018_auto_20150821_1745.py b/elections/migrations/0018_auto_20150821_1745.py deleted file mode 100644 index 8d8ee597..00000000 --- a/elections/migrations/0018_auto_20150821_1745.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('elections', '0017_auto_20150820_2245'), - ] - - operations = [ - migrations.AlterField( - model_name='election', - name='uses_preguntales', - field=models.BooleanField(default=False, help_text='Esta elecci\xf3n debe usar preguntales?'), - ), - ] diff --git a/elections/migrations/0019_auto_20150821_1746.py b/elections/migrations/0019_auto_20150821_1746.py deleted file mode 100644 index d612ce29..00000000 --- a/elections/migrations/0019_auto_20150821_1746.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('elections', '0018_auto_20150821_1745'), - ] - - operations = [ - migrations.AlterField( - model_name='election', - name='uses_ranking', - field=models.BooleanField(default=False, help_text='Esta elecci\xf3n debe usar ranking'), - ), - ] diff --git a/elections/migrations/0020_auto_20150821_2101.py b/elections/migrations/0020_auto_20150821_2101.py deleted file mode 100644 index a1c9cbb1..00000000 --- a/elections/migrations/0020_auto_20150821_2101.py +++ /dev/null @@ -1,14 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('elections', '0019_auto_20150821_1746'), - ] - - operations = [ - ] diff --git a/elections/migrations/0021_auto_20151008_1526.py b/elections/migrations/0021_auto_20151008_1526.py deleted file mode 100644 index 6fc3cc35..00000000 --- a/elections/migrations/0021_auto_20151008_1526.py +++ /dev/null @@ -1,29 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -def from_election_to_elections(apps, schema_editor): - # We can't import the Person model directly as it may be a newer - # version than this migration expects. We use the historical version. - Election = apps.get_model("elections", "Election") - Candidate = apps.get_model("elections", "Candidate") - for candidate in Candidate.objects.all(): - candidate.elections.add(candidate.election) - - -class Migration(migrations.Migration): - - dependencies = [ - ('elections', '0020_auto_20150821_2101'), - ] - - operations = [ - migrations.AddField( - model_name='candidate', - name='elections', - field=models.ManyToManyField(related_name='candidates', null=True, to='elections.Election'), - ), - migrations.RunPython(from_election_to_elections), - ] diff --git a/elections/migrations/0022_remove_candidate_election.py b/elections/migrations/0022_remove_candidate_election.py deleted file mode 100644 index 77e6c19c..00000000 --- a/elections/migrations/0022_remove_candidate_election.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('elections', '0021_auto_20151008_1526'), - ] - - operations = [ - migrations.RemoveField( - model_name='candidate', - name='election', - ), - ] diff --git a/elections/migrations/0024_auto_20160307_2049.py b/elections/migrations/0024_auto_20160307_2049.py deleted file mode 100644 index c338cf7a..00000000 --- a/elections/migrations/0024_auto_20160307_2049.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('elections', '0022_remove_candidate_election'), - ] - - operations = [ - migrations.AlterField( - model_name='candidate', - name='elections', - field=models.ManyToManyField(default=None, related_name='candidates', null=True, to='elections.Election'), - ), - ] diff --git a/elections/migrations/0025_auto_20160701_1735.py b/elections/migrations/0025_auto_20160701_1735.py deleted file mode 100644 index b29b0e29..00000000 --- a/elections/migrations/0025_auto_20160701_1735.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-07-01 17:35 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('elections', '0024_auto_20160307_2049'), - ] - - operations = [ - migrations.AlterField( - model_name='candidate', - name='elections', - field=models.ManyToManyField(default=None, related_name='candidates', to='elections.Election'), - ), - migrations.AlterField( - model_name='election', - name='area', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='elections', to='popolo.Area'), - ), - ] diff --git a/elections/migrations/0026_election_position.py b/elections/migrations/0026_election_position.py deleted file mode 100644 index 6c404c8c..00000000 --- a/elections/migrations/0026_election_position.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-08-08 22:30 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('elections', '0025_auto_20160701_1735'), - ] - - operations = [ - migrations.AddField( - model_name='election', - name='position', - field=models.CharField(blank=True, default=b'', help_text='A qu\xe9 cargo est\xe1 postulando?', max_length=255, null=True), - ), - ] diff --git a/elections/migrations/0027_auto_20160818_1538.py b/elections/migrations/0027_auto_20160818_1538.py deleted file mode 100644 index 3d510759..00000000 --- a/elections/migrations/0027_auto_20160818_1538.py +++ /dev/null @@ -1,31 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-08-18 15:38 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion -import votai_utils.open_graph - - -class Migration(migrations.Migration): - - dependencies = [ - ('elections', '0026_election_position'), - ] - - operations = [ - migrations.CreateModel( - name='Area', - fields=[ - ], - options={ - 'proxy': True, - }, - bases=('popolo.area', votai_utils.open_graph.OGPMixin), - ), - migrations.AlterField( - model_name='election', - name='area', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='elections', to='elections.Area'), - ), - ] diff --git a/elections/migrations/0028_auto_20160913_1451.py b/elections/migrations/0028_auto_20160913_1451.py deleted file mode 100644 index 327afe63..00000000 --- a/elections/migrations/0028_auto_20160913_1451.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-09-13 14:51 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('elections', '0027_auto_20160818_1538'), - ] - - operations = [ - migrations.AlterField( - model_name='personaldata', - name='value', - field=models.CharField(max_length=4096), - ), - ] diff --git a/elections/migrations/0029_candidate_has_won.py b/elections/migrations/0029_candidate_has_won.py deleted file mode 100644 index 9273bbd7..00000000 --- a/elections/migrations/0029_candidate_has_won.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-10-24 01:34 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('elections', '0028_auto_20160913_1451'), - ] - - operations = [ - migrations.AddField( - model_name='candidate', - name='has_won', - field=models.BooleanField(default=False), - ), - ] diff --git a/elections/migrations/0030_election_candidates_can_commit_everywhere.py b/elections/migrations/0030_election_candidates_can_commit_everywhere.py deleted file mode 100644 index afd11bb4..00000000 --- a/elections/migrations/0030_election_candidates_can_commit_everywhere.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.7 on 2017-08-22 21:36 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('elections', '0029_candidate_has_won'), - ] - - operations = [ - migrations.AddField( - model_name='election', - name='candidates_can_commit_everywhere', - field=models.BooleanField(default=True, help_text='Los candidatos en esta elecci\xf3n pueden comprometerse en todas las elecciones'), - ), - ] diff --git a/elections/migrations/0031_election_second_round.py b/elections/migrations/0031_election_second_round.py deleted file mode 100644 index 5596d7bc..00000000 --- a/elections/migrations/0031_election_second_round.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.7 on 2017-11-29 21:29 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('elections', '0030_election_candidates_can_commit_everywhere'), - ] - - operations = [ - migrations.AddField( - model_name='election', - name='second_round', - field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.CASCADE, to='elections.Election'), - ), - ] diff --git a/elections/migrations/0032_auto_20180525_1552.py b/elections/migrations/0032_auto_20180525_1552.py deleted file mode 100644 index 403f7b38..00000000 --- a/elections/migrations/0032_auto_20180525_1552.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.9 on 2018-05-25 15:52 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('elections', '0031_election_second_round'), - ] - - operations = [ - migrations.AlterField( - model_name='election', - name='extra_info_content', - field=models.TextField(blank=True, help_text='Voc\xea pode usar Markdown.
Markdown syntax allowed, but no raw HTML. Examples: **bold**, *italic*, indent 4 spaces for a code block.', max_length=3000, null=True), - ), - ] diff --git a/elections/migrations/0033_auto_20180717_2345.py b/elections/migrations/0033_auto_20180717_2345.py deleted file mode 100644 index adf5d981..00000000 --- a/elections/migrations/0033_auto_20180717_2345.py +++ /dev/null @@ -1,32 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.9 on 2018-07-17 23:45 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('merepresenta', '0003_auto_20180717_2345'), - ('elections', '0032_auto_20180525_1552'), - ] - - operations = [ - migrations.AlterField( - model_name=b'PersonalData', - name='candidate', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='personal_datas', to='elections.Candidate'), - ), - migrations.AlterField( - model_name=b'CandidateFlatPage', - name='candidate', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='flatpages', to='elections.Candidate'), - ), - migrations.AlterField( - model_name='election', - name='extra_info_content', - field=models.TextField(blank=True, help_text='Puedes usar Markdown.
Markdown syntax allowed, but no raw HTML. Examples: **bold**, *italic*, indent 4 spaces for a code block.', max_length=3000, null=True), - ), - ] diff --git a/elections/migrations/0034_auto_20180903_1614.py b/elections/migrations/0034_auto_20180903_1614.py deleted file mode 100644 index 212eb078..00000000 --- a/elections/migrations/0034_auto_20180903_1614.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.9 on 2018-09-03 16:14 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('elections', '0033_auto_20180717_2345'), - ] - - operations = [ - migrations.AlterField( - model_name='election', - name='extra_info_content', - field=models.TextField(blank=True, help_text='Voc\xea pode usar Markdown.
Markdown syntax allowed, but no raw HTML. Examples: **bold**, *italic*, indent 4 spaces for a code block.', max_length=3000, null=True), - ), - ] diff --git a/elections/models.py b/elections/models.py index 4716e649..5cd660c9 100644 --- a/elections/models.py +++ b/elections/models.py @@ -14,8 +14,7 @@ from django.contrib.flatpages.models import FlatPage import copy from votai_utils.open_graph import OGPMixin -from django.db.models import Count, F, FloatField, IntegerField, ExpressionWrapper, Case, Value, When -from django.shortcuts import render +from django.db.models import Count, F, FloatField, ExpressionWrapper from constance import config from django.db.models import Case, Value, When, PositiveSmallIntegerField from django.template.loader import get_template @@ -44,11 +43,9 @@ def get_position_in_(qs, el): return position class Area(PopoloArea, OGPMixin): + slug = AutoSlugField(populate_from='name', unique=True) public = AreaManager() - class Meta: - proxy = True - def get_absolute_url(self): return reverse('area', kwargs={'slug': self.slug}) @@ -79,7 +76,7 @@ def candidates(self): def get_related(self): related = [] for child in self.children.all(): - if child.elections.exists(): + if Election.objects.filter(area=child).exists(): related.append(self.__class__.objects.get(id=child.id)) for parent in self.parents: if parent !=self and parent.elections.exists(): @@ -90,7 +87,8 @@ def get_containing_filterable_areas(self): filterable_contained = [] for area in self.children.all(): if area.classification in settings.FILTERABLE_AREAS_TYPE: - filterable_contained.append(area) + a = Area.objects.get(id=area.id) + filterable_contained.append(a) return filterable_contained class ExtraInfoMixin(models.Model): @@ -169,6 +167,7 @@ def position(self, candidate): class Candidate(Person, ExtraInfoMixin, OGPMixin, ShareableMixin): + slug = AutoSlugField(populate_from='name', unique=True) elections = models.ManyToManyField('Election', related_name='candidates', default=None) force_has_answer = models.BooleanField(default=False, help_text=_('Marca esto si quieres que el candidato aparezca como que no ha respondido')) @@ -227,8 +226,9 @@ def ranking_in_election(self): return self.election.position_in_ranking(self) def get_url_based_on_area(self): + a = Area.objects.get(id=self.election.area.id) url = reverse('candidate_detail_view_area', kwargs={ - 'area_slug': self.election.area.slug, + 'area_slug': a.slug, 'slug': self.slug }) return url @@ -254,22 +254,6 @@ class Meta: verbose_name = _("Candidato") verbose_name_plural = _("Candidatos") - -class CandidateFlatPage(FlatPage): - candidate = models.ForeignKey(Candidate, related_name='flatpages') - - class Meta: - verbose_name = _(u"Página estáticas por candidato") - verbose_name_plural = _(u"Páginas estáticas por candidato") - - def get_absolute_url(self): - return reverse('candidate_flatpage', kwargs={'election_slug': self.candidate.election.slug, - 'slug': self.candidate.slug, - 'url': self.url - } - ) - - class PersonalData(models.Model): candidate = models.ForeignKey('Candidate', related_name="personal_datas") label = models.CharField(max_length=512) diff --git a/elections/soul_mate.py b/elections/soul_mate.py deleted file mode 100644 index 046ee781..00000000 --- a/elections/soul_mate.py +++ /dev/null @@ -1,132 +0,0 @@ -# coding=utf-8 -import re -from candidator.comparer import Comparer, InformationHolder -from candidator.adapters import CandidatorCalculator, CandidatorAdapter -from candidator.models import Position -from elections.models import Election -from django.views.generic import DetailView -from candidator.models import Topic, TakenPosition -from django.core.cache import cache -from django.conf import settings -from django.shortcuts import render -from constance import config - -class VotaInteligenteAdapter(CandidatorAdapter): - def get_position_from(self, taken_position): - if taken_position: - cache_key = u"position_from_taken_position_" + str(taken_position.id) - position = cache.get(cache_key) - if position is None: - position = taken_position.position - cache.set(cache_key, - position, - 60 * config.SOUL_MATE_INFO_ABOUT_CANDIDATES_MINUTES) - return position - - def is_topic_category_the_same_as(self, topic, category): - return topic.category == category.category_ptr - - def get_taken_position_by(self, person, topic): - cache_key = u"taken_position_" + str(person.id) + '_' + str(topic.id) - taken_position = cache.get(cache_key) - if taken_position: - return taken_position - try: - taken_position = TakenPosition.objects.get(person=person, - topic=topic) - cache.set(cache_key, taken_position) - return taken_position - except TakenPosition.DoesNotExist: - return None - - -class SoulMateDetailView(DetailView): - model = Election - adapter_class = VotaInteligenteAdapter - calculator_class = CandidatorCalculator - layout = "elections/election_base.html" - - def determine_taken_positions(self, positions_dict): - positions = [] - p = re.compile('^question-id-(?P\d+)$') - for key in positions_dict: - m = p.search(key) - if m: - _id = int(m.group('id')) - position_id = positions_dict["question-%d" % (_id)] - topic_id = positions_dict[key] - topic = Topic.objects.get(id=topic_id) - try: - position_cache_key = 'position_' + str(position_id) - position = cache.get(position_cache_key) - if position is None: - position = Position.objects.get(id=position_id) - cache.set(position_cache_key, - position, - 60 * config.SOUL_MATE_INFO_ABOUT_CANDIDATES_MINUTES) - positions.append(TakenPosition(topic=topic, - position=position - ) - ) - except Position.DoesNotExist: - pass - return positions - - def get_context_data(self, **kwargs): - context = super(SoulMateDetailView, self).get_context_data(**kwargs) - context['layout'] = self.layout - context['result_url'] = self.request.build_absolute_uri() - return context - - def get_information_holder(self, data={}): - holder = InformationHolder(adapter=self.adapter_class) - categories = cache.get(str(self.object.id) + '_categories') - if categories is None: - categories = self.object.categories.all() - cache.set(str(self.object.id) + '_categories', - categories, - 60 * config.SOUL_MATE_INFO_ABOUT_CANDIDATES_MINUTES) - for category in categories: - holder.add_category(category) - candidates = cache.get(str(self.object.id) + '_candidates') - if candidates is None: - candidates = self.object.candidates.exclude(taken_positions__isnull=True) - cache.set(str(self.object.id) + '_candidates', - candidates, - 60 * config.SOUL_MATE_INFO_ABOUT_CANDIDATES_MINUTES) - for candidate in candidates: - holder.add_person(candidate) - if data: - taken_positions = self.determine_taken_positions(data) - for taken_position in taken_positions: - holder.add_position(taken_position) - return holder - - def post(self, request, *args, **kwargs): - self.template_name = "elections/soulmate_response.html" - election = super(SoulMateDetailView, self)\ - .get_object(self.get_queryset()) - self.object = election - context = self.get_context_data() - information_holder = self.get_information_holder(data=request.POST) - - comparer = Comparer(adapter_class=self.adapter_class, - calculator_class=self.calculator_class) - result = comparer.compare(information_holder) - - stating_index = 0 - - if len(result) and (len(result) == 1 or result[0]['percentage'] > result[1]['percentage']): - stating_index = 1 - winner_candidate = result[0]['person'] - context['winner'] = result[0] - context['winner']['candidate'] = winner_candidate - - others_candidates = [] - for other in result[stating_index:]: - other_candidate = other['person'] - other["candidate"] = other_candidate - others_candidates.append(other) - - context['others'] = others_candidates - return self.render_to_response(context) diff --git a/elections/tests/candidatorg_views_tests.py b/elections/tests/candidatorg_views_tests.py index c79a6a35..1e89d250 100644 --- a/elections/tests/candidatorg_views_tests.py +++ b/elections/tests/candidatorg_views_tests.py @@ -2,7 +2,6 @@ from elections.tests import VotaInteligenteTestCase as TestCase from elections.models import Election, QuestionCategory, Candidate from django.core.urlresolvers import reverse -from elections.soul_mate import SoulMateDetailView from candidator.models import TakenPosition, Position from elections.models import Topic from popolo.models import Person @@ -149,8 +148,8 @@ def test_url_is_reachable_for_two_candidates(self): url = reverse('face_to_face_two_candidates_detail_view', kwargs={ 'slug': self.tarapaca.slug, - 'slug_candidate_one': self.tarapaca.candidates.all()[0].id, - 'slug_candidate_two': self.tarapaca.candidates.all()[1].id, + 'slug_candidate_one': self.tarapaca.candidates.all()[0].slug, + 'slug_candidate_two': self.tarapaca.candidates.all()[1].slug, }) self.assertTrue(url) response = self.client.get(url) @@ -165,19 +164,20 @@ def test_url_does_not_throw_errors_if_any_candidate_does_not_exist(self): url = reverse('face_to_face_two_candidates_detail_view', kwargs={ 'slug': self.tarapaca.slug, - 'slug_candidate_one': self.tarapaca.candidates.all()[0].id, + 'slug_candidate_one': self.tarapaca.candidates.all()[0].slug, 'slug_candidate_two': 'i-do-not-exist', }) response = self.client.get(url) self.assertEquals(response.status_code, 200) self.assertEqual(response.context['first_candidate'], self.tarapaca.candidates.all()[0]) + self.assertNotIn('second_candidate', response.context) def test_url_is_reachable_for_one_candidates(self): url = reverse('face_to_face_one_candidate_detail_view', kwargs={ 'slug': self.tarapaca.slug, - 'slug_candidate_one': self.tarapaca.candidates.all()[1].id, + 'slug_candidate_one': self.tarapaca.candidates.all()[1].slug, }) self.assertTrue(url) response = self.client.get(url) @@ -196,280 +196,3 @@ def test_url_is_reachable_for_no_one_candidates(self): self.assertEquals(response.status_code, 200) self.assertTemplateUsed(response, 'elections/compare_candidates.html') - -class SoulMateTestCase(TestCase): - def setUp(self): - super(SoulMateTestCase, self).setUp() - self.antofa = Election.objects.get(id=2) - - def test_url_better_half(self): - url = reverse('soul_mate_detail_view', - kwargs={ - 'slug': self.antofa.slug - }) - self.assertTrue(url) - - def test_url_is_reachable_for_better_half(self): - url = reverse('soul_mate_detail_view', - kwargs={ - 'slug': self.antofa.slug, - }) - self.assertTrue(url) - response = self.client.get(url) - self.assertIn("election", response.context) - self.assertEquals(response.context['layout'], "elections/election_base.html") - self.assertTrue(response.context['result_url'].endswith(url)) - self.assertEquals(response.context["election"], self.antofa) - self.assertEquals(response.status_code, 200) - self.assertTemplateUsed(response, 'elections/soulmate_candidate.html') - - def test_get_embeded_12_naranja(self): - url = reverse('embedded_soul_mate_detail_view', - kwargs={ - 'slug': self.antofa.slug - }) - response = self.client.get(url) - self.assertIn("election", response.context) - self.assertEquals(response.context["election"], self.antofa) - self.assertEquals(response.context['layout'], "elections/embedded.html") - self.assertTrue(response.context['result_url'].endswith(url)) - self.assertEquals(response.status_code, 200) - self.assertTemplateUsed(response, 'elections/soulmate_candidate.html') - - def test_view_determine_the_choices(self): - view = SoulMateDetailView() - data = { - "question-0": "8", - "question-1": "11", - "question-2": "14", - "question-id-0": "4", - "question-id-1": "5", - "question-id-2": "6" - } - taken_positions = view.determine_taken_positions(data) - self.assertEquals(len(taken_positions), 3) - self.assertIsInstance(taken_positions[0], TakenPosition) - self.assertIsInstance(taken_positions[1], TakenPosition) - self.assertIsInstance(taken_positions[2], TakenPosition) - fiera_topic = Topic.objects.get(id=4) - si_fiera = Position.objects.get(id=8) - self.assertEquals(taken_positions[0].topic, fiera_topic) - self.assertEquals(taken_positions[0].position, si_fiera) - with self.assertRaises(Person.DoesNotExist): - taken_positions[0].person - benito_topic = Topic.objects.get(id=5) - si_benito = Position.objects.get(id=11) - self.assertEquals(taken_positions[1].topic, benito_topic) - self.assertEquals(taken_positions[1].position, si_benito) - with self.assertRaises(Person.DoesNotExist): - taken_positions[1].person - freedom_topic = Topic.objects.get(id=6) - no_freedom = Position.objects.get(id=14) - self.assertEquals(taken_positions[2].topic, freedom_topic) - self.assertEquals(taken_positions[2].position, no_freedom) - with self.assertRaises(Person.DoesNotExist): - taken_positions[2].person - - def test_topic_str(self): - freedom_topic = Topic.objects.get(id=6) - self.assertIn(str(freedom_topic.election), str(freedom_topic)) - self.assertIn(freedom_topic.label, str(freedom_topic)) - - def test_get_information_holder(self): - view = SoulMateDetailView() - view.object = self.antofa - holder = view.get_information_holder() - self.assertIsInstance(holder, InformationHolder) - for candidate in holder.persons: - self.assertIsInstance(candidate, Candidate) - self.assertIn(int(candidate.id), [1, 2, 3]) - - for category in holder.categories: - self.assertIsInstance(category, QuestionCategory) - self.assertIn(int(category.id), [3, 4]) - - def test_get_information_holder_with_positions(self): - view = SoulMateDetailView() - view.object = self.antofa - data = { - "question-0": "8", - "question-1": "11", - "question-2": "14", - "question-id-0": "4", - "question-id-1": "5", - "question-id-2": "6" - } - holder = view.get_information_holder(data=data) - for candidate in holder.persons: - self.assertIsInstance(candidate, Candidate) - self.assertIn(int(candidate.id), [1, 2, 3]) - - for category in holder.categories: - self.assertIsInstance(category, QuestionCategory) - self.assertIn(int(category.id), [3, 4]) - - for position_id in holder.positions: - self.assertIsInstance(holder.positions[position_id], TakenPosition) - self.assertIn(int(holder.positions[position_id].topic.id), [4, 5, 6]) - self.assertIn(int(holder.positions[position_id].position.id), [8, 11, 14]) - with self.assertRaises(Person.DoesNotExist): - holder.positions[position_id].person - - def test_post_with_data_2(self): - data = { - "question-0": "8", - "question-1": "11", - "question-2": "13", - "question-id-0": "4", - "question-id-1": "5", - "question-id-2": "6" - } - url = reverse('soul_mate_detail_view', - kwargs={ - 'slug': self.antofa.slug, - }) - - response = self.client.post(url, data=data) - self.assertEquals(response.status_code, 200) - self.assertTemplateUsed("elections/soulmate_response.html") - self.assertIn("election", response.context) - self.assertEquals(response.context["election"], self.antofa) - self.assertIn("winner", response.context) - self.assertIn("candidate", response.context["winner"]) - self.assertIsInstance(response.context["winner"]["candidate"], Candidate) - self.assertIn("others", response.context) - - candidatos_antofa = self.antofa.candidates.all() - self.assertIn(response.context["winner"]["candidate"], candidatos_antofa) - self.assertGreater(response.context["winner"]['percentage'], 0.0) - - def test_post_with_data_tie(self): - data = { - "question-0": "0", - "question-1": "11", - "question-2": "13", - "question-id-0": "4", - "question-id-1": "5", - "question-id-2": "6" - } - url = reverse('soul_mate_detail_view', - kwargs={ - 'slug': self.antofa.slug, - }) - - response = self.client.post(url, data=data) - self.assertEquals(response.status_code, 200) - self.assertTemplateUsed("elections/soulmate_response.html") - self.assertIn("election", response.context) - self.assertEquals(response.context["election"], self.antofa) - self.assertNotIn("winner", response.context) - self.assertIn("others", response.context) - candidate1 = Candidate.objects.get(id=1) - candidate3 = Candidate.objects.get(id=3) - self.assertEquals(response.context['others'][0]['percentage'], - response.context['others'][1]['percentage']) - self.assertIn(response.context['others'][0]['candidate'], [candidate1, candidate3]) - self.assertIn(response.context['others'][1]['candidate'], [candidate1, candidate3]) - - def test_post_with_data_single_candidate(self): - data = { - "question-0": "0", - "question-1": "11", - "question-2": "13", - "question-id-0": "4", - "question-id-1": "5", - "question-id-2": "6" - } - url = reverse('soul_mate_detail_view', - kwargs={ - 'slug': self.antofa.slug, - }) - candidate2 = Candidate.objects.get(id=2) - candidate3 = Candidate.objects.get(id=3) - candidate2.taken_positions.all().delete() - candidate3.taken_positions.all().delete() - - response = self.client.post(url, data=data) - self.assertEquals(response.status_code, 200) - self.assertTemplateUsed("elections/soulmate_response.html") - self.assertIn("election", response.context) - self.assertEquals(response.context["election"], self.antofa) - self.assertIn("winner", response.context) - - def test_post_with_data_no_candidates(self): - data = { - "question-0": "0", - "question-1": "11", - "question-2": "13", - "question-id-0": "4", - "question-id-1": "5", - "question-id-2": "6" - } - url = reverse('soul_mate_detail_view', - kwargs={ - 'slug': self.antofa.slug, - }) - candidate1 = Candidate.objects.get(id=1) - candidate2 = Candidate.objects.get(id=2) - candidate3 = Candidate.objects.get(id=3) - candidate1.taken_positions.all().delete() - candidate2.taken_positions.all().delete() - candidate3.taken_positions.all().delete() - - response = self.client.post(url, data=data) - self.assertEquals(response.status_code, 200) - self.assertTemplateUsed("elections/soulmate_response.html") - self.assertIn("election", response.context) - self.assertEquals(response.context["election"], self.antofa) - self.assertNotIn("winner", response.context) - self.assertIn("others", response.context) - self.assertFalse(response.context['others']) - - def test_post_with_data_exclude_not_answering_candidates(self): - data = { - "question-0": "0", - "question-1": "11", - "question-2": "13", - "question-id-0": "4", - "question-id-1": "5", - "question-id-2": "6" - } - url = reverse('soul_mate_detail_view', - kwargs={ - 'slug': self.antofa.slug, - }) - # candidate2 hasn't answered anything - candidate2 = Candidate.objects.get(id=2) - candidate2.taken_positions.all().delete() - - response = self.client.post(url, data=data) - self.assertEquals(response.status_code, 200) - self.assertTemplateUsed("elections/soulmate_response.html") - self.assertIn("election", response.context) - self.assertEquals(response.context["election"], self.antofa) - self.assertNotIn("winner", response.context) - self.assertIn("others", response.context) - for c in response.context['others']: - if c['candidate'] == candidate2: - self.fail(u"A candidate without answers is in the response") - self.assertTrue(True) - - - - def test_if_no_taken_position_provided(self): - '''If there is no taken prosition provided''' - data = { - "question-0": "8", - "question-1": "0", # This data is missing - "question-2": "13", - "question-id-0": "4", - "question-id-1": "5", - "question-id-2": "6" - } - url = reverse('soul_mate_detail_view', - kwargs={ - 'slug': self.antofa.slug, - }) - - response = self.client.post(url, data=data) - self.assertEquals(response.status_code, 200) diff --git a/elections/tests/election_detail_views_tests.py b/elections/tests/election_detail_views_tests.py index 1364048b..fd7fd48f 100644 --- a/elections/tests/election_detail_views_tests.py +++ b/elections/tests/election_detail_views_tests.py @@ -141,8 +141,8 @@ def test_it_has_a_percentage_of_similitude(self): url = reverse('face_to_face_two_candidates_detail_view', kwargs={ 'slug': self.tarapaca.slug, - 'slug_candidate_one': candidate1.id, - 'slug_candidate_two': candidate2.id, + 'slug_candidate_one': candidate1.slug, + 'slug_candidate_two': candidate2.slug, }) response = self.client.get(url) @@ -159,8 +159,8 @@ def test_it_returns_zero_if_there_are_no_questions(self): url = reverse('face_to_face_two_candidates_detail_view', kwargs={ 'slug': self.tarapaca.slug, - 'slug_candidate_one': candidate1.id, - 'slug_candidate_two': candidate2.id, + 'slug_candidate_one': candidate1.slug, + 'slug_candidate_two': candidate2.slug, }) response = self.client.get(url) @@ -178,26 +178,3 @@ def test_election_has_anyone_answered(self): position = topic.positions.first() c.taken_positions.create(topic=topic, position=position) self.assertTrue(self.tarapaca.has_anyone_answered()) - - -class SoulMateTestCase(TestCase): - def setUp(self): - super(SoulMateTestCase, self).setUp() - self.tarapaca = Election.objects.get(id=1) - - def test_url_better_half(self): - url = reverse('soul_mate_detail_view', - kwargs={ - 'slug': self.tarapaca.slug - }) - self.assertTrue(url) - - def test_url_is_reachable_for_better_half(self): - url = reverse('soul_mate_detail_view', - kwargs={ - 'slug': self.tarapaca.slug, - }) - self.assertTrue(url) - response = self.client.get(url) - self.assertEquals(response.status_code, 200) - self.assertTemplateUsed(response, 'elections/soulmate_candidate.html') diff --git a/elections/tests/second_round_tests.py b/elections/tests/second_round_tests.py index 1189e38c..a9d46683 100644 --- a/elections/tests/second_round_tests.py +++ b/elections/tests/second_round_tests.py @@ -5,8 +5,6 @@ from candidator.models import TakenPosition from django.core.management import call_command from django.utils.six import StringIO -from preguntales.models import Message, Answer -from constance.test import override_config class SecondRoundCreationTestCase(TestCase): @@ -62,38 +60,6 @@ def test_copy_questions(self): for position in topic.positions.all(): self.assertTrue(_topic.positions.filter(label=position.label)) - def test_copy_messages_and_answers(self): - candidate3 = Candidate.objects.get(id=6) - message = Message.objects.create(election=self.tarapaca, - author_name='author', - author_email='author@email.com', - subject='subject', - content='content', - slug=u'subject-slugified', - accepted=True - ) - message.people.add(self.adela) - message.people.add(self.carlos) - message.people.add(candidate3) - - answer = Answer.objects.create(content=u'Hey I\'ve had to speak english in the last couple of days', - message=message, - person=self.adela - ) - sc = SecondRoundCreator(self.tarapaca) - sc.pick_one(self.adela) - sc.pick_one(self.carlos) - second_round = sc.get_second_round() - the_copied_message = second_round.messages.get() - self.assertNotEquals(the_copied_message.id, message.id) - self.assertEquals(the_copied_message.author_name, message.author_name) - self.assertEquals(the_copied_message.subject, message.subject) - self.assertEquals(the_copied_message.content, message.content) - the_copied_answer = the_copied_message.answers.get() - self.assertNotEquals(the_copied_answer.id, answer.id) - self.assertEquals(the_copied_answer.content, answer.content) - self.assertEquals(the_copied_answer.person, self.adela) - def test_management_command(self): out = StringIO() previous_count = Election.objects.all().count() diff --git a/elections/tests/template_tags_tests.py b/elections/tests/template_tags_tests.py index 118bf7b3..9825a2f3 100644 --- a/elections/tests/template_tags_tests.py +++ b/elections/tests/template_tags_tests.py @@ -21,7 +21,6 @@ from django.shortcuts import render from constance import config from constance.test import override_config -from votita.models import KidsProposal class TemplateTagsTestCase(TestCase): def setUp(self): @@ -141,40 +140,6 @@ def test_get_taken_position_by_candidate(self): actual_rendered_template = template.render(context) self.assertEqual(expected_template, actual_rendered_template) - def test_explanation_template_tag(self): - '''Given an explanation of 1/2 naranja display it''' - - antofa = Election.objects.get(id=2) - data = { - "question-0": "8", - "question-1": "11", - "question-2": "13", - "question-id-0": "4", - "question-id-1": "5", - "question-id-2": "6" - } - url = reverse('soul_mate_detail_view', - kwargs={ - 'slug': antofa.slug, - }) - - response = self.client.post(url, data=data) - explanation_from_html = response.context["winner"]['explanation'] - education_cat = QuestionCategory.objects.get(slug='educacion', election=antofa) - perros_y_gatos_cat = QuestionCategory.objects.get(slug='perros-y-gatos', election=antofa) - freedom2_topic = Topic.objects.get(slug='freedom2') - benito2_topic = Topic.objects.get(slug='benito2') - fiera2_topic = Topic.objects.get(slug='fiera2') - template_str = get_template('elections/soulmate_explanation.html') - - rendered_template = template_str.render({'explanation_container': explanation_from_html, - 'election': antofa}) - self.assertIn(education_cat.name, rendered_template) - self.assertIn(perros_y_gatos_cat.name, rendered_template) - self.assertIn(freedom2_topic.label, rendered_template) - self.assertIn(benito2_topic.label, rendered_template) - self.assertIn(fiera2_topic.label, rendered_template) - def test_filter_times(self): template = Template("{% load votainteligente_extras %}{% for i in 3|times %}hola{% endfor %}") context = Context({}) @@ -476,8 +441,8 @@ def test_twitter_parser_without_at(self): @override_config(MARKED_AREAS=['argentina',]) def test_marked_areas(self): - argentina = Area.objects.create(name=u'Argentina') - chile = Area.objects.create(name=u'Chile') + argentina = Area.objects.create(name=u'Argentina', slug='argentina') + chile = Area.objects.create(name=u'Chile', slug='chile') template = Template("{% load votainteligente_extras %}{% if area|is_marked_area %}si{% else %}no{% endif %}") context = Context({'area': argentina}) @@ -534,7 +499,7 @@ def test_proposal_card(self): actual = popular_proposal.display_card(Context(context)) self.assertEquals(expected, actual) - kids_proposal = KidsProposal.objects.create(proposer=u, + kids_proposal = PopularProposal.objects.create(proposer=u, data=data, title=u'This is a title', clasification=u'education' diff --git a/elections/tests/version2/candidates_flatpages_tests.py b/elections/tests/version2/candidates_flatpages_tests.py deleted file mode 100644 index b9b9636a..00000000 --- a/elections/tests/version2/candidates_flatpages_tests.py +++ /dev/null @@ -1,37 +0,0 @@ -# coding=utf-8 -from elections.tests import VotaInteligenteTestCase as TestCase -from elections.models import Candidate, CandidateFlatPage, Election -from django.core.urlresolvers import reverse - - -class CandidateFlatpagesTestCase(TestCase): - def setUp(self): - self.election = Election.objects.get(id=2) - - def test_instanciate_a_flatpage(self): - - candidate = Candidate.objects.get(id=1) - candidate.person_ptr.id = 'manuel-rojas' - candidate.person_ptr.save() - - page = CandidateFlatPage.objects.create(candidate=candidate, - url="problems", - title="Problems", - content="The content" - ) - self.assertIn(page, candidate.flatpages.all()) - self.assertTrue(page) - self.assertEquals(page.candidate, candidate) - self.assertTrue(page.get_absolute_url()) - url = reverse('candidate_flatpage', kwargs={'election_slug': self.election.slug, - 'slug': candidate.slug, - 'url': page.url - } - ) - response = self.client.get(url) - self.assertEquals(response.status_code, 200) - self.assertIn('flatpage', response.context) - self.assertEquals(response.context['election'], candidate.election) - self.assertEquals(response.context['candidate'], candidate) - self.assertEquals(response.context['flatpage'], page) - self.assertEquals(url, page.get_absolute_url()) diff --git a/elections/tests/version2/elections_per_area_tests.py b/elections/tests/version2/elections_per_area_tests.py index 7b08a05a..01b5030a 100644 --- a/elections/tests/version2/elections_per_area_tests.py +++ b/elections/tests/version2/elections_per_area_tests.py @@ -11,7 +11,7 @@ class ElectionsPerAreaTestCase(TestCase): def test_an_election_can_have_an_area(self): - argentina = Area.objects.create(name=u'Argentina') + argentina = Area.objects.create(name=u'Argentina', slug='argentina') election = Election.objects.create( name='the name', slug='the-slug', @@ -23,26 +23,14 @@ def test_an_election_can_have_an_area(self): self.assertIn(election, argentina.elections.all()) def test_there_is_a_url_with_the_area(self): - argentina = Area.objects.create(name=u'Argentina') + argentina = Area.objects.create(name=u'Argentina', slug='argentina') url = argentina.get_absolute_url() response = self.client.get(url) self.assertEquals(response.status_code, 200) self.assertTemplateUsed(response, 'elections/area.html') - @override_config(HIDDEN_AREAS='argentina') - def test_hidden_area(self): - argentina = Area.objects.create(name=u'Argentina') - self.assertNotIn(argentina, Area.public.all()) - - @override_config(HIDDEN_AREAS='argentina') - def test_hidden_area_is_still_reachable(self): - argentina = Area.objects.create(name=u'Argentina') - url = argentina.get_absolute_url() - response = self.client.get(url) - self.assertEquals(response.status_code, 200) - def test_candidates_per_area(self): - argentina = Area.objects.create(name=u'Argentina') + argentina = Area.objects.create(name=u'Argentina', slug='argentina') election = Election.objects.create( name='the name', slug='the-slug', @@ -60,7 +48,7 @@ def test_candidates_per_area(self): self.assertNotIn(c3, argentina.candidates().all()) def test_area_ranking(self): - argentina = Area.objects.create(name=u'Argentina') + argentina = Area.objects.create(name=u'Argentina', slug='argentina') election = Election.objects.create( name='the name', slug='the-slug', @@ -78,7 +66,7 @@ def test_area_ranking(self): self.assertNotIn(c3, election.ranking().all()) def test_get_position_in_ranking(self): - argentina = Area.objects.create(name=u'Argentina') + argentina = Area.objects.create(name=u'Argentina', slug='argentina') election = Election.objects.create( name='the name', slug='the-slug', @@ -105,7 +93,7 @@ def test_get_position_in_ranking(self): def test_get_position_no_questions(self): QuestionCategory.objects.all().delete() - argentina = Area.objects.create(name=u'Argentina') + argentina = Area.objects.create(name=u'Argentina', slug='argentina') election = Election.objects.create( name='the name', @@ -133,7 +121,7 @@ def test_get_position_no_questions(self): @override_config(DEFAULT_AREA='argentina') def test_area_index_view(self): - argentina = Area.objects.create(name=u'Argentina', id='argentina') + argentina = Area.objects.create(name=u'Argentina', slug='argentina') election = Election.objects.create( name='the name', area=argentina) @@ -143,7 +131,7 @@ def test_area_index_view(self): self.assertTrue(response.context['default_election']) def test_area_index_view_if_not_default_area(self): - argentina = Area.objects.create(name=u'Argentina', id='argentina-pais') + argentina = Area.objects.create(name=u'Argentina', slug='argentina') election = Election.objects.create( name='the name', area=argentina) @@ -160,7 +148,7 @@ def test_get_all_candidates_if_show_all_candidates_is_true(self): second_e = Election.objects.get(id=2) second_e.position = 'senador' second_e.save() - argentina = Area.objects.create(name=u'Argentina', id='argentina') + argentina = Area.objects.create(name=u'Argentina', slug='argentina') election = Election.objects.create( name='the name', area=argentina) @@ -196,8 +184,8 @@ def test_get_area_parents_prevent_cicles(self): @override_settings(FILTERABLE_AREAS_TYPE = ['Comuna']) def test_areas_redirect_when_necesary(self): - child = Area.objects.create(name="children", classification="Comuna") - mother = Area.objects.create(name="mother") + child = Area.objects.create(name="children", classification="Comuna", slug='children') + mother = Area.objects.create(name="mother", slug='mother') mother.children.add(child) url = child.get_absolute_url() @@ -205,15 +193,15 @@ def test_areas_redirect_when_necesary(self): url_mother = mother.get_absolute_url() self.assertRedirects(response, url_mother) - child2 = Area.objects.create(name="children", classification="Comuna") + child2 = Area.objects.create(name="children", classification="Comuna", slug='children2') url = child2.get_absolute_url() response = self.client.get(url) self.assertEquals(response.status_code, 200) @override_settings(FILTERABLE_AREAS_TYPE = ['Comuna']) def test_related_areas_elections(self): - child = Area.objects.create(name="children", classification="Comuna") - mother = Area.objects.create(name="mother") + child = Area.objects.create(name="children", classification="Comuna", slug='children') + mother = Area.objects.create(name="mother", slug='mother') mother.children.add(child) Election.objects.create(name='the election_mother', @@ -223,7 +211,7 @@ def test_related_areas_elections(self): position='alcalde', extra_info_content=u'Más Información') - grand_mother = Area.objects.create(name="grand_mother") + grand_mother = Area.objects.create(name="grand_mother", slug='grand-mother') grand_mother.children.add(mother) Election.objects.create(name='the election_grand_mother', @@ -243,7 +231,7 @@ def test_related_areas_elections(self): class AreaOGPTestCase(TestCase): def setUp(self): - self.argentina = Area.objects.create(name=u'Argentina') + self.argentina = Area.objects.create(name=u'Argentina', slug='argentina') self.site = Site.objects.get_current() def test_get_absolute_url(self): diff --git a/elections/urls.py b/elections/urls.py index c0fe7804..02a11ff0 100644 --- a/elections/urls.py +++ b/elections/urls.py @@ -9,13 +9,9 @@ CandidateDetailView, FaceToFaceView, AreaDetailView, - CandidateFlatPageDetailView, KnowYourCandidatesView, ) -from elections.soul_mate import SoulMateDetailView - -from django.views.decorators.csrf import csrf_exempt from django.views.decorators.clickjacking import xframe_options_exempt from django.views.decorators.cache import cache_page @@ -48,14 +44,6 @@ url(r'^eleccion/(?P[-\w]+)/face-to-face/?$', cache_page(60 * settings.CACHE_MINUTES)(ElectionDetailView.as_view(template_name='elections/compare_candidates.html')), name='face_to_face_no_candidate_detail_view'), - #soulmate - url(r'^eleccion/(?P[-\w]+)/soul-mate/?$', - csrf_exempt(SoulMateDetailView.as_view(template_name='elections/soulmate_candidate.html')), - name='soul_mate_detail_view'), - #soulmate - url(r'^eleccion/(?P[-\w]+)/embedded-soul-mate/?$', - xframe_options_exempt(csrf_exempt(SoulMateDetailView.as_view(template_name='elections/soulmate_candidate.html', layout="elections/embedded.html"))), - name='embedded_soul_mate_detail_view'), url(r'^eleccion/(?P[-\w]+)/(?P[-\w]+)/?$', cache_page(60 * settings.CACHE_MINUTES)(CandidateDetailView.as_view(template_name='elections/candidate_detail.html')), @@ -65,11 +53,6 @@ cache_page(60 * settings.CACHE_MINUTES)(CandidateDetailView.as_view(template_name='elections/candidate_detail.html')), name='candidate_detail_view_area' ), - # End Preguntales - url(r'^eleccion/(?P[-\w]+)/(?P[-\w]+)/(?P[-\w]+)/?$', - cache_page(60 * settings.CACHE_MINUTES)(CandidateFlatPageDetailView.as_view()), - name='candidate_flatpage' - ), url(r'^eleccion/(?P[-\w]+)/extra_info.html$', ElectionDetailView.as_view(template_name='elections/extra_info.html'), name='election_extra_info'), diff --git a/elections/views.py b/elections/views.py index 39515f52..ab9a7ac8 100644 --- a/elections/views.py +++ b/elections/views.py @@ -5,7 +5,7 @@ from django.views.generic import DetailView from django.views.generic.base import TemplateView from elections.models import Election, Area -from elections.models import Candidate, QuestionCategory, CandidateFlatPage +from elections.models import Candidate, QuestionCategory from votai_utils.views import HomeViewBase import logging from backend_citizen.forms import GroupCreationForm @@ -107,13 +107,14 @@ class ElectionDetailView(ElectionDetailViewBase): def get_context_data(self, **kwargs): context = super(ElectionDetailView, self).get_context_data(**kwargs) if 'slug_candidate_one' in self.kwargs: - if self.object.candidates.filter(id=self.kwargs['slug_candidate_one']).exists(): + if self.object.candidates.filter(slug=self.kwargs['slug_candidate_one']).exists(): context['first_candidate'] = self.object.candidates\ - .get(id=self.kwargs['slug_candidate_one']) + .get(slug=self.kwargs['slug_candidate_one']) if 'slug_candidate_two' in self.kwargs: - if self.object.candidates.filter(id=self.kwargs['slug_candidate_two']).exists(): + if self.object.candidates.filter(slug=self.kwargs['slug_candidate_two']).exists(): context['second_candidate'] = self.object.candidates\ - .get(id=self.kwargs['slug_candidate_two']) + .get(slug=self.kwargs['slug_candidate_two']) + return context @@ -182,7 +183,7 @@ def get_object(self, queryset=None): if candidate is None: candidate = super(CandidateDetailView, self).get_object(queryset) cache.set(cache_key, candidate, 60 * config.INFINITE_CACHE) - cache_key_ranking = u'ranking-for-' + candidate.id + cache_key_ranking = u'ranking-for-' + str(candidate.id) _candidate = cache.get(cache_key_ranking) if _candidate is None: try: @@ -213,7 +214,6 @@ def dispatch(self, request, *args, **kwargs): return HttpResponseRedirect(Area.objects.get(id=area.parent.id).get_absolute_url()) return super(AreaDetailView, self).dispatch(request, *args, **kwargs) - def get_context_data(self, **kwargs): context = super(AreaDetailView, self).get_context_data(**kwargs) initial = self.request.GET or None @@ -231,28 +231,6 @@ def get_queryset(self, *args, **kwargs): return Area.objects.all() -class CandidateFlatPageDetailView(DetailView): - model = CandidateFlatPage - context_object_name = 'flatpage' - template_name = 'flatpages/candidate_flatpages.html' - - def get_queryset(self): - qs = CandidateFlatPage.objects.filter(candidate__slug=self.kwargs['slug']) - return qs - - def get_object(self, queryset=None): - if queryset is None: - queryset = self.get_queryset() - return get_object_or_404(self.model, url=self.kwargs['url']) - - def get_context_data(self, **kwargs): - context = super(CandidateFlatPageDetailView, self)\ - .get_context_data(**kwargs) - context['election'] = self.object.candidate.election - context['candidate'] = self.object.candidate - return context - - class KnowYourCandidatesView(TemplateView): template_name = "know_your_candidates.html" diff --git a/medianaranja2/forms.py b/medianaranja2/forms.py index 5503e7c7..95fca68e 100644 --- a/medianaranja2/forms.py +++ b/medianaranja2/forms.py @@ -69,7 +69,7 @@ def clean(self): cleaned_data['element_selector'] = Election.objects.get(slug=settings.SECOND_ROUND_ELECTION) else: if cleaned_data['area'] is None: - cleaned_data['area'] = Area.objects.get(id=config.DEFAULT_AREA) + cleaned_data['area'] = Area.objects.get(slug=config.DEFAULT_AREA) if 'area' in cleaned_data.keys(): cleaned_data['element_selector'] = cleaned_data['area'] @@ -195,7 +195,7 @@ def get_categories_form_kwargs(self, cleaned_data): def get_element_selector_from_cleaned_data(self, cleaned_data): if 'element_selector' not in cleaned_data: - return Area.objects.get(id=config.DEFAULT_AREA) + return Area.objects.get(slug=config.DEFAULT_AREA) return cleaned_data['element_selector'] def get_proposals_form_kwargs(self, cleaned_data): diff --git a/medianaranja2/migrations/0001_initial.py b/medianaranja2/migrations/0001_initial.py index c8e8ac62..6b775b10 100644 --- a/medianaranja2/migrations/0001_initial.py +++ b/medianaranja2/migrations/0001_initial.py @@ -1,8 +1,11 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.10.7 on 2017-11-10 23:33 +# Generated by Django 1.11.15 on 2020-05-02 23:56 from __future__ import unicode_literals from django.db import migrations, models +import django.db.models.deletion +import picklefield.fields +import uuid class Migration(migrations.Migration): @@ -10,7 +13,8 @@ class Migration(migrations.Migration): initial = True dependencies = [ - ('elections', '0030_election_candidates_can_commit_everywhere'), + ('contenttypes', '0002_remove_content_type_name'), + ('elections', '0001_initial'), ] operations = [ @@ -22,4 +26,13 @@ class Migration(migrations.Migration): ('candidates', models.ManyToManyField(related_name='groups', to='elections.Candidate')), ], ), + migrations.CreateModel( + name='SharedResult', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('identifier', models.UUIDField(default=uuid.uuid4)), + ('data', picklefield.fields.PickledObjectField(editable=False)), + ('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType')), + ], + ), ] diff --git a/medianaranja2/migrations/0002_sharedresult.py b/medianaranja2/migrations/0002_sharedresult.py deleted file mode 100644 index 65480108..00000000 --- a/medianaranja2/migrations/0002_sharedresult.py +++ /dev/null @@ -1,28 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.7 on 2017-11-16 20:27 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion -import picklefield.fields -import uuid - - -class Migration(migrations.Migration): - - dependencies = [ - ('contenttypes', '0002_remove_content_type_name'), - ('medianaranja2', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='SharedResult', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('identifier', models.UUIDField(default=uuid.uuid4)), - ('data', picklefield.fields.PickledObjectField(editable=False)), - ('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType')), - ], - ), - ] diff --git a/medianaranja2/proposals_getter.py b/medianaranja2/proposals_getter.py index c9958133..f40de568 100644 --- a/medianaranja2/proposals_getter.py +++ b/medianaranja2/proposals_getter.py @@ -11,7 +11,7 @@ class AreaDeterminerMixin(object): def get_default_area(self): - return Area.objects.get(id=settings.DEFAULT_AREA) + return Area.objects.get(slug=settings.DEFAULT_AREA) class ProposalsGetterBase(AreaDeterminerMixin): @@ -43,7 +43,8 @@ def get_elections(self, proposals_container_element): if not proposals_container_element.parent: has_parent = False else: - proposals_container_element = proposals_container_element.parent + parent = proposals_container_element.parent + proposals_container_element = Area.objects.get(id=parent.id) return elections def get_proposals_from_election(self, elections): diff --git a/medianaranja2/tests/adapter_tests.py b/medianaranja2/tests/adapter_tests.py index 45b30cf6..e0abeb2b 100644 --- a/medianaranja2/tests/adapter_tests.py +++ b/medianaranja2/tests/adapter_tests.py @@ -1,6 +1,5 @@ # coding=utf-8 from elections.tests import VotaInteligenteTestCase as TestCase -from popolo.models import Person, ContactDetail from elections.models import Candidate, Election, QuestionCategory, PersonalData, Area from candidator.models import Category, Position, TakenPosition from django.test import override_settings @@ -19,7 +18,7 @@ class MediaNaranjaAdaptersBase(TestCase): popular_proposal_class = PopularProposal commitment_class = Commitment def setUp(self): - a = Area.objects.create(name=u"Territory") + a = Area.objects.create(name=u"Territory", slug='terrytory') self.election = Election.objects.create( name=u'the name', slug=u"the-election", area=a) diff --git a/medianaranja2/tests/forms_tests.py b/medianaranja2/tests/forms_tests.py index f3cd7144..d7af2185 100644 --- a/medianaranja2/tests/forms_tests.py +++ b/medianaranja2/tests/forms_tests.py @@ -5,7 +5,6 @@ from elections.models import QuestionCategory from django.conf import settings from elections.models import Candidate, Election, Area -from constance import config from django import forms from popular_proposal.models import (PopularProposal, Commitment, @@ -21,6 +20,7 @@ def setUp(self): self.setUpProposals() self.setUpQuestions() self.area = Area.objects.create(name="children", + slug='children', classification=settings.FILTERABLE_AREAS_TYPE[0]) self.election.area = self.area self.election.save() @@ -46,7 +46,7 @@ def test_instanciate_category_selection_form(self): @override_config(DEFAULT_AREA='argentina') def test_if_no_area_given_then_selects_the_default_area(self): - argentina = Area.objects.create(name=u'Argentina', id='argentina') + argentina = Area.objects.create(name=u'Argentina', slug='argentina') data = { 'categories': [self.category1.id, self.category2.id] } @@ -80,7 +80,7 @@ def test_get_cleaned_data_from_questions_form(self): self.assertIn(self.position3, form.cleaned_data['positions']) def test_proposals_form_instanciate(self): - argentina = Area.objects.create(name=u'Argentina', id='argentina') + argentina = Area.objects.create(name=u'Argentina', slug='argentina') proposals = PopularProposal.objects.filter(id__in=[self.p1.id, self.p2.id, self.p3.id]) kwargs = {'proposals': proposals, 'element_selector': argentina} form = ProposalsForm(**kwargs) @@ -94,7 +94,7 @@ def test_proposals_form_instanciate(self): self.assertIn(unicode(self.p3), possible_labels[self.p3.id]) def test_posting_proposals_form(self): - argentina = Area.objects.create(name=u'Argentina', id='argentina') + argentina = Area.objects.create(name=u'Argentina', slug='argentina') data = {'proposals': [self.p1.id, self.p2.id]} proposals = PopularProposal.objects.filter(id__in=[self.p1.id, self.p2.id, self.p3.id]) kwargs = {'proposals': proposals,'element_selector': argentina, 'data':data} @@ -140,7 +140,7 @@ def setUp(self): Commitment.objects.create(commited=True, candidate=self.candidate_2_2, proposal=self.p5) mother.children.add(self.child) # Distrito - grand_mother = Area.objects.create(name="grand_mother") + grand_mother = Area.objects.create(name="grand_mother", slug='grand_mother') self.election3 = Election.objects.create(name='election3') self.election3.area = self.child @@ -230,6 +230,7 @@ def setUp(self): self.url = reverse('medianaranja2:index') QuestionCategory.objects.all().delete() self.area = Area.objects.create(name="children", + slug='children', classification=settings.FILTERABLE_AREAS_TYPE[0]) self.election.area = self.area self.election.save() diff --git a/medianaranja2/tests/share_your_results_tests.py b/medianaranja2/tests/share_your_results_tests.py index a205370e..86a90050 100644 --- a/medianaranja2/tests/share_your_results_tests.py +++ b/medianaranja2/tests/share_your_results_tests.py @@ -46,7 +46,7 @@ def test_post_and_create_everything(self): response = self.client.post(url, data=data) result = SharedResult.objects.get() self.assertEquals(result.content_type, content_type) - self.assertEquals(result.data['object_id'], self.c1.id) + self.assertEquals(result.data['object_id'], str(self.c1.id)) self.assertEquals(result.data['percentage'], 75.0) self.assertRedirects(response, result.get_absolute_url()) @@ -72,7 +72,7 @@ def test_share_form(self): self.assertTrue(form.is_valid()) result = form.save() self.assertEquals(result.content_type, content_type) - self.assertEquals(result.data['object_id'], self.c1.id) + self.assertEquals(result.data['object_id'], str(self.c1.id)) self.assertEquals(result.data['percentage'], 75.0) def test_get_actual_object(self): @@ -81,4 +81,4 @@ def test_get_actual_object(self): result = SharedResult.objects.create(data=data, content_type=content_type) - self.assertEqual(result.object, self.c1) \ No newline at end of file + self.assertEqual(result.object, self.c1) diff --git a/medianaranja2/views.py b/medianaranja2/views.py index 9d56106c..f7b92227 100644 --- a/medianaranja2/views.py +++ b/medianaranja2/views.py @@ -1,4 +1,4 @@ - +from django.views.decorators.csrf import csrf_exempt from django.views.generic import DetailView from medianaranja2.models import SharedResult from django.contrib.contenttypes.models import ContentType @@ -68,4 +68,4 @@ def get_medianaranja_view(*args, **kwargs): view = csrf_exempt(view) except: pass - return view(*args, **kwargs) \ No newline at end of file + return view(*args, **kwargs) diff --git a/merepresenta/__init__.py b/merepresenta/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/merepresenta/admin.py b/merepresenta/admin.py deleted file mode 100644 index f3808a83..00000000 --- a/merepresenta/admin.py +++ /dev/null @@ -1,49 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.contrib import admin -from django.conf import settings -from merepresenta.models import Candidate, CandidateQuestionCategory -from django.contrib.auth.models import User - -# Register your models here. - - -class MeRepresentaCandidateAdmin(admin.ModelAdmin): - list_display = ('name', 'username_do_facebook', 'esta_logado') - - actions = ['apagar_datos'] - search_fields = ['name',] - - def esta_logado(self, candidate): - return candidate.candidacy_set.exists() - - def username_do_facebook(self, candidate): - if candidate.candidacy_set.exists(): - return candidate.candidacy_set.first().user.username - return "" - # return candidate.candidacy_set.first().user.username - - def apagar_datos(self, request, queryset): - for candidate in queryset.all(): - User.objects.filter(candidacies__candidate=candidate) - candidate.candidacy_set.all().delete() - candidate.lgbt_desc.clear() - candidate.taken_positions.all().delete() - candidate.candidatequestioncategory_set.all().delete() - - apagar_datos.short_description = u"Apagar dados de candidatas seleccionadas" - - esta_logado.boolean = True - esta_logado.admin_order_field = 'candidacy__user__last_login' - -admin.site.register(Candidate, MeRepresentaCandidateAdmin) - - - -class CandidateQuestionCategoryAdmin(admin.ModelAdmin): - pass - - search_fields = ['candidate__name',] - -admin.site.register(CandidateQuestionCategory, CandidateQuestionCategoryAdmin) \ No newline at end of file diff --git a/merepresenta/apps.py b/merepresenta/apps.py deleted file mode 100644 index 1d4c93d8..00000000 --- a/merepresenta/apps.py +++ /dev/null @@ -1,8 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.apps import AppConfig - - -class MerepresentaConfig(AppConfig): - name = 'merepresenta' diff --git a/merepresenta/candidatos/__init__.py b/merepresenta/candidatos/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/merepresenta/candidatos/forms.py b/merepresenta/candidatos/forms.py deleted file mode 100644 index 82865ad5..00000000 --- a/merepresenta/candidatos/forms.py +++ /dev/null @@ -1,110 +0,0 @@ -# coding=utf-8 -from django import forms -import re -from backend_candidate.models import Candidacy -from merepresenta.models import Candidate, QuestionCategory, CandidateQuestionCategory -from backend_candidate.forms import MediaNaranjaSingleCandidateMixin, MediaNaranjaSingleCategoryMixin - - -class CPFAndDdnFormBase(forms.Form): - cpf = forms.CharField(required=True) - nascimento = forms.DateField(required=True, input_formats=['%d/%m/%Y','%d/%m/%y', '%d-%m-%Y', '%d-%m-%y', '%m/%d/%Y', '%Y-%m-%d']) - - def get_me_the_numbers_from_a_cpf(self, cpf): - cpf = re.sub('[^0-9]','', cpf) - cpf = unicode(int(cpf)) - return cpf - -class CPFAndDdnForm(CPFAndDdnFormBase): - def __init__(self, *args, **kwargs): - self.user = kwargs.pop('user') - super(CPFAndDdnForm, self).__init__(*args, **kwargs) - - def clean(self): - cpf = self.cleaned_data['cpf'] - cpf = self.get_me_the_numbers_from_a_cpf(cpf) - ddn = self.cleaned_data.get('nascimento', None) - if ddn is None: - raise forms.ValidationError(u'Não encontramos o candidato') - try: - self.candidate = Candidate.objects.get(cpf=cpf, data_de_nascimento=ddn) - except Candidate.DoesNotExist: - raise forms.ValidationError(u'Não encontramos o candidato') - return self.cleaned_data - - def save(self): - return Candidacy.objects.create(user=self.user, candidate=self.candidate) - - -class CPFAndDdnForm2(CPFAndDdnFormBase): - - def clean(self): - cpf = self.cleaned_data['cpf'] - cpf = self.get_me_the_numbers_from_a_cpf(cpf) - ddn = self.cleaned_data.get('nascimento', None) - if ddn is None: - raise forms.ValidationError(u'Não encontramos o candidato') - try: - self.candidate = Candidate.objects.get(cpf=cpf, data_de_nascimento=ddn) - except Candidate.DoesNotExist: - raise forms.ValidationError(u'Não encontramos o candidato') - return self.cleaned_data - - def get_candidate(self): - return self.candidate - - -class MeRepresentaCandidateAnsweringForm(MediaNaranjaSingleCandidateMixin, forms.Form, MediaNaranjaSingleCategoryMixin): - def __init__(self, *args, **kwargs): - super(MeRepresentaCandidateAnsweringForm, self).__init__(*args, **kwargs) - self.set_fields_for(self.category) - for field in self.fields: - if isinstance(self.fields[field], forms.fields.ChoiceField): - self.fields[field].required = True - - def save(self): - self.save_answer_for(self.category) - - - - -def get_form_class_from_category(category, candidate): - class OnDemandMeRepresentaCandidateAnsweringForm(MeRepresentaCandidateAnsweringForm): - def __init__(self, *args, **kwargs): - self.category = category - kwargs['candidate'] = candidate - super(OnDemandMeRepresentaCandidateAnsweringForm, self).__init__(*args, **kwargs) - - return OnDemandMeRepresentaCandidateAnsweringForm - -class CategoryCandidateForm(MediaNaranjaSingleCandidateMixin, forms.Form): - categories = forms.ModelMultipleChoiceField(queryset=QuestionCategory.objects.all(), - label=u'Agora escolha 3 temas que são prioridades na sua candidatura!', - widget=forms.CheckboxSelectMultiple(attrs={'class':"categories-select"})) - - def save(self): - CandidateQuestionCategory.objects.filter(candidate=self.candidate).delete() - for category in self.cleaned_data['categories']: - if not isinstance(self.candidate, Candidate): - self.candidate = Candidate.objects.get(candidate_ptr_id=self.candidate.id) - CandidateQuestionCategory.objects.create(category=category, candidate=self.candidate) - -def get_last_form(candidate): - class OnDemandMeRepresentaCandidateCategoryForm(CategoryCandidateForm): - def __init__(self, *args, **kwargs): - kwargs['candidate'] = candidate - super(OnDemandMeRepresentaCandidateCategoryForm, self).__init__(*args, **kwargs) - - return OnDemandMeRepresentaCandidateCategoryForm - -def get_form_classes_for_questions_for(candidate): - result = [] - categories = QuestionCategory.objects.all() - for category in categories: - form_class = get_form_class_from_category(category, candidate) - result.append(form_class) - - result.append(get_last_form(candidate)) - return result - - diff --git a/merepresenta/candidatos/strategy.py b/merepresenta/candidatos/strategy.py deleted file mode 100644 index 5e9af430..00000000 --- a/merepresenta/candidatos/strategy.py +++ /dev/null @@ -1,28 +0,0 @@ -from social_django.strategy import DjangoStrategy -from django.shortcuts import resolve_url -from django.contrib.auth import authenticate -from backend_candidate.models import Candidacy -from merepresenta.models import Candidate - - -class CandidateStrategy(DjangoStrategy): - - def get_setting(self, name): - if name in ['NEW_USER_REDIRECT_URL', 'LOGIN_REDIRECT_URL', 'SOCIAL_AUTH_FACEBOOK_LOGIN_REDIRECT_URL']: - return resolve_url('cpf_and_date') - return super(CandidateStrategy, self).get_setting(name) - - def create_user(self, *args, **kwargs): - user = super(CandidateStrategy, self).create_user(*args, **kwargs) - slug = self.session_get('facebook_slug') - c = Candidate.objects.get(slug=slug) - Candidacy.objects.create(user=user, candidate=c) - return user - - def authenticate(self, backend, *args, **kwargs): - kwargs['strategy'] = self - kwargs['storage'] = self.storage - kwargs['backend'] = backend - if 'request' in kwargs: - kwargs.pop('request') - return authenticate(*args, **kwargs) \ No newline at end of file diff --git a/merepresenta/candidatos/urls.py b/merepresenta/candidatos/urls.py deleted file mode 100644 index 56b520c4..00000000 --- a/merepresenta/candidatos/urls.py +++ /dev/null @@ -1,43 +0,0 @@ - -from django.conf.urls import url, include -from .views import (LoginView, - CPFAndDDNSelectView, - CPFAndDDNSelectView2, - CompleteProfileView, - complete, - auth, - get_pautas_view, - MeRepresentaCandidateDetailView, - ) - - - -urlpatterns = [ - url(r'^login_after/?$', - LoginView.as_view(), - name='candidate_login'), - - url(r'^cpf_e_ddn/?$', - CPFAndDDNSelectView.as_view(), - name='cpf_and_date'), - url(r'^login/?$', - CPFAndDDNSelectView2.as_view(), - name='cpf_and_date2'), - url(r'^profile/(?P[-\w]+)/(?P[-\w]+)/?$', - CompleteProfileView.as_view(), - name='merepresenta_complete_profile'), - url(r'^complete/(?P[^/]+)$', - complete, - name='candidate_social_complete' - ), - url(r'^login/(?P[^/]+)/(?P[^/]+)?$', auth, - name='candidato_social_begin'), - url(r'^complete_pautas/?$', - get_pautas_view, - name='complete_pautas'), - url(r'^(?P[^/]+)/?$', - MeRepresentaCandidateDetailView.as_view(), - name='candidate_profile'), - - -] diff --git a/merepresenta/candidatos/views.py b/merepresenta/candidatos/views.py deleted file mode 100644 index 5f6550b9..00000000 --- a/merepresenta/candidatos/views.py +++ /dev/null @@ -1,171 +0,0 @@ -from django.views.generic.edit import FormView -from django.contrib.auth.mixins import LoginRequiredMixin -from django.core.urlresolvers import reverse_lazy -from django.http import HttpResponseNotFound, HttpResponseRedirect -from backend_candidate.models import Candidacy -from backend_candidate.views import ProfileView -from .forms import CPFAndDdnForm, CPFAndDdnForm2, get_form_classes_for_questions_for -from social_core.actions import do_complete, do_auth -from social_django.views import _do_login -from django.views.decorators.cache import never_cache -from django.views.decorators.csrf import csrf_exempt -from social_django.utils import psa, STORAGE, get_strategy -from django.views.generic.base import TemplateView -from backend_candidate.models import is_candidate -from django.template.response import TemplateResponse -from django.shortcuts import get_object_or_404 -from django.utils.decorators import method_decorator -from django.contrib.auth.decorators import login_required -from merepresenta.models import Candidate, QuestionCategory -from django.core.urlresolvers import reverse -from merepresenta.forms import PersonalDataForm -from django.shortcuts import render -from django.utils.decorators import classonlymethod -from formtools.wizard.views import SessionWizardView -from django.views.generic import DetailView - -class LoginView(TemplateView): - template_name="candidatos/login.html" - - def dispatch(self, *args, **kwargs): - if self.request.user.is_authenticated: - url = reverse_lazy('cpf_and_date2') - return HttpResponseRedirect(url) - return super(LoginView, self).dispatch(*args, **kwargs) - - -class CPFAndDDNSelectView(LoginRequiredMixin, FormView): - form_class = CPFAndDdnForm - template_name = 'candidatos/cpf_and_ddn.html' - # login_url = reverse_lazy('') - def dispatch(self, *args, **kwargs): - if not self.request.user.is_authenticated: - return HttpResponseRedirect(reverse_lazy('index')) - if self.request.user.is_staff: - return HttpResponseNotFound() - try: - c = Candidacy.objects.get(user=self.request.user) - election = c.candidate.election - candidate = c.candidate - url = reverse_lazy('merepresenta_complete_profile', kwargs={'slug': election.slug, 'candidate_slug': candidate.slug}) - return HttpResponseRedirect(url) - except Candidacy.DoesNotExist: - pass - - return super(CPFAndDDNSelectView, self).dispatch(*args, **kwargs) - - def get_form_kwargs(self): - original = super(CPFAndDDNSelectView, self).get_form_kwargs() - original['user'] = self.request.user - return original - - def form_valid(self, form): - form.save() - return super(CPFAndDDNSelectView, self).form_valid(form) - - - def get_success_url(self): - c = Candidacy.objects.get(user=self.request.user) - return c.get_complete_profile_url() - - -class CPFAndDDNSelectView2(FormView): - form_class = CPFAndDdnForm2 - template_name = 'candidatos/candidato-form.html' - - def dispatch(self, *args, **kwargs): - if self.request.user.is_staff: - return HttpResponseNotFound() - - if is_candidate(self.request.user): - user = self.request.user - candidacy = user.candidacies.first() - url = reverse_lazy('merepresenta_complete_profile', kwargs={'slug': candidacy.candidate.election.slug, - 'candidate_slug': candidacy.candidate.slug}) - return HttpResponseRedirect(url) - return super(CPFAndDDNSelectView2, self).dispatch(*args, **kwargs) - - def form_valid(self, form): - self.candidate = form.get_candidate() - context = {'candidate': self.candidate} - response = render(self.request, 'candidatos/login_with_facebook.html', context) - return response - -def load_strategy(request=None): - return get_strategy('merepresenta.candidatos.strategy.CandidateStrategy', STORAGE, request) - -@never_cache -@csrf_exempt -@psa(load_strategy=load_strategy, redirect_uri='candidate_social_complete') -def complete(request, backend, *args, **kwargs): - return do_complete(request.backend, _do_login, request.user, - redirect_value='next', request=request, - *args, **kwargs) - -@never_cache -@psa('candidate_social_complete') -def auth(request, backend, slug): - candidate = get_object_or_404(Candidate, slug=slug) - request.backend.strategy.session_set('facebook_slug', slug) - return do_auth(request.backend) - - -class CompleteProfileView(ProfileView): - candidate_model = Candidate - - def dispatch(self, *args, **kwargs): - candidate = get_object_or_404(self.candidate_model, - slug=self.kwargs['candidate_slug']) - if candidate.candidatequestioncategory_set.exists(): - return HttpResponseRedirect(candidate.get_absolute_url()) - return super(CompleteProfileView, self).dispatch(*args, **kwargs) - - def get_form_class(self): - return PersonalDataForm - - def get_success_url(self): - url = reverse('complete_pautas') - return url - - -class CompletePautasWizardView(SessionWizardView): - template_name = 'base_pautas.html' - def process_step(self, form): - data = self.get_form_step_data(form) - form.save() - return data - - def done(self, form_list, **kwargs): - candidate = None - context = { - 'form_data': [form.cleaned_data for form in form_list], - } - if form_list: - candidate = Candidate.objects.get(candidate_ptr=form_list[0].candidate) - context['candidate'] = candidate - - return render(self.request, 'candidatos/obrigado_pela_suas_respostas.html', context) - - -def get_pautas_view(request, *args, **kwargs): - user = request.user - if not user.is_authenticated or not user.candidacies.count(): - return HttpResponseRedirect(reverse('index')) - candidate = request.user.candidacies.first().candidate - forms = get_form_classes_for_questions_for(candidate) - class OnDemandCompletePautas(CompletePautasWizardView): - form_list = forms - return OnDemandCompletePautas.as_view()(request, *args, **kwargs) - - -class MeRepresentaCandidateDetailView(DetailView): - model = Candidate - slug_field = 'slug' - context_object_name = 'candidate' - template_name='merepresenta/candidate_detail.html' - - - def get_context_data(self, *args, **kwargs): - context = super(MeRepresentaCandidateDetailView, self).get_context_data(*args, **kwargs) - context['categories'] = QuestionCategory.objects.all() - return context diff --git a/merepresenta/datos_iniciales.py b/merepresenta/datos_iniciales.py deleted file mode 100644 index 41d766e5..00000000 --- a/merepresenta/datos_iniciales.py +++ /dev/null @@ -1,76 +0,0 @@ -QuestionCategory.objects.all().delete() -Topic.objects.all().delete() -Position.objects.all().delete() -cat = QuestionCategory.objects.create(name=u"#Gênero") -Topic.objects.create(category=cat, description="A prática de aborto é crime no Brasil: mulheres e médicos que praticam aborto ilegal podem ser presos. Uma em cada cinco mulheres já fez aborto no país e, por ano, cerca de 1 milhão de abortos são realizados. Metade das mulheres que praticam aborto ilegal acabam tendo complicações médicas e precisam ser internadas e muitas delas morrem. O Supremo Tribunal Federal fez recentemente uma audiência pública sobre o tema, com participação da sociedade civil e de pesquisadores, e vai decidir se mulheres com gravidez de até 12 semanas podem abortar (ADPF 442).", - label=u"Legalização do aborto") -Topic.objects.create(category=cat, description="Cerca de 12 mulheres são assassinadas por dia no Brasil. O feminicídio (assassinato motivado pela vítima ser mulher) atinge principalmente mulheres negras e de baixa renda. Mesmo depois de três anos da lei do feminicídio ter sido aprovada no Brasil, os seus efeitos ainda não podem ser medidos. A falta de dados oficiais dificulta o combate a este tipo de violência contra mulheres. A aplicação efetiva da lei do feminicídio depende de seu monitoramento pelos órgãos públicos, responsáveis pela coleta e divulgação dos dados.", - label=u"Monitoramento da Lei do feminicídio") - -Topic.objects.create(category=cat, description="27% da população: essa é a porcentagem de mulheres negras no Brasil. Mas no Congresso Nacional, elas são apenas 2%. Mulheres brancas também são minoria na política, a diferença é que elas têm 3 vezes mais chances de ganhar uma eleição do que mulheres negras. Dentro dos partidos políticos, apenas 2,5% dos recursos são destinados para candidaturas de mulheres negras. Hoje está no Tribunal Superior Eleitoral uma consulta pública que exige um investimento mínimo de dinheiro dos partidos em candidatas negras.", - label=u"Financiamento público de campanhas de mulheres negras") - -cat = QuestionCategory.objects.create(name=u"#Raça") -Topic.objects.create(category=cat, description="A Constituição protege a liberdade religiosa e a Lei de Crimes Ambientais proíbe maus tratos contra animais. Abates religiosos são praticados por judeus, muçulmanos e fiéis de religiões afro-brasileiras de um jeito que provoca morte instantânea, com mínimo de dor. Tribunais do Rio Grande do Sul e São Paulo já decidiram que estes casos não são maus tratos. Agora o Supremo Tribunal Federal dará a palavra final sobre o assunto (RE 494601).", - label=u"Tornar crime o abate religioso de animais") -Topic.objects.create(category=cat, description="Apenas 10% das mulheres negras e 7% dos homens negros têm acesso à universidade, mostrando que esse espaço ainda não é democrático e não representa a realidade da população brasileira. O valor médio do salário da população negra é quase metade do valor do salário da população branca (60%). As ações afirmativas, como cotas raciais nas universidades, servem para mudar esse cenário. Em 2012, o Supremo Tribunal Federal entendeu que as cotas raciais são um direito e ajudam a corrigir o histórico de racismo e escravidão no Brasil.", - label=u"Cotas raciais nas universidades") -Topic.objects.create(category=cat, description="Mulheres negras sofrem com preconceito racial no atendimento de saúde no SUS. Em relação a mulheres brancas, recebem menos anestesia no parto, esperam mais tempo por atendimento, têm menos acesso a exames médicos, como mamografia, e 60% das vítimas de mortalidade materna no país são negras..", - label=u"Prioridade no atendimento de mulheres negras no SUS ") - -cat = QuestionCategory.objects.create(name=u"#LGBTs") -Topic.objects.create(category=cat, description="O Brasil é um dos países que mais mata LGBTs no mundo, em especial travestis e transexuais. Mas não há legislação que considere crime o preconceito contra lésbicas, transexuais e travestis, bissexuais, gays. Propostas para tornar crime o preconceito contra LGBTs estão sendo discutidas no Congresso Nacional (PL 134/2018, PL 515/2017 e 7582/2014).", - label=u"O preconceito contra LGBTs deve ser crime") -Topic.objects.create(category=cat, description="A população transexual e travesti é frequentemente impedida de usar banheiros de acordo com sua identidade de gênero. Não existe uma legislação sobre o assunto. Porém, o Supremo Tribunal Federal iniciou essa discussão em 2015, dizendo que não permitir o uso de banheiros conforme identidade de gênero feriria a dignidade humana, mas o julgamento foi suspenso (RE 845779).", - label=u"Trans e travestis podem usar o banheiro que quiserem") -Topic.objects.create(category=cat, description="“Escola sem partido” é nome dado a uma série de projetos lei que têm sido apresentados nos municípios, estados e também no Congresso Nacional (PL 7180/2014), que querem tirar o ensino sobre raça, classe social, gênero, identidade de gênero e orientação sexual nas escolas. 73% dos estudantes LGBTs já sofreu agressão verbal, 60% se sente inseguro e 36% já sofreu violência física nas escolas.", - label=u"Projeto “Escola sem partido”") - -cat = QuestionCategory.objects.create(name=u"#Povos tradicionais & Meio Ambiente") -Topic.objects.create(category=cat, description="A demarcação de terras é uma luta histórica dos povos indígenas e quilombolas, por conta de seus vínculos históricos, culturais e ancestrais com o território. Uma série de iniciativas quer impedir o direito à terra que esses povos têm, seja no Congresso Nacional (PEC 215/2000), seja no judiciário. É o caso do “marco temporal”, argumento usado por alguns juízes para limitar o direito à terra apenas para os povos tradicionais que estivessem vivendo nela em 5 de outubro de 1988. Mas isso ignora que esses povos tradicionais foram expulsos e impedidos de retornar a suas terras.", - label=u"Marco temporal na demarcação de terra ") -Topic.objects.create(category=cat, description="Nos últimos 30 anos de democracia no Brasil, apenas um representante indígena foi eleito para o Congresso Nacional, apesar dos indígenas serem 0,4% da população brasileira. Para mudar esse cenário, recursos públicos para campanhas ou cadeiras no Congresso poderiam ser reservados a candidaturas de indígenas.", - label=u"Cotas para indígenas no Congresso") -Topic.objects.create(category=cat, description="O Brasil é campeão mundial no consumo de agrotóxicos, mercado que gira bilhões de dólares todos os anos. Mais da metade dos alimentos consumidos pelos brasileiros está contaminado por agrotóxicos e milhares de pessoas são atendidas pelo SUS com sintomas de intoxicação. O tema está sendo discutido no Congresso (PL 6299/2002), para permitir ainda mais o uso de alimentos com agrotóxicos.", - label=u"Facilitar uso de agrotóxico") - - -cat = QuestionCategory.objects.create(name=u"#Trabalho, Saúde e Educação") -Topic.objects.create(category=cat, description="A reforma trabalhista aprovada no atual governo criou algumas formas precárias de contratação, como o contrato intermitente, enfraqueceu os sindicatos ao retirar a contribuição sindical obrigatória, permitiu o trabalho insalubre da mulher gestante e retirou o acesso gratuito do trabalhador à justiça.", - label=u"Reforma trabalhista") -Topic.objects.create(category=cat, description="O governo atual adotou uma política econômica conhecida por “teto de gastos públicos”, para limitar os gastos públicos federais. Essa política é formada por algumas medidas como: congelamento de gastos sociais com políticas para a saúde, educação e seguro desemprego pelos próximos 20 anos. A ONU condenou tais medidas, por afetarem a população mais pobre. Ainda assim, ela foi aprovada no Congresso Nacional pela Emenda Constitucional 95.", - label=u"Teto de gastos públicos") - - - -cat = QuestionCategory.objects.create(name=u"#Segurança e Direitos Humanos") -Topic.objects.create(category=cat, description="“Auto de resistência” era o nome dado pela polícia ao homicídio de pessoas que ofereceram “resistência à prisão”. Na prática, significava dizer que esses homicídios eram praticados por policiais em legítima defesa. O problema é que esses casos acabam não sendo investigados e, dos que são, 98% são arquivados. Hoje essa expressão foi proibida, mas outras parecidas, como 'mortes em decorrência de ação policial', continuam sendo usadas pela polícia.", - label=u"Autos de resistência") -Topic.objects.create(category=cat, description="Nossa Constituição não permite que menores de 18 anos sejam processados e presos como adultos, mas permite que esses adolescentes sejam internados em Fundações Casa. Alguns membros do Congresso Nacional defendem a alteração da Constituição para reduzir a “maioridade penal” (PEC 171/93 e PEC 33/12), ou seja, que possam ser presos como adultos. Como não estão conseguindo, agora tentam outra estratégia: aumentar o tempo que os adolescentes passam internados (PL 7197/02). Estudos comprovam que a redução da maioridade penal em diferentes países não levou à redução da criminalidade.", - label=u"Redução de maioridade penal") - -cat = QuestionCategory.objects.create(name=u"#Corrupção") -Topic.objects.create(category=cat, description="Hoje existem 32 deputados federais e 8 senadores no Congresso Nacional que são donos de emissoras de rádio e TV. Assim eles podem influenciar o que a mídia fala sobre eles. Esses veículos de comunicação são concessões públicas que dependem de autorização do próprio Congresso Nacional, ou seja, dos próprios deputados federais e senadores. Duas ações no Supremo Tribunal Federal questionam se essa situação viola a nossa Constituição (ADPF 246 e ADPF 379).", - label=u"Políticos serem donos de emissoras de rádio e TV") -Topic.objects.create(category=cat, description="Todos os partidos políticos recebem dinheiro público do chamado “Fundo Partidário”. Nas eleições de 2018, pela primeira vez, também receberão 1,7 bilhão de reais de dinheiro público para financiar suas campanhas eleitorais de um “Fundo Especial de Financiamento de Campanha”. As lideranças dos partidos têm liberdade para escolher como gastar esse dinheiro e não existe um controle da sociedade sobre esses gastos. A obrigação dos partidos divulgarem seus balanços financeiros e prestações de contas pode ajudar na fiscalização da utilização desses recursos públicos pela sociedade.", - label=u"Transparência nos gastos dos partidos políticos") - -cat = QuestionCategory.objects.create(name=u"#Drogas") -Topic.objects.create(category=cat, description="A maconha não seria mais um mercado ilegal se fossem aprovadas leis dizendo como ela deveria ser produzida e vendida, do mesmo jeito que já acontece com outras drogas, como álcool, tabaco e medicamentos. Isso significa que a maconha poderia ser produzida, vendida e utilizada de acordo com o direito. O mercado da maconha seria fiscalizado e não financiaria mais atividades criminosas. A legalização da maconha está sendo discutida no Congresso Nacional (Projetos de Lei 7.270/2014 e 10.549/2018).", - label=u"Legalização da maconha") -Topic.objects.create(category=cat, description="A internação psiquiátrica compulsória ocorre quando uma pessoa é internada contra a sua vontade. Atualmente, ela pode ocorrer por decisão do Judiciário (sem precisar da autorização da família) em casos extremos, quando o paciente não tem mais controle sobre sua condição psicológica e física. Alguns políticos têm tentado combater o uso de drogas com a internação compulsória coletiva de usuários, ou seja, contra sua vontade e sem avaliação da condição psicológica e física de cada um. É o que ocorre atualmente na cidade de São Paulo, na região da Cracolândia.", - label=u"Internação compulsória para usuários de drogas") - -cat = QuestionCategory.objects.create(name=u"#Migrantes") -Topic.objects.create(category=cat, description="A Venezuela está passando por uma grave crise econômica e humanitária. O Brasil faz fronteira com a Venezuela, mas é um dos países da América do Sul que menos recebe migrantes de lá. Em Roraima, o governo restringiu o acesso de venezuelanos à saúde e o judiciário chegou a fechar as fronteiras para a entrada de novos migrantes. Casos de xenofobia (ódio e preconceito por causa da origem da pessoa) também têm acontecido.", - label=u"Acolhimento de migrantes venezuelanos no Brasil") - -Topic.objects.create(category=cat, description="Cerca de 3 milhões de migrantes residem, trabalham e estudam no Brasil. Porém, eles não podem votar, nem se candidatar. Esse cenário pode mudar caso a nossa Constituição seja alterada e garanta o direito à participação dos migrantes na política do país (PEC 25/2012). Diversos países já garantiram esse direito.", - label=u"Direito a voto de migrantes") - - -for t in Topic.objects.all(): - label_yes = u"Sou a FAVOR da %s" % t.label - yes = Position.objects.create(topic=t, label=label_yes) - label_no = u"Sou CONTRA a %s" % t.label - no = Position.objects.create(topic=t, label=label_no) diff --git a/merepresenta/dicts_and_lists_for_ordering.py b/merepresenta/dicts_and_lists_for_ordering.py deleted file mode 100644 index 5fc73e1c..00000000 --- a/merepresenta/dicts_and_lists_for_ordering.py +++ /dev/null @@ -1,36 +0,0 @@ -partidos_mix = {u'DC': 4, - u'DEM': 12, - u'SOLIDARIEDADE': 13, - u'PCB': 33, - u'PATRI': 29, - u'AVANTE': 27, - u'PR': 3, - u'PP': 0, - u'PV': 24, - u'PT': 20, - u'PRB': 21, - u'MDB': 6, - u'PODE': 14, - u'PTC': 28, - u'PTB': 19, - u'PPL': 25, - u'PPS': 23, - u'PRP': 9, - u'PMB': 17, - u'PMN': 18, - u'PSDB': 7, - u'PDT': 11, - u'PRTB': 5, - u'REDE': 15, - u'NOVO': 32, - u'PSTU': 31, - u'PSL': 22, - u'PSB': 10, - u'PSC': 2, - u'PROS': 26, - u'PSD': 8, - u'PC do B': 30, - u'PHS': 1, - u'PSOL': 16, - u'PCO': 34} - diff --git a/merepresenta/fixtures/estados_de_brasil.yaml b/merepresenta/fixtures/estados_de_brasil.yaml deleted file mode 100644 index 91dfa427..00000000 --- a/merepresenta/fixtures/estados_de_brasil.yaml +++ /dev/null @@ -1,167 +0,0 @@ -- model: popolo.area - pk: acre-state-ac - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:13.052021+00:00', - updated_at: !!timestamp '2018-04-04 20:26:13.052262+00:00', name: Acre, identifier: AC, - classification: state, parent: brasil-country-br, geom: null, inhabitants: null, - slug: acre-state-ac} -- model: popolo.area - pk: alagoas-state-al - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:13.333498+00:00', - updated_at: !!timestamp '2018-04-04 20:26:13.333752+00:00', name: Alagoas, identifier: AL, - classification: state, parent: brasil-country-br, geom: null, inhabitants: null, - slug: alagoas-state-al} -- model: popolo.area - pk: amapa-state-ap - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:13.480610+00:00', - updated_at: !!timestamp '2018-04-04 20:26:13.480938+00:00', name: "Amap\xE1", - identifier: AP, classification: state, parent: brasil-country-br, geom: null, - inhabitants: null, slug: amapa-state-ap} -- model: popolo.area - pk: amazonas-state-am - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:13.632429+00:00', - updated_at: !!timestamp '2018-04-04 20:26:13.632710+00:00', name: Amazonas, identifier: AM, - classification: state, parent: brasil-country-br, geom: null, inhabitants: null, - slug: amazonas-state-am} -- model: popolo.area - pk: bahia-state-ba - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:13.795869+00:00', - updated_at: !!timestamp '2018-04-04 20:26:13.796175+00:00', name: "Bah\xEDa", - identifier: BA, classification: state, parent: brasil-country-br, geom: null, - inhabitants: null, slug: bahia-state-ba} -- model: popolo.area - pk: brasil-country-br - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:13.034291+00:00', - updated_at: !!timestamp '2018-04-04 20:26:13.034944+00:00', name: Brasil, identifier: BR, - classification: country, parent: null, geom: null, inhabitants: null, slug: brasil-country-br} -- model: popolo.area - pk: ceara-state-ce - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:13.979956+00:00', - updated_at: !!timestamp '2018-04-04 20:26:13.980303+00:00', name: "Cear\xE1", - identifier: CE, classification: state, parent: brasil-country-br, geom: null, - inhabitants: null, slug: ceara-state-ce} -- model: popolo.area - pk: distrito-federal-state-df - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:14.144361+00:00', - updated_at: !!timestamp '2018-04-04 20:26:14.144624+00:00', name: Distrito Federal, - identifier: DF, classification: state, parent: brasil-country-br, geom: null, - inhabitants: null, slug: distrito-federal-state-df} -- model: popolo.area - pk: espirito-santo-state-es - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:14.304596+00:00', - updated_at: !!timestamp '2018-04-04 20:26:14.304884+00:00', name: "Esp\xEDrito\ - \ Santo", identifier: ES, classification: state, parent: brasil-country-br, - geom: null, inhabitants: null, slug: espirito-santo-state-es} -- model: popolo.area - pk: goias-state-go - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:14.472704+00:00', - updated_at: !!timestamp '2018-04-04 20:26:14.472938+00:00', name: "Goi\xE1s", - identifier: GO, classification: state, parent: brasil-country-br, geom: null, - inhabitants: null, slug: goias-state-go} -- model: popolo.area - pk: maranhao-state-ma - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:14.654793+00:00', - updated_at: !!timestamp '2018-04-04 20:26:14.655065+00:00', name: "Maranh\xE3o", - identifier: MA, classification: state, parent: brasil-country-br, geom: null, - inhabitants: null, slug: maranhao-state-ma} -- model: popolo.area - pk: mato-grosso-del-sur-state-ms - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:15.044747+00:00', - updated_at: !!timestamp '2018-04-04 20:26:15.045152+00:00', name: Mato Grosso - del Sur, identifier: MS, classification: state, parent: brasil-country-br, geom: null, - inhabitants: null, slug: mato-grosso-del-sur-state-ms} -- model: popolo.area - pk: mato-grosso-state-mt - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:14.845342+00:00', - updated_at: !!timestamp '2018-04-04 20:26:14.845662+00:00', name: Mato Grosso, - identifier: MT, classification: state, parent: brasil-country-br, geom: null, - inhabitants: null, slug: mato-grosso-state-mt} -- model: popolo.area - pk: minas-gerais-state-mg - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:15.231078+00:00', - updated_at: !!timestamp '2018-04-04 20:26:15.231352+00:00', name: Minas Gerais, - identifier: MG, classification: state, parent: brasil-country-br, geom: null, - inhabitants: null, slug: minas-gerais-state-mg} -- model: popolo.area - pk: paraiba-state-pb - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:15.613620+00:00', - updated_at: !!timestamp '2018-04-04 20:26:15.613903+00:00', name: "Para\xEDba", - identifier: PB, classification: state, parent: brasil-country-br, geom: null, - inhabitants: null, slug: paraiba-state-pb} -- model: popolo.area - pk: parana-state-pr - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:15.800839+00:00', - updated_at: !!timestamp '2018-04-04 20:26:15.801111+00:00', name: "Paran\xE1", - identifier: PR, classification: state, parent: brasil-country-br, geom: null, - inhabitants: null, slug: parana-state-pr} -- model: popolo.area - pk: para-state-pa - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:15.414987+00:00', - updated_at: !!timestamp '2018-04-04 20:26:15.415234+00:00', name: "Par\xE1", identifier: PA, - classification: state, parent: brasil-country-br, geom: null, inhabitants: null, - slug: para-state-pa} -- model: popolo.area - pk: pernambuco-state-pe - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:16.011711+00:00', - updated_at: !!timestamp '2018-04-04 20:26:16.012031+00:00', name: Pernambuco, - identifier: PE, classification: state, parent: brasil-country-br, geom: null, - inhabitants: null, slug: pernambuco-state-pe} -- model: popolo.area - pk: piaui-state-pi - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:16.219714+00:00', - updated_at: !!timestamp '2018-04-04 20:26:16.219957+00:00', name: "Piau\xED", - identifier: PI, classification: state, parent: brasil-country-br, geom: null, - inhabitants: null, slug: piaui-state-pi} -- model: popolo.area - pk: rio-de-janeiro-state-rj - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:16.437934+00:00', - updated_at: !!timestamp '2018-04-04 20:26:16.438166+00:00', name: "R\xEDo de Janeiro", - identifier: RJ, classification: state, parent: brasil-country-br, geom: null, - inhabitants: null, slug: rio-de-janeiro-state-rj} -- model: popolo.area - pk: rio-grande-del-norte-state-rn - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:16.656477+00:00', - updated_at: !!timestamp '2018-04-04 20:26:16.656729+00:00', name: "R\xEDo Grande\ - \ del Norte", identifier: RN, classification: state, parent: brasil-country-br, - geom: null, inhabitants: null, slug: rio-grande-del-norte-state-rn} -- model: popolo.area - pk: rio-grande-del-sur-state-rs - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:16.888923+00:00', - updated_at: !!timestamp '2018-04-04 20:26:16.889151+00:00', name: "R\xEDo Grande\ - \ del Sur", identifier: RS, classification: state, parent: brasil-country-br, - geom: null, inhabitants: null, slug: rio-grande-del-sur-state-rs} -- model: popolo.area - pk: rondonia-state-ro - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:17.109041+00:00', - updated_at: !!timestamp '2018-04-04 20:26:17.109348+00:00', name: "Rond\xF4nia", - identifier: RO, classification: state, parent: brasil-country-br, geom: null, - inhabitants: null, slug: rondonia-state-ro} -- model: popolo.area - pk: roraima-state-rr - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:17.343381+00:00', - updated_at: !!timestamp '2018-04-04 20:26:17.343627+00:00', name: Roraima, identifier: RR, - classification: state, parent: brasil-country-br, geom: null, inhabitants: null, - slug: roraima-state-rr} -- model: popolo.area - pk: santa-catarina-state-sc - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:17.575110+00:00', - updated_at: !!timestamp '2018-04-04 20:26:17.575350+00:00', name: Santa Catarina, - identifier: SC, classification: state, parent: brasil-country-br, geom: null, - inhabitants: null, slug: santa-catarina-state-sc} -- model: popolo.area - pk: sao-paulo-state-sp - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:17.810035+00:00', - updated_at: !!timestamp '2018-04-04 20:26:17.810272+00:00', name: "S\xE3o Paulo", - identifier: SP, classification: state, parent: brasil-country-br, geom: null, - inhabitants: null, slug: sao-paulo-state-sp} -- model: popolo.area - pk: sergipe-state-se - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:18.071740+00:00', - updated_at: !!timestamp '2018-04-04 20:26:18.072098+00:00', name: Sergipe, identifier: SE, - classification: state, parent: brasil-country-br, geom: null, inhabitants: null, - slug: sergipe-state-se} -- model: popolo.area - pk: tocantins-state-to - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:18.315737+00:00', - updated_at: !!timestamp '2018-04-04 20:26:18.316029+00:00', name: Tocantins, identifier: TO, - classification: state, parent: brasil-country-br, geom: null, inhabitants: null, - slug: tocantins-state-to} \ No newline at end of file diff --git a/merepresenta/fixtures/merep_mini.yaml b/merepresenta/fixtures/merep_mini.yaml deleted file mode 100644 index 2a0bcf7d..00000000 --- a/merepresenta/fixtures/merep_mini.yaml +++ /dev/null @@ -1,267 +0,0 @@ -- model: auth.user - pk: 1 - fields: - password: pbkdf2_sha256$24000$dRdII81zspNW$AzrDpLQSMclUC4dCgHqJ8bFPlsxG1sTYirlon0LTZI0= - last_login: null - is_superuser: false - username: feli - first_name: '' - last_name: '' - email: falvarez@perro.cl - is_staff: true - is_active: true - groups: [] - user_permissions: [] -- model: auth.user - pk: 2 - fields: - password: pbkdf2_sha256$24000$yhcWR2scoiat$hu1MKoLXgnrDBWleTm/6AMcFSU1TgHFFu0g7T59AzmA= - last_login: null - is_superuser: false - username: fiera - first_name: 'Fiera' - last_name: 'Feroz' - email: fiera@ciudadanoi.org - is_staff: true - is_active: true - groups: [] - user_permissions: [] -- model: popolo.area - pk: "1" - fields: {slug: algarrobo, start_date: null, end_date: null, - name: Algarrobo, identifier: '5602', classification: 'Comuna', parent: null, geom: null, - inhabitants: null} -- model: popolo.area - pk: "2" - fields: {slug: alhue, start_date: null, end_date: null, - name: "Alhu\xE9", identifier: '13502', classification: 'Comuna', parent: null, geom: null, - inhabitants: null} -- model: popolo.area - pk: "3" - fields: {slug: arica, start_date: null, end_date: null, - name: Arica, identifier: '15101', classification: '', parent: null, geom: null, - inhabitants: null} -- model: popolo.area - pk: "4" - fields: {slug: ciudadanoi, start_date: null, end_date: null, - name: CiudadanoI, identifier: '15102', classification: '', parent: null, geom: null, - inhabitants: null} -- model: backend_citizen.profile - pk: 1 - fields: {user: 1, image: '', description: '', first_time_in_backend_citizen: true} -- model: backend_citizen.profile - pk: 2 - fields: {user: 2, image: '', description: '', first_time_in_backend_citizen: true} -- fields: {description: '', extra_info_content: null, extra_info_title: null, - highlighted: true, name: "2a Circunscripcion Antofagasta", - candidates_can_commit_everywhere: false, - searchable: true, slug: 2a-circunscripcion-antofagasta, area: 1} - model: elections.election - pk: 1 -- fields: {description: '', extra_info_content: null, extra_info_title: null, - candidates_can_commit_everywhere: false, - highlighted: true, name: "4a Circunscripcion Coquimbo", - searchable: true, slug: 4a-circunscripcion-coquimbo, area: 1} - model: elections.election - pk: 2 -- fields: { slug: candidato-1, name: Manuel Rojas } - model: popolo.person - pk: 1 -- fields: { slug: candidato-2, name: Alejandro Guillier} - model: popolo.person - pk: 2 -- fields: { slug: candidato-3, name: Pedro Araya} - model: popolo.person - pk: 3 -- fields: { slug: candidato-4, name: Gisela Contreras, email: gcontreras@votai.cl} - model: popolo.person - pk: 4 -- fields: { slug: candidato-5, name: Carlos Cantero, email: ccantero@votai.com} - model: popolo.person - pk: 5 -- fields: { slug: candidato-6, name: Daniel Guevara, email: dguevara@votai.io} - model: popolo.person - pk: 6 -- fields: { slug: candidato-7, name: Jimena Orrego} - model: popolo.person - pk: 7 -- fields: { slug: candidato-8, name: Gonzalo Uriarte} - model: popolo.person - pk: 8 -- fields: { slug: candidato-9, name: Mario Bertolino} - model: popolo.person - pk: 9 -- fields: { slug: candidato-10, name: Jorge Pizarro} - model: popolo.person - pk: 10 -- fields: { slug: candidato-11, name: "Adriana Munoz"} - model: popolo.person - pk: 11 -- fields: { slug: candidato-12, name: Luis Vega} - model: popolo.person - pk: 12 -- fields: {name: Perros y gatos, slug: perros-y-gatos} - model: candidator.category - pk: 1 -- fields: {election: 1, category_ptr: 1} - model: elections.questioncategory - pk: 1 -- fields: {name: "Educacion", slug: educacion} - model: candidator.category - pk: 2 -- fields: {election: 1, category_ptr: 2} - model: elections.questioncategory - pk: 2 -- fields: {name: Perros y gatos, slug: perros-y-gatos} - model: candidator.category - pk: 3 -- fields: {election: 2, category_ptr: 3} - model: elections.questioncategory - pk: 3 -- fields: {name: "Educacion", slug: educacion} - model: candidator.category - pk: 4 -- fields: {election: 2, category_ptr: 4} - model: elections.questioncategory - pk: 4 -- fields: {category: 1, label: 'Le gusta la Fiera??', slug: 'fiera1'} - model: candidator.topic - pk: 1 -- fields: {category: 1, label: 'Le gusta Benito??', slug: 'benito1'} - model: candidator.topic - pk: 2 -- fields: {category: 2, label: 'Libre para todos??', slug: 'freedom1'} - model: candidator.topic - pk: 3 -- fields: {category: 3, label: 'Le gusta la Fiera2??', slug: 'fiera2'} - model: candidator.topic - pk: 4 -- fields: {category: 3, label: 'Le gusta Benito2??', slug: 'benito2'} - model: candidator.topic - pk: 5 -- fields: {category: 4, label: 'Libre para todos2??', slug: 'freedom2'} - model: candidator.topic - pk: 6 -- fields: {label: "Si", topic: 1} - model: candidator.position - pk: 1 -- fields: {label: 'No', topic: 1} - model: candidator.position - pk: 2 -- fields: {label: A veces, topic: 1} - model: candidator.position - pk: 3 -- fields: {label: "Si", topic: 2} - model: candidator.position - pk: 4 -- fields: {label: 'no', topic: 2} - model: candidator.position - pk: 5 -- fields: {label: "Si", topic: 3} - model: candidator.position - pk: 6 -- fields: {label: 'no', topic: 3} - model: candidator.position - pk: 7 -- fields: {label: "Si", topic: 4} - model: candidator.position - pk: 8 -- fields: {label: 'No', topic: 4} - model: candidator.position - pk: 9 -- fields: {label: A veces, topic: 4} - model: candidator.position - pk: 10 -- fields: {label: "Si", topic: 5} - model: candidator.position - pk: 11 -- fields: {label: 'no', topic: 5} - model: candidator.position - pk: 12 -- fields: {label: "Si", topic: 6} - model: candidator.position - pk: 13 -- fields: {label: 'no', topic: 6} - model: candidator.position - pk: 14 -- fields: {person_ptr: 1, name: Manuel Rojas, elections: [2], extra_info: {}} - model: elections.candidate - pk: 1 -- fields: {candidate_ptr: '1', cpf: '1'} - model: merepresenta.candidate - pk: 1 -- fields: {person_ptr: 2, name: Alejandro Guillier, elections: [2], extra_info: {}} - model: elections.candidate - pk: 2 -- fields: {candidate_ptr: '2', cpf: '2'} - model: merepresenta.candidate - pk: 2 -- fields: {person_ptr: 3, name: Pedro Araya, elections: [2], extra_info: {}} - model: elections.candidate - pk: 3 -- fields: {candidate_ptr: '3', cpf: '3'} - model: merepresenta.candidate - pk: 3 -- fields: {person_ptr: 4, name: Gisela Contreras, elections: [1], extra_info: {}} - model: elections.candidate - pk: 4 -- fields: {candidate_ptr: '4', cpf: '4'} - model: merepresenta.candidate - pk: 4 -- fields: {person_ptr: 5, name: Carlos Cantero, elections: [1], extra_info: {}} - model: elections.candidate - pk: 5 -- fields: {candidate_ptr: '5', cpf: '5'} - model: merepresenta.candidate - pk: 5 -- fields: {person_ptr: 6, name: Daniel Guevara, elections: [1], extra_info: {}} - model: elections.candidate - pk: 6 -- fields: {candidate_ptr: '6', cpf: '6'} - model: merepresenta.candidate - pk: 6 -- fields: {topic: 4, position: 8, person: 1} - model: candidator.takenposition - pk: 1 -- fields: {topic: 5, position: 11, person: 1} - model: candidator.takenposition - pk: 2 -- fields: {topic: 6, position: 14, person: 1} - model: candidator.takenposition - pk: 3 -- fields: {topic: 4, position: 9, person: 2} - model: candidator.takenposition - pk: 4 -- fields: {topic: 5, position: 12, person: 2} - model: candidator.takenposition - pk: 5 -- fields: {topic: 6, position: 13, person: 2} - model: candidator.takenposition - pk: 6 -- fields: {topic: 4, position: 10, person: 3} - model: candidator.takenposition - pk: 7 -- fields: {topic: 5, position: 12, person: 3} - model: candidator.takenposition - pk: 8 -- fields: {topic: 6, position: 13, person: 3} - model: candidator.takenposition - pk: 9 -- fields: {topic: 1, position: 1, person: 4} - model: candidator.takenposition - pk: 10 -- fields: {topic: 1, position: 2, person: 5} - model: candidator.takenposition - pk: 11 -- fields: {topic: 2, position: 4, person: 4} - model: candidator.takenposition - pk: 12 -- fields: {topic: 2, position: 5, person: 5} - model: candidator.takenposition - pk: 13 -- fields: {topic: 3, position: 6, person: 4} - model: candidator.takenposition - pk: 14 -- fields: {topic: 3, position: 7, person: 5} - model: candidator.takenposition - pk: 15 diff --git a/merepresenta/forms.py b/merepresenta/forms.py deleted file mode 100644 index 23e488c9..00000000 --- a/merepresenta/forms.py +++ /dev/null @@ -1,202 +0,0 @@ -# coding=utf-8 -from django import forms -from medianaranja2.forms import ProposalModelMultipleChoiceField, MediaNaranjaWizardForm, QuestionsForm -from popular_proposal.models import PopularProposal -from django.core.cache import cache -from django.conf import settings -from elections.models import Area, QuestionCategory, PersonalData -from django.contrib.sites.models import Site -from medianaranja2.proposals_getter import ByOnlySiteProposalGetter -from merepresenta.models import MeRepresentaPopularProposal, Candidate, RaceMixin, LGBTQDescription -from django.utils.safestring import mark_safe -from medianaranja2.adapters import Adapter as OriginalAdapter - -GENDERS = [ - ('F', u"Feminino"), - ('M', u"Masculino"), - ('outro', u"Outro gênero"), -] - -SIM_OU_NAO = [ - ('sim', u"Sim"), - ('nao', u"Nao"), -] - -def get_races(): - RACES = [] - for f in RaceMixin._meta.fields: - RACES.append((f.name, f.verbose_name)) - return RACES - -RACES = get_races() - -class PersonalDataForm(forms.Form): - email = forms.EmailField(label=u"Para manter contato, quais desses e-mails você mais usa?", - widget=forms.EmailInput(attrs={'placeholder': 'Outro'}), - required=False) - gender = forms.ChoiceField(choices=GENDERS, - widget=forms.RadioSelect, - label=u'Com qual desses gêneros você se identifica?') - lgbt = forms.BooleanField(label=u'Sim, eu sou LGBT', required=False) - lgbt_desc = forms.ModelMultipleChoiceField(label=u'Selecione com quais opções você se identifica:', - widget=forms.CheckboxSelectMultiple(attrs={'id': 'lgbt_desc'}), - queryset=LGBTQDescription.objects.all(), - required=False) - races = forms.MultipleChoiceField(label=u'Qual é a sua cor ou raça?', - widget=forms.CheckboxSelectMultiple, - choices=RACES, - required=False, - help_text=u"Você pode marcar mais de uma.") - bio = forms.CharField(label=u"Escreva um pouco sobre você", widget=forms.Textarea, required=False) - candidatura_coletiva = forms.BooleanField(label=u'Sim', required=False - ) - renovacao_politica = forms.CharField(label=u"Você faz parte de algum grupo de Renovação Política? Qual?", required=False) - - - def __init__(self, *args, **kwargs): - self.candidate = kwargs.pop('candidate') - initial = {} - if 'initial' in kwargs: - kwargs['initial'].update(initial) - else: - kwargs['initial'] = initial - personal_datas_as_dict = {} - for personal_data in self.candidate.personal_datas.all(): - personal_datas_as_dict[personal_data.label] = personal_data.value - - for field in self.__class__.base_fields: - candidate_has_field = hasattr(self.candidate, field) - if candidate_has_field: - value = getattr(self.candidate, field, None) - kwargs['initial'][field] = value - else: - kwargs['initial'][field] = personal_datas_as_dict.get(field, None) - ## special cases - races = [] - for race in RACES: - race_candidate = getattr(self.candidate, race[0]) - if race_candidate: - races.append(race[0]) - lgbt_desc = [] - if self.candidate.lgbt: - for desc in self.candidate.lgbt_desc.all(): - lgbt_desc.append(desc.id) - kwargs['initial']['races'] = races - kwargs['initial']['lgbt_desc'] = lgbt_desc - super(PersonalDataForm, self).__init__(*args, **kwargs) - - - def save(self): - selected_races = self.cleaned_data.pop('races') - lgbt_descs = self.cleaned_data.pop('lgbt_desc', []) - for race in RACES: - race_key = race[0] - if race_key in selected_races: - setattr(self.candidate, race_key, True) - else: - setattr(self.candidate, race_key, False) - for f_name in self.cleaned_data: - if hasattr(self.candidate, f_name): - setattr(self.candidate, f_name, self.cleaned_data[f_name]) - else: - personal_data, created = PersonalData.objects.get_or_create(candidate=self.candidate, - label=f_name) - personal_data.value = self.cleaned_data[f_name] - if personal_data.value is None: - personal_data.value = '' - personal_data.save() - self.candidate.save() - self.candidate.lgbt_desc = lgbt_descs - return self.candidate - - -class MeRepresentaProposalModelMultipleChoiceField(forms.ModelMultipleChoiceField): - template_name = 'merepresenta/checkbox_select.html' - option_template_name = 'merepresenta/checkbox_option.html' - - def label_from_instance(self, obj): - return mark_safe( obj.get_one_liner() ) - - -class WithAreaMixin(forms.Form): - area = forms.ModelChoiceField(label=u"Em que estado você vota?", - help_text=u"Se você quiser saber com que candidatura ao Congresso você é mais compatível, escolha o estado em que você vota.", - empty_label=u"Selecione seu estado", - required=True, - queryset=Area.objects.filter(classification__in=settings.FILTERABLE_AREAS_TYPE).order_by('name')) - - -class MeRepresentaProposalsForm(WithAreaMixin): - proposals = MeRepresentaProposalModelMultipleChoiceField(queryset=MeRepresentaPopularProposal.objects.none(), - widget=forms.CheckboxSelectMultiple(attrs={'class': 'proposal_option'})) - - def __init__(self, *args, **kwargs): - self.proposals = kwargs.pop('proposals') - super(MeRepresentaProposalsForm, self).__init__(*args, **kwargs) - proposals_qs_cache_key = 'merepresenta_proposals_qs' - if cache.get(proposals_qs_cache_key) is not None: - self.fields['proposals'].queryset = cache.get(proposals_qs_cache_key) - return - qs = MeRepresentaPopularProposal.objects.filter(id__in=[p.id for p in self.proposals]).order_by('clasification') - cache.set(proposals_qs_cache_key, qs) - self.fields['proposals'].queryset = qs - - -class MeRepresentaMeiaLaranjaWizardForm(MediaNaranjaWizardForm): - template_name = 'merepresenta/perguntas.html' - done_template_name = 'merepresenta/resultado.html' - form_list = [MeRepresentaProposalsForm] - steps_and_functions = { - 0: 'get_proposals_form_kwargs' - } - - def get_template_names(self): - return self.template_name - - def get_proposal_class(self): - return ByOnlySiteProposalGetter - - def get_proposal_getter_kwargs(self): - site = Site.objects.get(id=settings.MEREPRESENTA_SITE_ID) - return {'site': site, 'proposal_class': MeRepresentaPopularProposal} - - def get_element_selector_from_cleaned_data(self, cleaned_data): - return cleaned_data.get('area', None) - - def get_proposals_form_kwargs(self, cleaned_data): - proposal_getter_kwargs = self.get_proposal_getter_kwargs() - getter = self.get_proposal_class()(**proposal_getter_kwargs) - - proposals = getter.get_all_proposals(self.get_element_selector_from_cleaned_data(cleaned_data)) - return {'proposals': proposals} - - -class MeRepresentaQuestionsForm(QuestionsForm, WithAreaMixin): - - def __init__(self, *args, **kwargs): - kwargs['categories'] = QuestionCategory.objects.all() - super(MeRepresentaQuestionsForm, self).__init__(*args, **kwargs) - -class MeRepresentaAdapter(OriginalAdapter): - def _get_topics_and_positions(self, election): - topics = [] - positions = [] - for category in QuestionCategory.objects.order_by('id'): - for topic in category.topics.order_by('id'): - topics.append(topic) - for position in topic.positions.all().order_by('id'): - positions.append(position) - return (topics, positions) - -class MeRepresentaMeiaLaranjaQuestionsWizardForm(MediaNaranjaWizardForm): - template_name = 'merepresenta/questions.html' - done_template_name = 'merepresenta/resultado.html' - calculator_extra_kwargs = {'questions_adapter_class':MeRepresentaAdapter} - - form_list = [MeRepresentaQuestionsForm] - - def get_template_names(self): - return self.template_name - - def get_element_selector_from_cleaned_data(self, cleaned_data): - return cleaned_data.get('area', None) diff --git a/merepresenta/management/__init__.py b/merepresenta/management/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/merepresenta/management/commands/__init__.py b/merepresenta/management/commands/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/merepresenta/management/commands/import_from_tse.py b/merepresenta/management/commands/import_from_tse.py deleted file mode 100644 index ae2e28ce..00000000 --- a/merepresenta/management/commands/import_from_tse.py +++ /dev/null @@ -1,17 +0,0 @@ -# coding=utf-8 -from django.core.management.base import BaseCommand, CommandError -from elections.models import Election -from popular_proposal.models import PopularProposal -from popular_proposal.replicator import Replicator -from merepresenta.tse_processor import TSEProcessor - -class Command(BaseCommand): - help = u'Carga datos de los candidatos dado un archivo en formato CSV con separación de ;' - - def add_arguments(self, parser): - parser.add_argument('filename', type=str) - - def handle(self, *args, **options): - filename = options['filename'] - processor = TSEProcessor(filename) - processor.process() diff --git a/merepresenta/management/commands/set_match_cache.py b/merepresenta/management/commands/set_match_cache.py deleted file mode 100644 index 07e3a086..00000000 --- a/merepresenta/management/commands/set_match_cache.py +++ /dev/null @@ -1,22 +0,0 @@ -# coding=utf-8 -from django.core.management.base import BaseCommand, CommandError -from merepresenta.match.matrix_builder import MatrixBuilder -from elections.models import Election -from popular_proposal.models import PopularProposal -from popular_proposal.replicator import Replicator -from merepresenta.tse_processor import TSEProcessor -from django.core.cache import cache - - -class Command(BaseCommand): - help = u'Carga caché del match de merepresenta, esto es para que el match no toque la DB' - - def add_arguments(self, parser): - parser.add_argument('time', type=int, default=7200, nargs="*") - - def handle(self, *args, **options): - time = options['time'][0] - builder = MatrixBuilder(time=time) - all_ = builder.set_cache() - shape = all_[-1].shape - self.stdout.write("Saved matrix of %d candidates with answers, for %d minutes" % (shape[0], time/60)) diff --git a/merepresenta/match/__init__.py b/merepresenta/match/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/merepresenta/match/forms.py b/merepresenta/match/forms.py deleted file mode 100644 index 7a16ff71..00000000 --- a/merepresenta/match/forms.py +++ /dev/null @@ -1,12 +0,0 @@ -# coding=utf-8 -from django import forms -from merepresenta.models import Candidate, QuestionCategory, CandidateQuestionCategory -from elections.models import Area - - -class QuestionsCategoryForm(forms.Form): - area = forms.ModelChoiceField(queryset=Area.objects.all(), - label=u'Qual o seu estado?', required=False, empty_label=u'Todos os estados') - categories = forms.ModelMultipleChoiceField(queryset=QuestionCategory.objects.all(), - label=u'Olá', - widget=forms.CheckboxSelectMultiple(attrs={'class':"categories-select"})) diff --git a/merepresenta/match/matrix_builder.py b/merepresenta/match/matrix_builder.py deleted file mode 100644 index 9996c31c..00000000 --- a/merepresenta/match/matrix_builder.py +++ /dev/null @@ -1,177 +0,0 @@ -import numpy as np -from candidator.models import Position -from elections.models import QuestionCategory -from merepresenta.models import Candidate -from django.core.cache import cache -from constance import config - - -class InformationHolder(object): - def __init__(self, positions, candidates, categories): - self.positions = positions - self.candidates = candidates - self.categories = categories - - self.positions_id = self.set_index_of(positions) - self.categories_id = self.set_index_of(categories) - self.candidates_id = self.set_index_of(candidates) - self.electors_categories = np.ones(categories.count()) - self.coalicagaos_nota = self.get_coaligacao_marks(self.candidates_id, candidates) - self.candidates_dict = self.get_candidates_dict(candidates) - self.desprivilegios = self.get_desprivilegios(candidates) - - def as_tuple(self): - return (self.positions, - self.candidates, - self.categories, - self.positions_id, - self.categories_id, - self.candidates_id, - self.electors_categories, - self.coalicagaos_nota, - self.candidates_dict, - self.desprivilegios) - - def set_index_of(self, variable): - index = 0 - result = {} - for v in variable: - result[v.id] = index - index +=1 - return result - - def get_candidates_dict(self, candidates): - candidates_dict = {} - for c in candidates: - candidates_dict[c.id] = c.as_dict() - return candidates_dict - - def get_desprivilegios(self, candidates): - r = np.zeros(len(candidates)) - counter = 0 - for c in candidates: - r[counter] = c.desprivilegio - counter += 1 - return r - - def get_coaligacao_marks(self, candidates_id, candidates): - coalicagaos_nota = np.ones(len(candidates)) - for c in candidates: - index = candidates_id[c.id] - try: - mark = c.partido.coaligacao.mark - coalicagaos_nota[index] = mark - except: - pass - return coalicagaos_nota - - -class CandidatesRightPositionsVector(object): - def __init__(self, information_holder): - self.information_holder = information_holder - self.right_candidates_positions_vector = self.get_candidates_right_positions_matrix() - - def as_tuple(self): - return self.information_holder.as_tuple() + (self.right_candidates_positions_vector, ) - - def get_positions_vector_for_category(self, cat): - result = np.zeros(self.information_holder.positions.count()) - for topic in cat.topics.all(): - i = self.information_holder.positions_id[topic.right_answer.position.id] - result[i] = 1 - return result - - def get_matrix_positions_and_categories(self): - r = [] - for c in self.information_holder.categories: - r.append(self.get_positions_vector_for_category(c)) - return np.vstack(r).T - - def get_positions_vector_for_candidate(self, cand): - r = np.zeros(self.information_holder.positions.count()) - for p in self.information_holder.positions: - if cand.candidatequestioncategory_set.filter(category=p.topic.category).exists(): - multiplier = 2 - else: - multiplier = 1 - if cand.taken_positions.filter(position=p).exists(): - index = self.information_holder.positions_id[p.id] - r[index] = 1 * multiplier - return r.T - - def get_matrix_positions_and_candidates(self): - r = [] - for c in self.information_holder.candidates: - r.append(self.get_positions_vector_for_candidate(c)) - return np.vstack(r) - - def get_candidates_right_positions_matrix(self): - - C = self.get_matrix_positions_and_candidates() - P = self.get_matrix_positions_and_categories() - return np.dot(C ,P) - - - -class MatrixBuilder(object): - cache_key = 'merepresenta_matrix_builder_setup_b' - def __init__(self, *args, **kwargs): - self.cache_time = kwargs.pop('time', 83600) - if cache.get(self.cache_key) is None: - all_ = self.set_cache() - else: - all_ = cache.get(self.cache_key) - - (self.positions, - self.candidates, - self.categories, - self.positions_id, - self.categories_id, - self.candidates_id, - self.electors_categories, - self.coalicagaos_nota, - self.candidates_dict, - self.desprivilegios, - self.right_candidates_positions) = all_ - - - def set_cache(self): - positions = Position.objects.all().order_by('id') - candidates = Candidate.objects.filter(candidatequestioncategory__isnull=False).order_by('id').distinct() - categories = QuestionCategory.objects.all().order_by('id') - information_holder = InformationHolder(positions, candidates, categories) - right_candidates_positions_vector = CandidatesRightPositionsVector(information_holder) - all_ = right_candidates_positions_vector.as_tuple() - cache.set(self.cache_key, all_, self.cache_time) - return all_ - - def set_electors_categories(self, categories): - for c in categories: - index = self.categories_id[c.id] - self.electors_categories[index] = 3 - - def get_candidates_result(self): - # Candidates right answers multiplied by 2 if she chooses - # the given TEMA - CPR = self.right_candidates_positions - result = np.dot(CPR, self.electors_categories) - result = result + self.desprivilegios * config.MEREPRESENTA_IDENTITY_MULTIPLICATION_FACTOR - return result - - def get_result(self): - C = self.get_candidates_result() - notas = self.coalicagaos_nota.T - notas = notas * config.MEREPRESENTA_COLIGACAO_ATENUATION_FACTOR - return C * notas - - def get_result_as_array(self): - r = self.get_result() - as_array = [] - index = 0 - for c in self.candidates: - i = self.candidates_id[c.id] - mark = r[i] - d = self.candidates_dict[c.id] - d['nota'] = round(float(mark)/float(100), 2) - as_array.append(d) - return as_array diff --git a/merepresenta/match/tests/__init__.py b/merepresenta/match/tests/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/merepresenta/match/tests/match_tests.py b/merepresenta/match/tests/match_tests.py deleted file mode 100644 index 109bd2c1..00000000 --- a/merepresenta/match/tests/match_tests.py +++ /dev/null @@ -1,225 +0,0 @@ -# coding=utf-8 -from django.test import TestCase -from elections.tests import VotaInteligenteTestCase -from popular_proposal.models import PopularProposal, Commitment -from merepresenta.models import (MeRepresentaPopularProposal, - MeRepresentaCommitment, - Candidate, - Coaligacao, - Partido, - VolunteerInCandidate, - CandidateQuestionCategory, - LGBTQDescription, - RightAnswer, - QuestionCategory) -from django.contrib.auth.models import User -from elections.models import Election, Topic -from candidator.models import Position, TakenPosition -from django.utils import timezone -import datetime -from django.core.urlresolvers import reverse -from merepresenta.voluntarios.models import VolunteerProfile -from backend_candidate.models import Candidacy -from django.test import override_settings -import numpy as np -from merepresenta.match.matrix_builder import (MatrixBuilder, - InformationHolder, - CandidatesRightPositionsVector) -from numpy.testing import assert_equal - - -class MeRepresentaMatchBase(object): - def set_data(self): - self.c1 = Candidate.objects.create(name='c1', cpf='1', gender="F") - self.c2 = Candidate.objects.create(name='c2', cpf='2', parda=True) - self.c3 = Candidate.objects.create(name='c3', cpf='3') - - self.cat1 = QuestionCategory.objects.create(name="Pautas LGBT") - topic = Topic.objects.create(label=u"Adoção de crianças por famílias LGBTs", category=self.cat1) - yes = Position.objects.create(topic=topic, label=u"Sou a FAVOR da adoção de crianças por famílias LGBTs") - no = Position.objects.create(topic=topic, label=u"Sou CONTRA a adoção de crianças por famílias LGBTs") - RightAnswer.objects.create(topic=topic,position=yes) - TakenPosition.objects.create(topic=topic, person=self.c1, position=yes) - TakenPosition.objects.create(topic=topic, person=self.c2, position=no) - TakenPosition.objects.create(topic=topic, person=self.c3, position=yes) - CandidateQuestionCategory.objects.create(category=self.cat1, candidate=self.c1) - - topic2 = Topic.objects.create(label=u"é A favor?", category=self.cat1) - yes2 = Position.objects.create(topic=topic2, label=u"Sou a FAVOR") - no2 = Position.objects.create(topic=topic2, label=u"Sou CONTRA") - RightAnswer.objects.create(topic=topic2, position=yes2) - - TakenPosition.objects.create(topic=topic2, person=self.c1, position=no2) - TakenPosition.objects.create(topic=topic2, person=self.c2, position=yes2) - TakenPosition.objects.create(topic=topic2, person=self.c3, position=yes2) - - self.cat2 = QuestionCategory.objects.create(name="Genero") - CandidateQuestionCategory.objects.create(category=self.cat2, candidate=self.c2) - topic3 = Topic.objects.create(label=u"Aborto é A favor?", category=self.cat2) - yes3 = Position.objects.create(topic=topic3, label=u"Sou a FAVOR") - no3 = Position.objects.create(topic=topic3, label=u"Sou CONTRA") - RightAnswer.objects.create(topic=topic3, position=yes3) - TakenPosition.objects.create(topic=topic3, person=self.c1, position=yes3) - TakenPosition.objects.create(topic=topic3, person=self.c2, position=no3) - TakenPosition.objects.create(topic=topic3, person=self.c3, position=no3) - - topic4 = Topic.objects.create(label=u"Monitoramento da Lei do feminicídio", category=self.cat2) - yes4 = Position.objects.create(topic=topic4, label=u"Sou a FAVOR") - no4 = Position.objects.create(topic=topic4, label=u"Sou CONTRA") - RightAnswer.objects.create(topic=topic4, position=yes4) - TakenPosition.objects.create(topic=topic4, person=self.c1, position=yes4) - TakenPosition.objects.create(topic=topic4, person=self.c2, position=no4) - TakenPosition.objects.create(topic=topic4, person=self.c3, position=yes4) - - self.cat3 = QuestionCategory.objects.create(name=u"Corrupção") - CandidateQuestionCategory.objects.create(category=self.cat3, candidate=self.c3) - topic5 = Topic.objects.create(label=u"Políticos serem donos de emissoras de rádio e TV", category=self.cat3) - yes5 = Position.objects.create(topic=topic5, label=u"Sou a FAVOR") - no5 = Position.objects.create(topic=topic5, label=u"Sou CONTRA") - RightAnswer.objects.create(topic=topic5, position=no5) - TakenPosition.objects.create(topic=topic5, person=self.c1, position=yes5) - TakenPosition.objects.create(topic=topic5, person=self.c2, position=yes5) - TakenPosition.objects.create(topic=topic5, person=self.c3, position=yes5) - -@override_settings(ROOT_URLCONF='merepresenta.stand_alone_urls') -class QuestionCategoryVectors(TestCase, MeRepresentaMatchBase): - def setUp(self): - super(QuestionCategoryVectors, self).setUp() - self.set_data() - - def test_get_positions_vector_of_categories(self): - ''' - Aqui o que eu quero lograr é um vector de dimensiones (Nao sei falar portugues) - Dx1 onde D é a quantidade de possivels respostas, asim: - - yes1 | 1 | - no1 | 0 | - yes2 | 1 | - no2 | 0 | - yes3 | 0 | - no3 | 0 | - yes4 | 0 | - no4 | 0 | - yes5 | 0 | - no5 | 0 | - - Más que só tem os dados do Tema - ''' - information_holder = InformationHolder(Position.objects.all(), Candidate.objects.all(), QuestionCategory.objects.all()) - right_positions_vector = CandidatesRightPositionsVector(information_holder) - vector = right_positions_vector.get_positions_vector_for_category(self.cat1) - self.assertEquals(vector.shape, (Position.objects.count(),)) - expected_vector = np.array([1,0,1,0,0,0,0,0,0,0]) - - assert_equal(vector, expected_vector) - - def test_get_matrix_of_positions_and_categories(self): - information_holder = InformationHolder(Position.objects.all(), Candidate.objects.all(), QuestionCategory.objects.all()) - right_positions_vector = CandidatesRightPositionsVector(information_holder) - matrix = right_positions_vector.get_matrix_positions_and_categories() - expected_mat = np.array([[1,0,1,0,0,0,0,0,0,0], - [0,0,0,0,1,0,1,0,0,0], - [0,0,0,0,0,0,0,0,0,1] - ]).T - assert_equal(matrix, expected_mat) - - def test_get_zeros_if_not_right_answers_selected(self): - information_holder = InformationHolder(Position.objects.all(), Candidate.objects.all(), QuestionCategory.objects.all()) - right_positions_vector = CandidatesRightPositionsVector(information_holder) - vector = right_positions_vector.get_positions_vector_for_category(self.cat1) - RightAnswer.objects.all().delete() - expected_vector = np.array([0,0,0,0,0,0,0,0,0,0]) - - def test_get_position_vector_respect_with_candidate(self): - information_holder = InformationHolder(Position.objects.all(), Candidate.objects.all(), QuestionCategory.objects.all()) - right_positions_vector = CandidatesRightPositionsVector(information_holder) - vector = right_positions_vector.get_positions_vector_for_candidate(self.c1) - expected_vector = np.array([2,0,0,2,1,0,1,0,1,0]) - assert_equal(vector, expected_vector) - - def test_get_desprivilegios_vector(self): - information_holder = InformationHolder(Position.objects.all(), Candidate.objects.all(), QuestionCategory.objects.all()) - v = information_holder.get_desprivilegios(Candidate.objects.all()) - self.assertEquals(v.shape, (Candidate.objects.count(), )) - self.assertTrue(v[0]) - - def test_get_matrix_of_candidates_with_positions(self): - information_holder = InformationHolder(Position.objects.all(), Candidate.objects.all(), QuestionCategory.objects.all()) - right_positions_vector = CandidatesRightPositionsVector(information_holder) - matrix = right_positions_vector.get_matrix_positions_and_candidates() - expected_mat = np.array([[2,0,0,2,1,0,1,0,1,0], - [0,1,1,0,0,2,0,2,1,0], - [1,0,1,0,0,1,1,0,2,0] - ]) - assert_equal(matrix, expected_mat) - - def test_get_matrix_of_candidates_and_positions_and_right_positions(self): - information_holder = InformationHolder(Position.objects.all(), Candidate.objects.all(), QuestionCategory.objects.all()) - right_positions_vector = CandidatesRightPositionsVector(information_holder) - matrix = right_positions_vector.get_candidates_right_positions_matrix() - self.assertEquals(matrix.shape, (3 ,3)) - self.assertEquals(matrix[0][0], 2) - self.assertEquals(matrix[0][1], 2) - self.assertEquals(matrix[0][2], 0) - - def test_set_electors_categories(self): - builder = MatrixBuilder() - builder.set_electors_categories([self.cat1, self.cat2]) - electors_choices = builder.electors_categories - self.assertEquals(electors_choices.shape, (3,)) - self.assertEquals(electors_choices[0], 3) - self.assertEquals(electors_choices[1], 3) - self.assertEquals(electors_choices[2], 1) - - def test_get_candidates_right_answers_vs_electors(self): - builder = MatrixBuilder() - builder.set_electors_categories([self.cat1, self.cat2]) - r = builder.get_candidates_result() - self.assertEquals(r.shape, (Candidate.objects.count(), )) - - def test_get_candidates_full_answer_including_partido(self): - coaligacao = Coaligacao.objects.create(name=u"Coaligacao a", initials='CA', number='1234') - Partido.objects.create(name=u"Partido de los trabalhadores", - initials='PT', - number='12345', - mark=3.5, - coaligacao=coaligacao) - peta = Partido.objects.create(name=u"Petronila", - initials='PeTa', - number='1232', - mark=4.5, - coaligacao=coaligacao) - self.c1.partido = peta - self.c1.save() - builder = MatrixBuilder() - builder.set_electors_categories([self.cat1, self.cat2]) - r = builder.get_result() - self.assertEquals(r.shape, (Candidate.objects.count(), )) - self.assertEquals(r[0], 56) - self.assertEquals(r[1], 4) - self.assertEquals(r[2], 10) - - def test_get_result_as_dict(self): - coaligacao = Coaligacao.objects.create(name=u"Coaligacao a", initials='CA', number='1234') - Partido.objects.create(name=u"Partido de los trabalhadores", - initials='PT', - number='12345', - mark=3.5, - coaligacao=coaligacao) - peta = Partido.objects.create(name=u"Petronila", - initials='PeTa', - number='1232', - mark=4.5, - coaligacao=coaligacao) - - self.c1.partido = peta - self.c1.save() - builder = MatrixBuilder() - builder.set_electors_categories([self.cat1, self.cat2]) - r = builder.get_result_as_array() - self.assertEquals(r[0]['id'], self.c1.id) - self.assertEquals(r[0]['nota'], 0.56) - self.assertEquals(r[1]['id'], self.c2.id) - self.assertEquals(r[1]['nota'], 0.04) - self.assertEquals(r[2]['id'], self.c3.id) - self.assertEquals(r[2]['nota'], 0.10) \ No newline at end of file diff --git a/merepresenta/match/tests/views_and_forms_tests.py b/merepresenta/match/tests/views_and_forms_tests.py deleted file mode 100644 index 4b9b05f9..00000000 --- a/merepresenta/match/tests/views_and_forms_tests.py +++ /dev/null @@ -1,80 +0,0 @@ -# coding=utf-8 -from django.test import TestCase, override_settings -from merepresenta.match.forms import QuestionsCategoryForm -from merepresenta.match.tests.match_tests import MeRepresentaMatchBase -from merepresenta.models import LGBTQDescription -from django.core.urlresolvers import reverse -from elections.models import Election, Area -import json -from django.utils.text import slugify - - - -@override_settings(ROOT_URLCONF='merepresenta.stand_alone_urls') -class QuestionCategoryForm(TestCase, MeRepresentaMatchBase): - def setUp(self): - super(QuestionCategoryForm, self).setUp() - self.set_data() - - def test_instanciate_form(self): - a = Area.objects.create(name='area') - data = {'categories': [self.cat1.id, self.cat2.id], 'area': a} - form = QuestionsCategoryForm(data=data) - self.assertTrue(form.is_valid()) - self.assertIn(self.cat1, form.cleaned_data['categories']) - self.assertIn(self.cat2, form.cleaned_data['categories']) - self.assertEquals(a, form.cleaned_data['area']) - - def test_get_the_view(self): - url = reverse('match') - response = self.client.get(url) - self.assertEquals(response.status_code, 200) - self.assertIsInstance(response.context['form'], QuestionsCategoryForm) - - def test_get_the_secret_view(self): - url = reverse('match_secret') - response = self.client.get(url) - self.assertEquals(response.status_code, 200) - self.assertIsInstance(response.context['form'], QuestionsCategoryForm) - self.assertTemplateUsed(response, 'match/pergunta.html') - - def test_get_post(self): - a = Area.objects.create(name='area') - e = Election.objects.create(name='Deputada/o estadual', area=a) - gay = LGBTQDescription.objects.create(name="Gay") - url = reverse('match') - data = {'categories': [self.cat1.id, self.cat2.id]} - response = self.client.post(url, data=data) - self.assertEquals(response.status_code, 200) - self.assertTemplateUsed(response, 'match/resultado_ajax.html') - self.assertIn(self.cat1, response.context['categories']) - self.assertIn(self.cat2, response.context['categories']) - self.assertIsInstance(response.context['form'], QuestionsCategoryForm) - election_types = response.context['election_types'] - - self.assertEquals(election_types[0]['id'], slugify(e.name)) - self.assertEquals(election_types[0]['label'], e.name) - - lgbt_descriptions = response.context['lgbt_descriptions'] - self.assertEquals(lgbt_descriptions[0]['id'], 'lgbt_' + str(gay.id)) - self.assertEquals(lgbt_descriptions[0]['label'], gay.name) - - def test_post_get_result(self): - a = Area.objects.create(name='area') - e = Election.objects.create(name='Deputada/o estadual', area=a) - gay = LGBTQDescription.objects.create(name="Gay") - url = reverse('match_result') - data = {'categories': [self.cat1.id, self.cat2.id], 'area': a} - response = self.client.post(url, data=data) - self.assertEquals(response.status_code, 200) - self.assertTemplateUsed(response, 'match/resultado_ajax.html') - self.assertIn(self.cat1, response.context['categories']) - self.assertIn(self.cat2, response.context['categories']) - self.assertEquals(a, response.context['area']) - - def test_post_ajax_result(self): - url = reverse('match_result_ajax') - data = {'categories[]': [self.cat1.id, self.cat2.id]} - response = self.client.post(url, data=data) - c_as_dict = json.dumps(response.content) - self.assertTrue(c_as_dict) diff --git a/merepresenta/match/views.py b/merepresenta/match/views.py deleted file mode 100644 index c664a018..00000000 --- a/merepresenta/match/views.py +++ /dev/null @@ -1,68 +0,0 @@ -from django.views.generic.edit import FormView -from django.http import JsonResponse -from django.views import View -from merepresenta.match.forms import QuestionsCategoryForm -from merepresenta.models import QuestionCategory, Candidate, LGBTQDescription -from django.shortcuts import render -from merepresenta.match.matrix_builder import MatrixBuilder -import json -from django.core.cache import cache -from django.conf import settings -from django.http import HttpResponseRedirect -from django.core.urlresolvers import reverse_lazy - - -class MatchQuestionCategoryBase(FormView): - form_class = QuestionsCategoryForm - - def form_valid(self, form): - # builder = MatrixBuilder() - categories = form.cleaned_data['categories'] - # builder.set_electors_categories(categories) - # r = builder.get_result_as_array() - context = self.get_context_data() - context['area'] = form.cleaned_data['area'] - context['categories'] = categories - election_types_cache_key = 'election_types' - election_types = cache.get(election_types_cache_key) - if election_types is None: - election_types = [{'id': k, 'label': v} for k, v in Candidate.get_possible_election_kinds().items()] - cache.set(election_types_cache_key, election_types) - - context['election_types'] = election_types - lgbt_descriptions_cache_key = 'lgbt_descriptions_' - lgbt_descriptions = cache.get(lgbt_descriptions_cache_key) - if lgbt_descriptions is None: - lgbt_descriptions = [{'id': "lgbt_" + str(lgbt_desc.id), - 'label': lgbt_desc.name} for lgbt_desc in LGBTQDescription.objects.all()] - cache.set(lgbt_descriptions_cache_key, lgbt_descriptions) - context['lgbt_descriptions'] = lgbt_descriptions - return render(self.request, self.success_template, context) - -class MatchView(MatchQuestionCategoryBase): - template_name = 'match/pergunta.html' - success_template = 'match/resultado_ajax.html' - - def dispatch(self, *args, **kwargs): - if not getattr(settings, 'ELEITOR_WORKING', True): - return HttpResponseRedirect(reverse_lazy('volunteer_index')) - return super(MatchView, self).dispatch(*args, **kwargs) - -class MatchSecretView(MatchQuestionCategoryBase): - template_name = 'match/pergunta_secret.html' - success_template = 'match/resultado_ajax.html' - -class MatchResultView(MatchQuestionCategoryBase): - template_name = 'match/pergunta.html' - success_template = 'match/resultado_ajax.html' - - -class MatchResultAjaxView(View): - def post(self, request, *args, **kwargs): - categories = dict(request.POST)['categories[]'] - categories = QuestionCategory.objects.filter(id__in=categories) - builder = MatrixBuilder() - builder.set_electors_categories(categories) - r = builder.get_result_as_array() - return JsonResponse(json.dumps(r), safe=False) - diff --git a/merepresenta/migrations/0001_initial.py b/merepresenta/migrations/0001_initial.py deleted file mode 100644 index dcafd1ba..00000000 --- a/merepresenta/migrations/0001_initial.py +++ /dev/null @@ -1,41 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.9 on 2018-03-22 22:09 -from __future__ import unicode_literals - -from django.db import migrations -import django.db.models.manager - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ('popular_proposal', '0033_popular_proposal_multiple_sites'), - ] - - operations = [ - migrations.CreateModel( - name='MeRepresentaCommitment', - fields=[ - ], - options={ - 'proxy': True, - 'indexes': [], - }, - bases=('popular_proposal.commitment',), - ), - migrations.CreateModel( - name='MeRepresentaPopularProposal', - fields=[ - ], - options={ - 'proxy': True, - 'indexes': [], - }, - bases=('popular_proposal.popularproposal',), - managers=[ - ('ordered', django.db.models.manager.Manager()), - ], - ), - ] diff --git a/merepresenta/migrations/0002_auto_20180717_1525.py b/merepresenta/migrations/0002_auto_20180717_1525.py deleted file mode 100644 index ae23ac49..00000000 --- a/merepresenta/migrations/0002_auto_20180717_1525.py +++ /dev/null @@ -1,70 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.9 on 2018-07-17 15:25 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('backend_candidate', '0014_remove_suggesting_models'), - ('merepresenta', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='VolunteerGetsCandidateEmailLog', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', models.DateTimeField(auto_now=True)), - ('updated', models.DateTimeField(auto_now_add=True)), - ], - ), - migrations.CreateModel( - name='VolunteerInCandidate', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', models.DateTimeField(auto_now=True)), - ('updated', models.DateTimeField(auto_now_add=True)), - ], - ), - migrations.CreateModel( - name='Candidate', - fields=[ - ], - options={ - 'proxy': True, - 'indexes': [], - }, - bases=('elections.candidate',), - ), - migrations.AddField( - model_name='volunteerincandidate', - name='candidate', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='merepresenta.Candidate'), - ), - migrations.AddField( - model_name='volunteerincandidate', - name='volunteer', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), - ), - migrations.AddField( - model_name='volunteergetscandidateemaillog', - name='candidate', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='merepresenta.Candidate'), - ), - migrations.AddField( - model_name='volunteergetscandidateemaillog', - name='contact', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='backend_candidate.CandidacyContact'), - ), - migrations.AddField( - model_name='volunteergetscandidateemaillog', - name='volunteer', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), - ), - ] diff --git a/merepresenta/migrations/0003_auto_20180717_2345.py b/merepresenta/migrations/0003_auto_20180717_2345.py deleted file mode 100644 index dfae8c6b..00000000 --- a/merepresenta/migrations/0003_auto_20180717_2345.py +++ /dev/null @@ -1,43 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.9 on 2018-07-17 23:45 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('elections', '0032_auto_20180525_1552'), - ('merepresenta', '0002_auto_20180717_1525'), - ] - - operations = [ - migrations.DeleteModel( - name='Candidate', - ), - migrations.CreateModel( - name='Candidate', - fields=[ - ('candidate_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='elections.Candidate')), - ('cpf', models.CharField(max_length=1024, null=True)), - ('nome_completo', models.CharField(max_length=1024, null=True)), - ('numero', models.CharField(max_length=1024, null=True)), - ], - options={ - 'abstract': False, - }, - bases=('elections.candidate',), - ), - migrations.AlterField( - model_name=b'VolunteerGetsCandidateEmailLog', - name='candidate', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='merepresenta.Candidate'), - ), - migrations.AlterField( - model_name=b'VolunteerInCandidate', - name='candidate', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='merepresenta.Candidate'), - ), - ] diff --git a/merepresenta/migrations/0004_coaligacao_partido.py b/merepresenta/migrations/0004_coaligacao_partido.py deleted file mode 100644 index 2a1d7f71..00000000 --- a/merepresenta/migrations/0004_coaligacao_partido.py +++ /dev/null @@ -1,37 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.9 on 2018-07-18 00:02 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('merepresenta', '0003_auto_20180717_2345'), - ] - - operations = [ - migrations.CreateModel( - name='Coaligacao', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=1024, null=True)), - ('initials', models.CharField(max_length=1024, null=True)), - ('number', models.CharField(max_length=1024, null=True)), - ('mark', models.IntegerField()), - ], - ), - migrations.CreateModel( - name='Partido', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=1024, null=True)), - ('initials', models.CharField(max_length=1024, null=True)), - ('number', models.CharField(max_length=1024, null=True)), - ('mark', models.IntegerField()), - ('coaligacao', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='merepresenta.Coaligacao')), - ], - ), - ] diff --git a/merepresenta/migrations/0005_auto_20180718_2034.py b/merepresenta/migrations/0005_auto_20180718_2034.py deleted file mode 100644 index 023d40b2..00000000 --- a/merepresenta/migrations/0005_auto_20180718_2034.py +++ /dev/null @@ -1,30 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.9 on 2018-07-18 20:34 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('merepresenta', '0004_coaligacao_partido'), - ] - - operations = [ - migrations.AddField( - model_name='candidate', - name='race', - field=models.CharField(max_length=1024, null=True), - ), - migrations.AlterField( - model_name='coaligacao', - name='mark', - field=models.IntegerField(null=True), - ), - migrations.AlterField( - model_name='partido', - name='mark', - field=models.IntegerField(null=True), - ), - ] diff --git a/merepresenta/migrations/0006_auto_20180718_2116.py b/merepresenta/migrations/0006_auto_20180718_2116.py deleted file mode 100644 index 6456c503..00000000 --- a/merepresenta/migrations/0006_auto_20180718_2116.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.9 on 2018-07-18 21:16 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('merepresenta', '0005_auto_20180718_2034'), - ] - - operations = [ - migrations.AddField( - model_name='candidate', - name='email_repeated', - field=models.NullBooleanField(), - ), - migrations.AddField( - model_name='candidate', - name='original_email', - field=models.EmailField(max_length=1024, null=True), - ), - ] diff --git a/merepresenta/migrations/0007_auto_20180719_1731.py b/merepresenta/migrations/0007_auto_20180719_1731.py deleted file mode 100644 index 4f1a3767..00000000 --- a/merepresenta/migrations/0007_auto_20180719_1731.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.9 on 2018-07-19 17:31 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('merepresenta', '0006_auto_20180718_2116'), - ] - - operations = [ - migrations.AddField( - model_name='candidate', - name='partido', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='merepresenta.Partido'), - ), - migrations.AlterField( - model_name='partido', - name='coaligacao', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='merepresenta.Coaligacao'), - ), - ] diff --git a/merepresenta/migrations/0008_candidate_is_ghost.py b/merepresenta/migrations/0008_candidate_is_ghost.py deleted file mode 100644 index e9de87f5..00000000 --- a/merepresenta/migrations/0008_candidate_is_ghost.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.9 on 2018-07-24 15:06 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('merepresenta', '0007_auto_20180719_1731'), - ] - - operations = [ - migrations.AddField( - model_name='candidate', - name='is_ghost', - field=models.BooleanField(default=False), - ), - ] diff --git a/merepresenta/migrations/0009_candidate_facebook_contacted.py b/merepresenta/migrations/0009_candidate_facebook_contacted.py deleted file mode 100644 index 39ac4caf..00000000 --- a/merepresenta/migrations/0009_candidate_facebook_contacted.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.9 on 2018-07-27 18:07 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('merepresenta', '0008_candidate_is_ghost'), - ] - - operations = [ - migrations.AddField( - model_name='candidate', - name='facebook_contacted', - field=models.BooleanField(default=False), - ), - ] diff --git a/merepresenta/migrations/0010_volunteerprofile.py b/merepresenta/migrations/0010_volunteerprofile.py deleted file mode 100644 index 55cfe3d6..00000000 --- a/merepresenta/migrations/0010_volunteerprofile.py +++ /dev/null @@ -1,27 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.9 on 2018-07-31 16:04 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('elections', '0033_auto_20180717_2345'), - ('merepresenta', '0009_candidate_facebook_contacted'), - ] - - operations = [ - migrations.CreateModel( - name='VolunteerProfile', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('area', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='volunteers', to='elections.Area')), - ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='volunteer_profile', to=settings.AUTH_USER_MODEL)), - ], - ), - ] diff --git a/merepresenta/migrations/0011_auto_20180731_1604.py b/merepresenta/migrations/0011_auto_20180731_1604.py deleted file mode 100644 index dec0cc5f..00000000 --- a/merepresenta/migrations/0011_auto_20180731_1604.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.9 on 2018-07-31 16:04 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('merepresenta', '0010_volunteerprofile'), - ] - - operations = [ - migrations.AlterField( - model_name='volunteergetscandidateemaillog', - name='contact', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='backend_candidate.CandidacyContact'), - ), - ] diff --git a/merepresenta/migrations/0012_auto_20180731_1749.py b/merepresenta/migrations/0012_auto_20180731_1749.py deleted file mode 100644 index e2c6782e..00000000 --- a/merepresenta/migrations/0012_auto_20180731_1749.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.9 on 2018-07-31 17:49 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('merepresenta', '0011_auto_20180731_1604'), - ] - - operations = [ - migrations.AlterModelTable( - name='volunteerprofile', - table='voluntarios_profile', - ), - ] diff --git a/merepresenta/migrations/0013_candidate_data_de_nascimento.py b/merepresenta/migrations/0013_candidate_data_de_nascimento.py deleted file mode 100644 index 90257708..00000000 --- a/merepresenta/migrations/0013_candidate_data_de_nascimento.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.9 on 2018-07-31 19:35 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('merepresenta', '0012_auto_20180731_1749'), - ] - - operations = [ - migrations.AddField( - model_name='candidate', - name='data_de_nascimento', - field=models.DateField(null=True), - ), - ] diff --git a/merepresenta/migrations/0014_auto_20180801_1551.py b/merepresenta/migrations/0014_auto_20180801_1551.py deleted file mode 100644 index e31b94a3..00000000 --- a/merepresenta/migrations/0014_auto_20180801_1551.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.9 on 2018-08-01 15:51 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('merepresenta', '0013_candidate_data_de_nascimento'), - ] - - operations = [ - migrations.AlterField( - model_name='candidate', - name='cpf', - field=models.CharField(max_length=1024, unique=True), - ), - ] diff --git a/merepresenta/migrations/0015_auto_20180807_1723.py b/merepresenta/migrations/0015_auto_20180807_1723.py deleted file mode 100644 index 5ed67b22..00000000 --- a/merepresenta/migrations/0015_auto_20180807_1723.py +++ /dev/null @@ -1,41 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.9 on 2018-08-07 17:23 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('elections', '0033_auto_20180717_2345'), - ('merepresenta', '0014_auto_20180801_1551'), - ] - - operations = [ - migrations.CreateModel( - name='CandidateQuestionCategory', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', models.DateTimeField(auto_now=True)), - ('updated', models.DateTimeField(auto_now_add=True)), - ('candidate', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='merepresenta.Candidate')), - ], - ), - migrations.CreateModel( - name='QuestionCategory', - fields=[ - ], - options={ - 'proxy': True, - 'indexes': [], - }, - bases=('elections.questioncategory',), - ), - migrations.AddField( - model_name='candidatequestioncategory', - name='category', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='merepresenta.QuestionCategory'), - ), - ] diff --git a/merepresenta/migrations/0016_auto_20180809_1602.py b/merepresenta/migrations/0016_auto_20180809_1602.py deleted file mode 100644 index fdc8806b..00000000 --- a/merepresenta/migrations/0016_auto_20180809_1602.py +++ /dev/null @@ -1,60 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.9 on 2018-08-09 16:02 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('merepresenta', '0015_auto_20180807_1723'), - ] - - operations = [ - migrations.AddField( - model_name='candidate', - name='amarela', - field=models.BooleanField(default=False, verbose_name='Amarela'), - ), - migrations.AddField( - model_name='candidate', - name='bio', - field=models.TextField(default=''), - ), - migrations.AddField( - model_name='candidate', - name='branca', - field=models.BooleanField(default=False, verbose_name='Branca'), - ), - migrations.AddField( - model_name='candidate', - name='candidatura_coletiva', - field=models.BooleanField(default=False), - ), - migrations.AddField( - model_name='candidate', - name='indigena', - field=models.BooleanField(default=False, verbose_name='Ind\xedgena'), - ), - migrations.AddField( - model_name='candidate', - name='lgbt', - field=models.BooleanField(default=False), - ), - migrations.AddField( - model_name='candidate', - name='parda', - field=models.BooleanField(default=False, verbose_name='Parda'), - ), - migrations.AddField( - model_name='candidate', - name='preta', - field=models.BooleanField(default=False, verbose_name='Preta'), - ), - migrations.AddField( - model_name='candidate', - name='renovacao_politica', - field=models.CharField(default='', max_length=512), - ), - ] diff --git a/merepresenta/migrations/0017_auto_20180815_1604.py b/merepresenta/migrations/0017_auto_20180815_1604.py deleted file mode 100644 index 7f426485..00000000 --- a/merepresenta/migrations/0017_auto_20180815_1604.py +++ /dev/null @@ -1,27 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.9 on 2018-08-15 16:04 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('merepresenta', '0016_auto_20180809_1602'), - ] - - operations = [ - migrations.CreateModel( - name='LGBTQDescription', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=256, verbose_name='Nome')), - ], - ), - migrations.AddField( - model_name='candidate', - name='lgbt_desc', - field=models.ManyToManyField(to='merepresenta.LGBTQDescription'), - ), - ] diff --git a/merepresenta/migrations/0018_auto_20180830_1923.py b/merepresenta/migrations/0018_auto_20180830_1923.py deleted file mode 100644 index 0a840371..00000000 --- a/merepresenta/migrations/0018_auto_20180830_1923.py +++ /dev/null @@ -1,30 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.9 on 2018-08-30 19:23 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('merepresenta', '0017_auto_20180815_1604'), - ] - - operations = [ - migrations.AlterField( - model_name='candidate', - name='bio', - field=models.TextField(blank=True, default=''), - ), - migrations.AlterField( - model_name='candidate', - name='lgbt_desc', - field=models.ManyToManyField(blank=True, to='merepresenta.LGBTQDescription'), - ), - migrations.AlterField( - model_name='candidate', - name='renovacao_politica', - field=models.CharField(blank=True, default='', max_length=512), - ), - ] diff --git a/merepresenta/migrations/0019_rightanswer.py b/merepresenta/migrations/0019_rightanswer.py deleted file mode 100644 index 9e62dc11..00000000 --- a/merepresenta/migrations/0019_rightanswer.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.9 on 2018-09-03 16:14 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('elections', '0034_auto_20180903_1614'), - ('merepresenta', '0018_auto_20180830_1923'), - ] - - operations = [ - migrations.CreateModel( - name='RightAnswer', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('position', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='candidator.Position')), - ('topic', models.OneToOneField(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='right_answer', to='elections.Topic')), - ], - ), - ] diff --git a/merepresenta/migrations/0020_auto_20180905_1922.py b/merepresenta/migrations/0020_auto_20180905_1922.py deleted file mode 100644 index 4d5f4feb..00000000 --- a/merepresenta/migrations/0020_auto_20180905_1922.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.9 on 2018-09-05 19:22 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('merepresenta', '0019_rightanswer'), - ] - - operations = [ - migrations.AlterField( - model_name='partido', - name='mark', - field=models.FloatField(null=True), - ), - ] diff --git a/merepresenta/migrations/0021_remove_coaligacao_mark.py b/merepresenta/migrations/0021_remove_coaligacao_mark.py deleted file mode 100644 index 070a878d..00000000 --- a/merepresenta/migrations/0021_remove_coaligacao_mark.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.9 on 2018-09-05 19:25 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('merepresenta', '0020_auto_20180905_1922'), - ] - - operations = [ - migrations.RemoveField( - model_name='coaligacao', - name='mark', - ), - ] diff --git a/merepresenta/migrations/0022_coaligacao_area.py b/merepresenta/migrations/0022_coaligacao_area.py deleted file mode 100644 index dadbc552..00000000 --- a/merepresenta/migrations/0022_coaligacao_area.py +++ /dev/null @@ -1,22 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.9 on 2018-10-01 14:59 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('elections', '0034_auto_20180903_1614'), - ('merepresenta', '0021_remove_coaligacao_mark'), - ] - - operations = [ - migrations.AddField( - model_name='coaligacao', - name='area', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='coligacoes', to='elections.Area'), - ), - ] diff --git a/merepresenta/migrations/0023_coaligacao_classification.py b/merepresenta/migrations/0023_coaligacao_classification.py deleted file mode 100644 index 4af1f31b..00000000 --- a/merepresenta/migrations/0023_coaligacao_classification.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.9 on 2018-10-01 19:01 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('merepresenta', '0022_coaligacao_area'), - ] - - operations = [ - migrations.AddField( - model_name='coaligacao', - name='classification', - field=models.CharField(max_length=512, null=True), - ), - ] diff --git a/merepresenta/migrations/__init__.py b/merepresenta/migrations/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/merepresenta/models.py b/merepresenta/models.py deleted file mode 100644 index 85bfc25f..00000000 --- a/merepresenta/models.py +++ /dev/null @@ -1,339 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models -from django.db.models import Case, Value, When, PositiveSmallIntegerField, Sum, F -from popular_proposal.models import PopularProposal, Commitment -from elections.models import Candidate as OriginalCandidate, Area -from django.core.urlresolvers import reverse -from django.contrib.auth.models import User -from backend_candidate.models import CandidacyContact, Candidacy -from votai_utils.send_mails import send_mail -from django.utils import timezone -import datetime -from elections.models import QuestionCategory as OriginalQuestionCategory, Topic, Election -from django.utils.encoding import python_2_unicode_compatible -from django.dispatch import receiver -from django.db.models.signals import post_save -from candidator.models import Position -from merepresenta.dicts_and_lists_for_ordering import partidos_mix -from django.conf import settings -from urlparse import urljoin -from django.utils.text import slugify - - -class MeRepresentaPopularProposal(PopularProposal): - class Meta: - proxy = True - - -class MeRepresentaCommitment(Commitment): - class Meta: - proxy = True - - def save(self, *args, **kwargs): - return self._save(*args, **kwargs) - - -NON_MALE_KEY = "F" -NON_WHITE_KEY = {"possible_values": ["PARDA", "PRETA"]} - - -class ForVolunteersManager(models.Manager): - def get_queryset(self): - qs = super(ForVolunteersManager, self).get_queryset() - qs = qs.annotate( - is_women=Case(When(gender='F', then=Value(1)), - default=Value(0), - output_field=PositiveSmallIntegerField()) - ) - qs = qs.annotate(is_non_white=Case(When(race__in=NON_WHITE_KEY['possible_values'], then=Value(1)), - default=Value(0), - output_field=PositiveSmallIntegerField()) - - ) - qs = qs.annotate(bad_email=Case( - When(email_repeated=True, then=Value(1)), - When(original_email__isnull=True, then=Value(1)), - When(original_email="", then=Value(1)), - default=Value(0), - output_field=PositiveSmallIntegerField()) - - ) - qs = qs.annotate(is_lgbt=Case(When(lgbt=True, then=Value(1)), - default=Value(0), - output_field=PositiveSmallIntegerField()) - - ) - qs = qs.annotate(desprivilegio=F('is_women') + F('is_non_white') + F('bad_email') + F('is_lgbt')) - return qs - -class LimitCandidatesForVolunteers(ForVolunteersManager): - def get_queryset(self): - qs = super(LimitCandidatesForVolunteers, self).get_queryset() - qs = qs.exclude(contacts__isnull=False) - qs = qs.exclude(is_ghost=True) - qs = qs.exclude(facebook_contacted=True) - qs = qs.exclude(candidacy__isnull=False) - minutes = 30 - from_time = timezone.now() - datetime.timedelta(minutes=minutes) - qs = qs.exclude(volunteerincandidate__created__gte=from_time) - return qs - - -@python_2_unicode_compatible -class LGBTQDescription(models.Model): - name = models.CharField(max_length=256, verbose_name="Nome") - - def __str__(self): - return self.name - - - -RACES = { - 'branca': u"Branca", - 'preta': u"Preta", - 'parda': u"Parda", - 'amarela': u"Amarela", - 'indigena': u"Indígena", -} - -## RACES -## Why I did it this way: after a while dealing with how to store races -## I realized that according to brasilian law -## this will not likely change in the future -class RaceMixin(models.Model): - branca = models.BooleanField(default=False, verbose_name=RACES['branca']) - preta = models.BooleanField(default=False, verbose_name=RACES['preta']) - parda = models.BooleanField(default=False, verbose_name=RACES['parda']) - amarela = models.BooleanField(default=False, verbose_name=RACES['amarela']) - indigena = models.BooleanField(default=False, verbose_name=RACES['indigena']) - - - def get_races(self): - possibles = RACES.keys() - races_result = [] - for r in possibles: - if getattr(self, r, False): - races_result.append(RACES[r]) - return races_result - - class Meta: - abstract = True - - -class Candidate(OriginalCandidate, RaceMixin): - cpf = models.CharField(max_length=1024, unique=True) - nome_completo = models.CharField(max_length=1024, null=True) - numero = models.CharField(max_length=1024, null=True) - race = models.CharField(max_length=1024, null=True) - original_email = models.EmailField(max_length=1024, null=True) - email_repeated = models.NullBooleanField() - is_ghost = models.BooleanField(default=False) - facebook_contacted = models.BooleanField(default=False) - data_de_nascimento = models.DateField(null=True) - partido = models.ForeignKey("Partido", null=True) - bio = models.TextField(default='', blank=True) - lgbt = models.BooleanField(default=False, blank=True) - lgbt_desc = models.ManyToManyField(LGBTQDescription, blank=True) - renovacao_politica = models.CharField(max_length=512, default='', blank=True) - candidatura_coletiva = models.BooleanField(default=False) - objects = ForVolunteersManager() - - for_volunteers = LimitCandidatesForVolunteers() - - @classmethod - def get_possible_election_kinds(cls): - r = {} - for e in Election.objects.exclude(name=u"Deputada/o Distrital").values_list('name', flat=True).distinct(): - r[slugify(e)] = e - return r - - @property - def election_kind(self): - if self.election is None: - return "" - if self.election.name == "Deputada/o Distrital": - return slugify('Deputada/o Estadual') - return slugify(self.election.name) - - def get_image(self): - if self.candidacy_set.exists(): - user = self.candidacy_set.first().user - return user.profile.image - return self.image - - @property - def emails(self): - emails = {} - if self.original_email: - emails['TSE'] = self.original_email - if self.email: - emails['email'] = self.email - for candidacy in self.candidacy_set.all(): - email = candidacy.user.email - if email is not None and email not in emails: - emails['facebook'] = email - return emails - - def get_absolute_url(self): - return reverse('candidate_profile', kwargs={'slug': self.slug}) - - def as_dict(self): - partido_initials = '' - coaligacao = '' - coaligacao_mark = '' - if self.partido: - partido_initials = self.partido.initials - if self.partido.coaligacao: - coaligacao = self.partido.coaligacao.name - coaligacao_mark = round(self.partido.coaligacao.mark, 2) - area_id = "" - area_name = "" - area_initial = "" - try: - area_id = self.election.area.id - area_name = self.election.area.name - area_initial = self.election.area.identifier - except: - pass - d ={ - 'id': self.id, - 'name': self.name, - 'numero': self.numero, - 'race': self.race, - 'gender': self.gender, - 'lgbt': self.lgbt, - 'estado': area_name, - 'estado_initial': area_initial, - 'lgbt_desc': [d.name for d in self.lgbt_desc.all()], - 'candidatura_coletiva': self.candidatura_coletiva, - 'partido': partido_initials, - 'coaligacao': coaligacao, - 'nota_coaligacao': coaligacao_mark, - 'url': self.get_absolute_url(), - 'electionType': self.election_kind, - } - try: - src = self.candidacy_set.first().user.profile.image.url - d['image'] = urljoin(settings.STATIC_URL, src) - except: - d['image'] = urljoin(settings.STATIC_URL, 'img/candidate-default.jpg') - if self.partido: - partido_id = partidos_mix.get(self.partido.initials, self.partido.initials) - else: - partido_id = None - _filter = { - 'mulher': self.gender == NON_MALE_KEY, - 'is_lgbt': self.lgbt, - 'partido': partido_id, - 'estado': area_id, - 'preta': self.preta or self.parda, - 'indigena': self.indigena - } - for desc in LGBTQDescription.objects.all(): - if desc in self.lgbt_desc.all(): - _filter['lgbt_' + str(desc.id)] = True - else: - _filter['lgbt_' + str(desc.id)] = False - d['filter'] = _filter - return d - -class VolunteerInCandidate(models.Model): - volunteer = models.ForeignKey(User) - candidate = models.ForeignKey(Candidate) - created = models.DateTimeField(auto_now=True) - updated = models.DateTimeField(auto_now_add=True) - - -class VolunteerGetsCandidateEmailLog(models.Model): - volunteer = models.ForeignKey(User) - candidate = models.ForeignKey(Candidate) - contact = models.ForeignKey(CandidacyContact, null=True) - created = models.DateTimeField(auto_now=True) - updated = models.DateTimeField(auto_now_add=True) - - - def save(self, *args, **kwargs): - creating = self.pk is None - ## Contact can be none, since a volunteer can - ## say that she/he contacted the candidate through other means - if creating and self.contact: - context = { - 'candidate': self.candidate.name - } - - send_mail(context, 'contato_novo_com_candidato', to=[self.contact.mail],) - return super(VolunteerGetsCandidateEmailLog, self).save(*args, **kwargs) - - -class Coaligacao(models.Model): - name = models.CharField(max_length=1024, null=True) - initials = models.CharField(max_length=1024, null=True) - number = models.CharField(max_length=1024, null=True) - area = models.ForeignKey(Area, related_name='coligacoes', null=True) - classification = models.CharField(max_length=512, null=True) - - @property - def mark(self): - final_sum = 0.0 - counter = 0 - for p in self.partido_set.all(): - final_sum += p.mark - counter += 1 - if not counter: - return 0 - return final_sum/counter - -class Partido(models.Model): - name = models.CharField(max_length=1024, null=True) - initials = models.CharField(max_length=1024, null=True) - number = models.CharField(max_length=1024, null=True) - mark = models.FloatField(null=True) - coaligacao = models.ForeignKey(Coaligacao, null=True) - - -@python_2_unicode_compatible -class QuestionCategory(OriginalQuestionCategory): - def __str__(self): - return self.name - - class Meta: - proxy = True - - -@python_2_unicode_compatible -class CandidateQuestionCategory(models.Model): - candidate = models.ForeignKey(Candidate) - category = models.ForeignKey(QuestionCategory) - created = models.DateTimeField(auto_now=True) - updated = models.DateTimeField(auto_now_add=True) - - def __str__(self): - return self.candidate.name + u" / " + self.category.name - - -@receiver(post_save, sender=Candidacy, dispatch_uid="say_thanks_to_the_volunteer") -def say_thanks_to_the_volunteer(sender, instance, created, raw, **kwargs): - if raw: - return - if created: - try: - log = VolunteerGetsCandidateEmailLog.objects.get(candidate=instance.candidate) - context = {'candidate': log.candidate} - send_mail(context, 'candidato_com_a_gente_por_sua_acao', to=[log.volunteer.email],) - except VolunteerGetsCandidateEmailLog.DoesNotExist: - pass - - -class RightAnswer(models.Model): - topic = models.OneToOneField(Topic, related_name='right_answer', null=True) - position = models.OneToOneField(Position) - -##### VOLUNTEERS PART!!! -## I wrote this as part of #MeRepresenta, this means that we haven't needed volunteers doing research on candidates before -## This is why I kept it here until now -## But as I'm coding it I am becoming aware that this could be a good feature to have in the feature, this is why I'm keeping this in -## an inner module, so when I have more time and the need from another NGO to have the volunteers backend -## I can grab it and move it to another application -from merepresenta.voluntarios.models import VolunteerProfile \ No newline at end of file diff --git a/merepresenta/settings.py b/merepresenta/settings.py deleted file mode 100644 index a941db90..00000000 --- a/merepresenta/settings.py +++ /dev/null @@ -1,5 +0,0 @@ -MEREPRESENTA_SITE_ID = 2 -MEREPRESENTA_CANDIDATES_ALLOWED_TO_UPDATE = True -ELEITOR_WORKING = True -MEREPRESENTA_VOLUNTARIOS_ON = True -SECRET_URL_MATCH='secret_match' diff --git a/merepresenta/stand_alone_urls.py b/merepresenta/stand_alone_urls.py deleted file mode 100644 index c73c68ec..00000000 --- a/merepresenta/stand_alone_urls.py +++ /dev/null @@ -1,15 +0,0 @@ - -from django.conf.urls import url, include -from votita.rest_api_router import router -from django.conf import settings - - -urlpatterns = [ - url(r'^', include('merepresenta.urls')), -] - -if settings.DEBUG: - import debug_toolbar - urlpatterns += [ - url(r'^__debug__/', include(debug_toolbar.urls)), - ] diff --git a/merepresenta/static/css/bootstrap-datepicker.css b/merepresenta/static/css/bootstrap-datepicker.css deleted file mode 100644 index 1b1e7515..00000000 --- a/merepresenta/static/css/bootstrap-datepicker.css +++ /dev/null @@ -1,477 +0,0 @@ -/*! - * Datepicker for Bootstrap v1.8.0 (https://github.com/uxsolutions/bootstrap-datepicker) - * - * Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0) - */ - -.datepicker { - padding: 4px; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - direction: ltr; -} -.datepicker-inline { - width: 220px; -} -.datepicker-rtl { - direction: rtl; -} -.datepicker-rtl.dropdown-menu { - left: auto; -} -.datepicker-rtl table tr td span { - float: right; -} -.datepicker-dropdown { - top: 0; - left: 0; -} -.datepicker-dropdown:before { - content: ''; - display: inline-block; - border-left: 7px solid transparent; - border-right: 7px solid transparent; - border-bottom: 7px solid #999; - border-top: 0; - border-bottom-color: rgba(0, 0, 0, 0.2); - position: absolute; -} -.datepicker-dropdown:after { - content: ''; - display: inline-block; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-bottom: 6px solid #fff; - border-top: 0; - position: absolute; -} -.datepicker-dropdown.datepicker-orient-left:before { - left: 6px; -} -.datepicker-dropdown.datepicker-orient-left:after { - left: 7px; -} -.datepicker-dropdown.datepicker-orient-right:before { - right: 6px; -} -.datepicker-dropdown.datepicker-orient-right:after { - right: 7px; -} -.datepicker-dropdown.datepicker-orient-bottom:before { - top: -7px; -} -.datepicker-dropdown.datepicker-orient-bottom:after { - top: -6px; -} -.datepicker-dropdown.datepicker-orient-top:before { - bottom: -7px; - border-bottom: 0; - border-top: 7px solid #999; -} -.datepicker-dropdown.datepicker-orient-top:after { - bottom: -6px; - border-bottom: 0; - border-top: 6px solid #fff; -} -.datepicker table { - margin: 0; - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} -.datepicker td, -.datepicker th { - text-align: center; - width: 20px; - height: 20px; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - border: none; -} -.table-striped .datepicker table tr td, -.table-striped .datepicker table tr th { - background-color: transparent; -} -.datepicker table tr td.day:hover, -.datepicker table tr td.day.focused { - background: #eee; - cursor: pointer; -} -.datepicker table tr td.old, -.datepicker table tr td.new { - color: #999; -} -.datepicker table tr td.disabled, -.datepicker table tr td.disabled:hover { - background: none; - color: #999; - cursor: default; -} -.datepicker table tr td.highlighted { - background: #d9edf7; - border-radius: 0; -} -.datepicker table tr td.today, -.datepicker table tr td.today:hover, -.datepicker table tr td.today.disabled, -.datepicker table tr td.today.disabled:hover { - background-color: #fde19a; - background-image: -moz-linear-gradient(to bottom, #fdd49a, #fdf59a); - background-image: -ms-linear-gradient(to bottom, #fdd49a, #fdf59a); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fdd49a), to(#fdf59a)); - background-image: -webkit-linear-gradient(to bottom, #fdd49a, #fdf59a); - background-image: -o-linear-gradient(to bottom, #fdd49a, #fdf59a); - background-image: linear-gradient(to bottom, #fdd49a, #fdf59a); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fdd49a', endColorstr='#fdf59a', GradientType=0); - border-color: #fdf59a #fdf59a #fbed50; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); - color: #000; -} -.datepicker table tr td.today:hover, -.datepicker table tr td.today:hover:hover, -.datepicker table tr td.today.disabled:hover, -.datepicker table tr td.today.disabled:hover:hover, -.datepicker table tr td.today:active, -.datepicker table tr td.today:hover:active, -.datepicker table tr td.today.disabled:active, -.datepicker table tr td.today.disabled:hover:active, -.datepicker table tr td.today.active, -.datepicker table tr td.today:hover.active, -.datepicker table tr td.today.disabled.active, -.datepicker table tr td.today.disabled:hover.active, -.datepicker table tr td.today.disabled, -.datepicker table tr td.today:hover.disabled, -.datepicker table tr td.today.disabled.disabled, -.datepicker table tr td.today.disabled:hover.disabled, -.datepicker table tr td.today[disabled], -.datepicker table tr td.today:hover[disabled], -.datepicker table tr td.today.disabled[disabled], -.datepicker table tr td.today.disabled:hover[disabled] { - background-color: #fdf59a; -} -.datepicker table tr td.today:active, -.datepicker table tr td.today:hover:active, -.datepicker table tr td.today.disabled:active, -.datepicker table tr td.today.disabled:hover:active, -.datepicker table tr td.today.active, -.datepicker table tr td.today:hover.active, -.datepicker table tr td.today.disabled.active, -.datepicker table tr td.today.disabled:hover.active { - background-color: #fbf069 \9; -} -.datepicker table tr td.today:hover:hover { - color: #000; -} -.datepicker table tr td.today.active:hover { - color: #fff; -} -.datepicker table tr td.range, -.datepicker table tr td.range:hover, -.datepicker table tr td.range.disabled, -.datepicker table tr td.range.disabled:hover { - background: #eee; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.datepicker table tr td.range.today, -.datepicker table tr td.range.today:hover, -.datepicker table tr td.range.today.disabled, -.datepicker table tr td.range.today.disabled:hover { - background-color: #f3d17a; - background-image: -moz-linear-gradient(to bottom, #f3c17a, #f3e97a); - background-image: -ms-linear-gradient(to bottom, #f3c17a, #f3e97a); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f3c17a), to(#f3e97a)); - background-image: -webkit-linear-gradient(to bottom, #f3c17a, #f3e97a); - background-image: -o-linear-gradient(to bottom, #f3c17a, #f3e97a); - background-image: linear-gradient(to bottom, #f3c17a, #f3e97a); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f3c17a', endColorstr='#f3e97a', GradientType=0); - border-color: #f3e97a #f3e97a #edde34; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.datepicker table tr td.range.today:hover, -.datepicker table tr td.range.today:hover:hover, -.datepicker table tr td.range.today.disabled:hover, -.datepicker table tr td.range.today.disabled:hover:hover, -.datepicker table tr td.range.today:active, -.datepicker table tr td.range.today:hover:active, -.datepicker table tr td.range.today.disabled:active, -.datepicker table tr td.range.today.disabled:hover:active, -.datepicker table tr td.range.today.active, -.datepicker table tr td.range.today:hover.active, -.datepicker table tr td.range.today.disabled.active, -.datepicker table tr td.range.today.disabled:hover.active, -.datepicker table tr td.range.today.disabled, -.datepicker table tr td.range.today:hover.disabled, -.datepicker table tr td.range.today.disabled.disabled, -.datepicker table tr td.range.today.disabled:hover.disabled, -.datepicker table tr td.range.today[disabled], -.datepicker table tr td.range.today:hover[disabled], -.datepicker table tr td.range.today.disabled[disabled], -.datepicker table tr td.range.today.disabled:hover[disabled] { - background-color: #f3e97a; -} -.datepicker table tr td.range.today:active, -.datepicker table tr td.range.today:hover:active, -.datepicker table tr td.range.today.disabled:active, -.datepicker table tr td.range.today.disabled:hover:active, -.datepicker table tr td.range.today.active, -.datepicker table tr td.range.today:hover.active, -.datepicker table tr td.range.today.disabled.active, -.datepicker table tr td.range.today.disabled:hover.active { - background-color: #efe24b \9; -} -.datepicker table tr td.selected, -.datepicker table tr td.selected:hover, -.datepicker table tr td.selected.disabled, -.datepicker table tr td.selected.disabled:hover { - background-color: #9e9e9e; - background-image: -moz-linear-gradient(to bottom, #b3b3b3, #808080); - background-image: -ms-linear-gradient(to bottom, #b3b3b3, #808080); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#b3b3b3), to(#808080)); - background-image: -webkit-linear-gradient(to bottom, #b3b3b3, #808080); - background-image: -o-linear-gradient(to bottom, #b3b3b3, #808080); - background-image: linear-gradient(to bottom, #b3b3b3, #808080); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#b3b3b3', endColorstr='#808080', GradientType=0); - border-color: #808080 #808080 #595959; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); - color: #fff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); -} -.datepicker table tr td.selected:hover, -.datepicker table tr td.selected:hover:hover, -.datepicker table tr td.selected.disabled:hover, -.datepicker table tr td.selected.disabled:hover:hover, -.datepicker table tr td.selected:active, -.datepicker table tr td.selected:hover:active, -.datepicker table tr td.selected.disabled:active, -.datepicker table tr td.selected.disabled:hover:active, -.datepicker table tr td.selected.active, -.datepicker table tr td.selected:hover.active, -.datepicker table tr td.selected.disabled.active, -.datepicker table tr td.selected.disabled:hover.active, -.datepicker table tr td.selected.disabled, -.datepicker table tr td.selected:hover.disabled, -.datepicker table tr td.selected.disabled.disabled, -.datepicker table tr td.selected.disabled:hover.disabled, -.datepicker table tr td.selected[disabled], -.datepicker table tr td.selected:hover[disabled], -.datepicker table tr td.selected.disabled[disabled], -.datepicker table tr td.selected.disabled:hover[disabled] { - background-color: #808080; -} -.datepicker table tr td.selected:active, -.datepicker table tr td.selected:hover:active, -.datepicker table tr td.selected.disabled:active, -.datepicker table tr td.selected.disabled:hover:active, -.datepicker table tr td.selected.active, -.datepicker table tr td.selected:hover.active, -.datepicker table tr td.selected.disabled.active, -.datepicker table tr td.selected.disabled:hover.active { - background-color: #666666 \9; -} -.datepicker table tr td.active, -.datepicker table tr td.active:hover, -.datepicker table tr td.active.disabled, -.datepicker table tr td.active.disabled:hover { - background-color: #006dcc; - background-image: -moz-linear-gradient(to bottom, #08c, #0044cc); - background-image: -ms-linear-gradient(to bottom, #08c, #0044cc); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#0044cc)); - background-image: -webkit-linear-gradient(to bottom, #08c, #0044cc); - background-image: -o-linear-gradient(to bottom, #08c, #0044cc); - background-image: linear-gradient(to bottom, #08c, #0044cc); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#08c', endColorstr='#0044cc', GradientType=0); - border-color: #0044cc #0044cc #002a80; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); - color: #fff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); -} -.datepicker table tr td.active:hover, -.datepicker table tr td.active:hover:hover, -.datepicker table tr td.active.disabled:hover, -.datepicker table tr td.active.disabled:hover:hover, -.datepicker table tr td.active:active, -.datepicker table tr td.active:hover:active, -.datepicker table tr td.active.disabled:active, -.datepicker table tr td.active.disabled:hover:active, -.datepicker table tr td.active.active, -.datepicker table tr td.active:hover.active, -.datepicker table tr td.active.disabled.active, -.datepicker table tr td.active.disabled:hover.active, -.datepicker table tr td.active.disabled, -.datepicker table tr td.active:hover.disabled, -.datepicker table tr td.active.disabled.disabled, -.datepicker table tr td.active.disabled:hover.disabled, -.datepicker table tr td.active[disabled], -.datepicker table tr td.active:hover[disabled], -.datepicker table tr td.active.disabled[disabled], -.datepicker table tr td.active.disabled:hover[disabled] { - background-color: #0044cc; -} -.datepicker table tr td.active:active, -.datepicker table tr td.active:hover:active, -.datepicker table tr td.active.disabled:active, -.datepicker table tr td.active.disabled:hover:active, -.datepicker table tr td.active.active, -.datepicker table tr td.active:hover.active, -.datepicker table tr td.active.disabled.active, -.datepicker table tr td.active.disabled:hover.active { - background-color: #003399 \9; -} -.datepicker table tr td span { - display: block; - width: 23%; - height: 54px; - line-height: 54px; - float: left; - margin: 1%; - cursor: pointer; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.datepicker table tr td span:hover, -.datepicker table tr td span.focused { - background: #eee; -} -.datepicker table tr td span.disabled, -.datepicker table tr td span.disabled:hover { - background: none; - color: #999; - cursor: default; -} -.datepicker table tr td span.active, -.datepicker table tr td span.active:hover, -.datepicker table tr td span.active.disabled, -.datepicker table tr td span.active.disabled:hover { - background-color: #006dcc; - background-image: -moz-linear-gradient(to bottom, #08c, #0044cc); - background-image: -ms-linear-gradient(to bottom, #08c, #0044cc); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#0044cc)); - background-image: -webkit-linear-gradient(to bottom, #08c, #0044cc); - background-image: -o-linear-gradient(to bottom, #08c, #0044cc); - background-image: linear-gradient(to bottom, #08c, #0044cc); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#08c', endColorstr='#0044cc', GradientType=0); - border-color: #0044cc #0044cc #002a80; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); - color: #fff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); -} -.datepicker table tr td span.active:hover, -.datepicker table tr td span.active:hover:hover, -.datepicker table tr td span.active.disabled:hover, -.datepicker table tr td span.active.disabled:hover:hover, -.datepicker table tr td span.active:active, -.datepicker table tr td span.active:hover:active, -.datepicker table tr td span.active.disabled:active, -.datepicker table tr td span.active.disabled:hover:active, -.datepicker table tr td span.active.active, -.datepicker table tr td span.active:hover.active, -.datepicker table tr td span.active.disabled.active, -.datepicker table tr td span.active.disabled:hover.active, -.datepicker table tr td span.active.disabled, -.datepicker table tr td span.active:hover.disabled, -.datepicker table tr td span.active.disabled.disabled, -.datepicker table tr td span.active.disabled:hover.disabled, -.datepicker table tr td span.active[disabled], -.datepicker table tr td span.active:hover[disabled], -.datepicker table tr td span.active.disabled[disabled], -.datepicker table tr td span.active.disabled:hover[disabled] { - background-color: #0044cc; -} -.datepicker table tr td span.active:active, -.datepicker table tr td span.active:hover:active, -.datepicker table tr td span.active.disabled:active, -.datepicker table tr td span.active.disabled:hover:active, -.datepicker table tr td span.active.active, -.datepicker table tr td span.active:hover.active, -.datepicker table tr td span.active.disabled.active, -.datepicker table tr td span.active.disabled:hover.active { - background-color: #003399 \9; -} -.datepicker table tr td span.old, -.datepicker table tr td span.new { - color: #999; -} -.datepicker .datepicker-switch { - width: 145px; -} -.datepicker .datepicker-switch, -.datepicker .prev, -.datepicker .next, -.datepicker tfoot tr th { - cursor: pointer; -} -.datepicker .datepicker-switch:hover, -.datepicker .prev:hover, -.datepicker .next:hover, -.datepicker tfoot tr th:hover { - background: #eee; -} -.datepicker .prev.disabled, -.datepicker .next.disabled { - visibility: hidden; -} -.datepicker .cw { - font-size: 10px; - width: 12px; - padding: 0 2px 0 5px; - vertical-align: middle; -} -.input-append.date .add-on, -.input-prepend.date .add-on { - cursor: pointer; -} -.input-append.date .add-on i, -.input-prepend.date .add-on i { - margin-top: 3px; -} -.input-daterange input { - text-align: center; -} -.input-daterange input:first-child { - -webkit-border-radius: 3px 0 0 3px; - -moz-border-radius: 3px 0 0 3px; - border-radius: 3px 0 0 3px; -} -.input-daterange input:last-child { - -webkit-border-radius: 0 3px 3px 0; - -moz-border-radius: 0 3px 3px 0; - border-radius: 0 3px 3px 0; -} -.input-daterange .add-on { - display: inline-block; - width: auto; - min-width: 16px; - height: 18px; - padding: 4px 5px; - font-weight: normal; - line-height: 18px; - text-align: center; - text-shadow: 0 1px 0 #fff; - vertical-align: middle; - background-color: #eee; - border: 1px solid #ccc; - margin-left: -5px; - margin-right: -5px; -} -/*# sourceMappingURL=bootstrap-datepicker.css.map */ \ No newline at end of file diff --git a/merepresenta/static/css/bootstrap-social.css b/merepresenta/static/css/bootstrap-social.css deleted file mode 100644 index 93e16f76..00000000 --- a/merepresenta/static/css/bootstrap-social.css +++ /dev/null @@ -1,147 +0,0 @@ -/* - * Social Buttons for Bootstrap - * - * Copyright 2013-2016 Panayiotis Lipiridis - * Licensed under the MIT License - * - * https://github.com/lipis/bootstrap-social - */ - -.btn-social{position:relative;padding-left:44px;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.btn-social>:first-child{position:absolute;left:0;top:0;bottom:0;width:32px;line-height:34px;font-size:1.6em;text-align:center;border-right:1px solid rgba(0,0,0,0.2)} -.btn-social.btn-lg{padding-left:61px}.btn-social.btn-lg>:first-child{line-height:45px;width:45px;font-size:1.8em} -.btn-social.btn-sm{padding-left:38px}.btn-social.btn-sm>:first-child{line-height:28px;width:28px;font-size:1.4em} -.btn-social.btn-xs{padding-left:30px}.btn-social.btn-xs>:first-child{line-height:20px;width:20px;font-size:1.2em} -.btn-social-icon{position:relative;padding-left:44px;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;height:34px;width:34px;padding:0}.btn-social-icon>:first-child{position:absolute;left:0;top:0;bottom:0;width:32px;line-height:34px;font-size:1.6em;text-align:center;border-right:1px solid rgba(0,0,0,0.2)} -.btn-social-icon.btn-lg{padding-left:61px}.btn-social-icon.btn-lg>:first-child{line-height:45px;width:45px;font-size:1.8em} -.btn-social-icon.btn-sm{padding-left:38px}.btn-social-icon.btn-sm>:first-child{line-height:28px;width:28px;font-size:1.4em} -.btn-social-icon.btn-xs{padding-left:30px}.btn-social-icon.btn-xs>:first-child{line-height:20px;width:20px;font-size:1.2em} -.btn-social-icon>:first-child{border:none;text-align:center;width:100% !important} -.btn-social-icon.btn-lg{height:45px;width:45px;padding-left:0;padding-right:0} -.btn-social-icon.btn-sm{height:30px;width:30px;padding-left:0;padding-right:0} -.btn-social-icon.btn-xs{height:22px;width:22px;padding-left:0;padding-right:0} -.btn-adn{color:#fff;background-color:#d87a68;border-color:rgba(0,0,0,0.2)}.btn-adn:focus,.btn-adn.focus{color:#fff;background-color:#ce563f;border-color:rgba(0,0,0,0.2)} -.btn-adn:hover{color:#fff;background-color:#ce563f;border-color:rgba(0,0,0,0.2)} -.btn-adn:active,.btn-adn.active,.open>.dropdown-toggle.btn-adn{color:#fff;background-color:#ce563f;border-color:rgba(0,0,0,0.2)}.btn-adn:active:hover,.btn-adn.active:hover,.open>.dropdown-toggle.btn-adn:hover,.btn-adn:active:focus,.btn-adn.active:focus,.open>.dropdown-toggle.btn-adn:focus,.btn-adn:active.focus,.btn-adn.active.focus,.open>.dropdown-toggle.btn-adn.focus{color:#fff;background-color:#b94630;border-color:rgba(0,0,0,0.2)} -.btn-adn:active,.btn-adn.active,.open>.dropdown-toggle.btn-adn{background-image:none} -.btn-adn.disabled:hover,.btn-adn[disabled]:hover,fieldset[disabled] .btn-adn:hover,.btn-adn.disabled:focus,.btn-adn[disabled]:focus,fieldset[disabled] .btn-adn:focus,.btn-adn.disabled.focus,.btn-adn[disabled].focus,fieldset[disabled] .btn-adn.focus{background-color:#d87a68;border-color:rgba(0,0,0,0.2)} -.btn-adn .badge{color:#d87a68;background-color:#fff} -.btn-bitbucket{color:#fff;background-color:#205081;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:focus,.btn-bitbucket.focus{color:#fff;background-color:#163758;border-color:rgba(0,0,0,0.2)} -.btn-bitbucket:hover{color:#fff;background-color:#163758;border-color:rgba(0,0,0,0.2)} -.btn-bitbucket:active,.btn-bitbucket.active,.open>.dropdown-toggle.btn-bitbucket{color:#fff;background-color:#163758;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:active:hover,.btn-bitbucket.active:hover,.open>.dropdown-toggle.btn-bitbucket:hover,.btn-bitbucket:active:focus,.btn-bitbucket.active:focus,.open>.dropdown-toggle.btn-bitbucket:focus,.btn-bitbucket:active.focus,.btn-bitbucket.active.focus,.open>.dropdown-toggle.btn-bitbucket.focus{color:#fff;background-color:#0f253c;border-color:rgba(0,0,0,0.2)} -.btn-bitbucket:active,.btn-bitbucket.active,.open>.dropdown-toggle.btn-bitbucket{background-image:none} -.btn-bitbucket.disabled:hover,.btn-bitbucket[disabled]:hover,fieldset[disabled] .btn-bitbucket:hover,.btn-bitbucket.disabled:focus,.btn-bitbucket[disabled]:focus,fieldset[disabled] .btn-bitbucket:focus,.btn-bitbucket.disabled.focus,.btn-bitbucket[disabled].focus,fieldset[disabled] .btn-bitbucket.focus{background-color:#205081;border-color:rgba(0,0,0,0.2)} -.btn-bitbucket .badge{color:#205081;background-color:#fff} -.btn-dropbox{color:#fff;background-color:#1087dd;border-color:rgba(0,0,0,0.2)}.btn-dropbox:focus,.btn-dropbox.focus{color:#fff;background-color:#0d6aad;border-color:rgba(0,0,0,0.2)} -.btn-dropbox:hover{color:#fff;background-color:#0d6aad;border-color:rgba(0,0,0,0.2)} -.btn-dropbox:active,.btn-dropbox.active,.open>.dropdown-toggle.btn-dropbox{color:#fff;background-color:#0d6aad;border-color:rgba(0,0,0,0.2)}.btn-dropbox:active:hover,.btn-dropbox.active:hover,.open>.dropdown-toggle.btn-dropbox:hover,.btn-dropbox:active:focus,.btn-dropbox.active:focus,.open>.dropdown-toggle.btn-dropbox:focus,.btn-dropbox:active.focus,.btn-dropbox.active.focus,.open>.dropdown-toggle.btn-dropbox.focus{color:#fff;background-color:#0a568c;border-color:rgba(0,0,0,0.2)} -.btn-dropbox:active,.btn-dropbox.active,.open>.dropdown-toggle.btn-dropbox{background-image:none} -.btn-dropbox.disabled:hover,.btn-dropbox[disabled]:hover,fieldset[disabled] .btn-dropbox:hover,.btn-dropbox.disabled:focus,.btn-dropbox[disabled]:focus,fieldset[disabled] .btn-dropbox:focus,.btn-dropbox.disabled.focus,.btn-dropbox[disabled].focus,fieldset[disabled] .btn-dropbox.focus{background-color:#1087dd;border-color:rgba(0,0,0,0.2)} -.btn-dropbox .badge{color:#1087dd;background-color:#fff} -.btn-facebook{color:#fff;background-color:#3b5998;border-color:rgba(0,0,0,0.2)}.btn-facebook:focus,.btn-facebook.focus{color:#fff;background-color:#2d4373;border-color:rgba(0,0,0,0.2)} -.btn-facebook:hover{color:#fff;background-color:#2d4373;border-color:rgba(0,0,0,0.2)} -.btn-facebook:active,.btn-facebook.active,.open>.dropdown-toggle.btn-facebook{color:#fff;background-color:#2d4373;border-color:rgba(0,0,0,0.2)}.btn-facebook:active:hover,.btn-facebook.active:hover,.open>.dropdown-toggle.btn-facebook:hover,.btn-facebook:active:focus,.btn-facebook.active:focus,.open>.dropdown-toggle.btn-facebook:focus,.btn-facebook:active.focus,.btn-facebook.active.focus,.open>.dropdown-toggle.btn-facebook.focus{color:#fff;background-color:#23345a;border-color:rgba(0,0,0,0.2)} -.btn-facebook:active,.btn-facebook.active,.open>.dropdown-toggle.btn-facebook{background-image:none} -.btn-facebook.disabled:hover,.btn-facebook[disabled]:hover,fieldset[disabled] .btn-facebook:hover,.btn-facebook.disabled:focus,.btn-facebook[disabled]:focus,fieldset[disabled] .btn-facebook:focus,.btn-facebook.disabled.focus,.btn-facebook[disabled].focus,fieldset[disabled] .btn-facebook.focus{background-color:#3b5998;border-color:rgba(0,0,0,0.2)} -.btn-facebook .badge{color:#3b5998;background-color:#fff} -.btn-flickr{color:#fff;background-color:#ff0084;border-color:rgba(0,0,0,0.2)}.btn-flickr:focus,.btn-flickr.focus{color:#fff;background-color:#cc006a;border-color:rgba(0,0,0,0.2)} -.btn-flickr:hover{color:#fff;background-color:#cc006a;border-color:rgba(0,0,0,0.2)} -.btn-flickr:active,.btn-flickr.active,.open>.dropdown-toggle.btn-flickr{color:#fff;background-color:#cc006a;border-color:rgba(0,0,0,0.2)}.btn-flickr:active:hover,.btn-flickr.active:hover,.open>.dropdown-toggle.btn-flickr:hover,.btn-flickr:active:focus,.btn-flickr.active:focus,.open>.dropdown-toggle.btn-flickr:focus,.btn-flickr:active.focus,.btn-flickr.active.focus,.open>.dropdown-toggle.btn-flickr.focus{color:#fff;background-color:#a80057;border-color:rgba(0,0,0,0.2)} -.btn-flickr:active,.btn-flickr.active,.open>.dropdown-toggle.btn-flickr{background-image:none} -.btn-flickr.disabled:hover,.btn-flickr[disabled]:hover,fieldset[disabled] .btn-flickr:hover,.btn-flickr.disabled:focus,.btn-flickr[disabled]:focus,fieldset[disabled] .btn-flickr:focus,.btn-flickr.disabled.focus,.btn-flickr[disabled].focus,fieldset[disabled] .btn-flickr.focus{background-color:#ff0084;border-color:rgba(0,0,0,0.2)} -.btn-flickr .badge{color:#ff0084;background-color:#fff} -.btn-foursquare{color:#fff;background-color:#f94877;border-color:rgba(0,0,0,0.2)}.btn-foursquare:focus,.btn-foursquare.focus{color:#fff;background-color:#f71752;border-color:rgba(0,0,0,0.2)} -.btn-foursquare:hover{color:#fff;background-color:#f71752;border-color:rgba(0,0,0,0.2)} -.btn-foursquare:active,.btn-foursquare.active,.open>.dropdown-toggle.btn-foursquare{color:#fff;background-color:#f71752;border-color:rgba(0,0,0,0.2)}.btn-foursquare:active:hover,.btn-foursquare.active:hover,.open>.dropdown-toggle.btn-foursquare:hover,.btn-foursquare:active:focus,.btn-foursquare.active:focus,.open>.dropdown-toggle.btn-foursquare:focus,.btn-foursquare:active.focus,.btn-foursquare.active.focus,.open>.dropdown-toggle.btn-foursquare.focus{color:#fff;background-color:#e30742;border-color:rgba(0,0,0,0.2)} -.btn-foursquare:active,.btn-foursquare.active,.open>.dropdown-toggle.btn-foursquare{background-image:none} -.btn-foursquare.disabled:hover,.btn-foursquare[disabled]:hover,fieldset[disabled] .btn-foursquare:hover,.btn-foursquare.disabled:focus,.btn-foursquare[disabled]:focus,fieldset[disabled] .btn-foursquare:focus,.btn-foursquare.disabled.focus,.btn-foursquare[disabled].focus,fieldset[disabled] .btn-foursquare.focus{background-color:#f94877;border-color:rgba(0,0,0,0.2)} -.btn-foursquare .badge{color:#f94877;background-color:#fff} -.btn-github{color:#fff;background-color:#444;border-color:rgba(0,0,0,0.2)}.btn-github:focus,.btn-github.focus{color:#fff;background-color:#2b2b2b;border-color:rgba(0,0,0,0.2)} -.btn-github:hover{color:#fff;background-color:#2b2b2b;border-color:rgba(0,0,0,0.2)} -.btn-github:active,.btn-github.active,.open>.dropdown-toggle.btn-github{color:#fff;background-color:#2b2b2b;border-color:rgba(0,0,0,0.2)}.btn-github:active:hover,.btn-github.active:hover,.open>.dropdown-toggle.btn-github:hover,.btn-github:active:focus,.btn-github.active:focus,.open>.dropdown-toggle.btn-github:focus,.btn-github:active.focus,.btn-github.active.focus,.open>.dropdown-toggle.btn-github.focus{color:#fff;background-color:#191919;border-color:rgba(0,0,0,0.2)} -.btn-github:active,.btn-github.active,.open>.dropdown-toggle.btn-github{background-image:none} -.btn-github.disabled:hover,.btn-github[disabled]:hover,fieldset[disabled] .btn-github:hover,.btn-github.disabled:focus,.btn-github[disabled]:focus,fieldset[disabled] .btn-github:focus,.btn-github.disabled.focus,.btn-github[disabled].focus,fieldset[disabled] .btn-github.focus{background-color:#444;border-color:rgba(0,0,0,0.2)} -.btn-github .badge{color:#444;background-color:#fff} -.btn-google{color:#fff;background-color:#dd4b39;border-color:rgba(0,0,0,0.2)}.btn-google:focus,.btn-google.focus{color:#fff;background-color:#c23321;border-color:rgba(0,0,0,0.2)} -.btn-google:hover{color:#fff;background-color:#c23321;border-color:rgba(0,0,0,0.2)} -.btn-google:active,.btn-google.active,.open>.dropdown-toggle.btn-google{color:#fff;background-color:#c23321;border-color:rgba(0,0,0,0.2)}.btn-google:active:hover,.btn-google.active:hover,.open>.dropdown-toggle.btn-google:hover,.btn-google:active:focus,.btn-google.active:focus,.open>.dropdown-toggle.btn-google:focus,.btn-google:active.focus,.btn-google.active.focus,.open>.dropdown-toggle.btn-google.focus{color:#fff;background-color:#a32b1c;border-color:rgba(0,0,0,0.2)} -.btn-google:active,.btn-google.active,.open>.dropdown-toggle.btn-google{background-image:none} -.btn-google.disabled:hover,.btn-google[disabled]:hover,fieldset[disabled] .btn-google:hover,.btn-google.disabled:focus,.btn-google[disabled]:focus,fieldset[disabled] .btn-google:focus,.btn-google.disabled.focus,.btn-google[disabled].focus,fieldset[disabled] .btn-google.focus{background-color:#dd4b39;border-color:rgba(0,0,0,0.2)} -.btn-google .badge{color:#dd4b39;background-color:#fff} -.btn-instagram{color:#fff;background-color:#3f729b;border-color:rgba(0,0,0,0.2)}.btn-instagram:focus,.btn-instagram.focus{color:#fff;background-color:#305777;border-color:rgba(0,0,0,0.2)} -.btn-instagram:hover{color:#fff;background-color:#305777;border-color:rgba(0,0,0,0.2)} -.btn-instagram:active,.btn-instagram.active,.open>.dropdown-toggle.btn-instagram{color:#fff;background-color:#305777;border-color:rgba(0,0,0,0.2)}.btn-instagram:active:hover,.btn-instagram.active:hover,.open>.dropdown-toggle.btn-instagram:hover,.btn-instagram:active:focus,.btn-instagram.active:focus,.open>.dropdown-toggle.btn-instagram:focus,.btn-instagram:active.focus,.btn-instagram.active.focus,.open>.dropdown-toggle.btn-instagram.focus{color:#fff;background-color:#26455d;border-color:rgba(0,0,0,0.2)} -.btn-instagram:active,.btn-instagram.active,.open>.dropdown-toggle.btn-instagram{background-image:none} -.btn-instagram.disabled:hover,.btn-instagram[disabled]:hover,fieldset[disabled] .btn-instagram:hover,.btn-instagram.disabled:focus,.btn-instagram[disabled]:focus,fieldset[disabled] .btn-instagram:focus,.btn-instagram.disabled.focus,.btn-instagram[disabled].focus,fieldset[disabled] .btn-instagram.focus{background-color:#3f729b;border-color:rgba(0,0,0,0.2)} -.btn-instagram .badge{color:#3f729b;background-color:#fff} -.btn-linkedin{color:#fff;background-color:#007bb6;border-color:rgba(0,0,0,0.2)}.btn-linkedin:focus,.btn-linkedin.focus{color:#fff;background-color:#005983;border-color:rgba(0,0,0,0.2)} -.btn-linkedin:hover{color:#fff;background-color:#005983;border-color:rgba(0,0,0,0.2)} -.btn-linkedin:active,.btn-linkedin.active,.open>.dropdown-toggle.btn-linkedin{color:#fff;background-color:#005983;border-color:rgba(0,0,0,0.2)}.btn-linkedin:active:hover,.btn-linkedin.active:hover,.open>.dropdown-toggle.btn-linkedin:hover,.btn-linkedin:active:focus,.btn-linkedin.active:focus,.open>.dropdown-toggle.btn-linkedin:focus,.btn-linkedin:active.focus,.btn-linkedin.active.focus,.open>.dropdown-toggle.btn-linkedin.focus{color:#fff;background-color:#00405f;border-color:rgba(0,0,0,0.2)} -.btn-linkedin:active,.btn-linkedin.active,.open>.dropdown-toggle.btn-linkedin{background-image:none} -.btn-linkedin.disabled:hover,.btn-linkedin[disabled]:hover,fieldset[disabled] .btn-linkedin:hover,.btn-linkedin.disabled:focus,.btn-linkedin[disabled]:focus,fieldset[disabled] .btn-linkedin:focus,.btn-linkedin.disabled.focus,.btn-linkedin[disabled].focus,fieldset[disabled] .btn-linkedin.focus{background-color:#007bb6;border-color:rgba(0,0,0,0.2)} -.btn-linkedin .badge{color:#007bb6;background-color:#fff} -.btn-microsoft{color:#fff;background-color:#2672ec;border-color:rgba(0,0,0,0.2)}.btn-microsoft:focus,.btn-microsoft.focus{color:#fff;background-color:#125acd;border-color:rgba(0,0,0,0.2)} -.btn-microsoft:hover{color:#fff;background-color:#125acd;border-color:rgba(0,0,0,0.2)} -.btn-microsoft:active,.btn-microsoft.active,.open>.dropdown-toggle.btn-microsoft{color:#fff;background-color:#125acd;border-color:rgba(0,0,0,0.2)}.btn-microsoft:active:hover,.btn-microsoft.active:hover,.open>.dropdown-toggle.btn-microsoft:hover,.btn-microsoft:active:focus,.btn-microsoft.active:focus,.open>.dropdown-toggle.btn-microsoft:focus,.btn-microsoft:active.focus,.btn-microsoft.active.focus,.open>.dropdown-toggle.btn-microsoft.focus{color:#fff;background-color:#0f4bac;border-color:rgba(0,0,0,0.2)} -.btn-microsoft:active,.btn-microsoft.active,.open>.dropdown-toggle.btn-microsoft{background-image:none} -.btn-microsoft.disabled:hover,.btn-microsoft[disabled]:hover,fieldset[disabled] .btn-microsoft:hover,.btn-microsoft.disabled:focus,.btn-microsoft[disabled]:focus,fieldset[disabled] .btn-microsoft:focus,.btn-microsoft.disabled.focus,.btn-microsoft[disabled].focus,fieldset[disabled] .btn-microsoft.focus{background-color:#2672ec;border-color:rgba(0,0,0,0.2)} -.btn-microsoft .badge{color:#2672ec;background-color:#fff} -.btn-odnoklassniki{color:#fff;background-color:#f4731c;border-color:rgba(0,0,0,0.2)}.btn-odnoklassniki:focus,.btn-odnoklassniki.focus{color:#fff;background-color:#d35b0a;border-color:rgba(0,0,0,0.2)} -.btn-odnoklassniki:hover{color:#fff;background-color:#d35b0a;border-color:rgba(0,0,0,0.2)} -.btn-odnoklassniki:active,.btn-odnoklassniki.active,.open>.dropdown-toggle.btn-odnoklassniki{color:#fff;background-color:#d35b0a;border-color:rgba(0,0,0,0.2)}.btn-odnoklassniki:active:hover,.btn-odnoklassniki.active:hover,.open>.dropdown-toggle.btn-odnoklassniki:hover,.btn-odnoklassniki:active:focus,.btn-odnoklassniki.active:focus,.open>.dropdown-toggle.btn-odnoklassniki:focus,.btn-odnoklassniki:active.focus,.btn-odnoklassniki.active.focus,.open>.dropdown-toggle.btn-odnoklassniki.focus{color:#fff;background-color:#b14c09;border-color:rgba(0,0,0,0.2)} -.btn-odnoklassniki:active,.btn-odnoklassniki.active,.open>.dropdown-toggle.btn-odnoklassniki{background-image:none} -.btn-odnoklassniki.disabled:hover,.btn-odnoklassniki[disabled]:hover,fieldset[disabled] .btn-odnoklassniki:hover,.btn-odnoklassniki.disabled:focus,.btn-odnoklassniki[disabled]:focus,fieldset[disabled] .btn-odnoklassniki:focus,.btn-odnoklassniki.disabled.focus,.btn-odnoklassniki[disabled].focus,fieldset[disabled] .btn-odnoklassniki.focus{background-color:#f4731c;border-color:rgba(0,0,0,0.2)} -.btn-odnoklassniki .badge{color:#f4731c;background-color:#fff} -.btn-openid{color:#fff;background-color:#f7931e;border-color:rgba(0,0,0,0.2)}.btn-openid:focus,.btn-openid.focus{color:#fff;background-color:#da7908;border-color:rgba(0,0,0,0.2)} -.btn-openid:hover{color:#fff;background-color:#da7908;border-color:rgba(0,0,0,0.2)} -.btn-openid:active,.btn-openid.active,.open>.dropdown-toggle.btn-openid{color:#fff;background-color:#da7908;border-color:rgba(0,0,0,0.2)}.btn-openid:active:hover,.btn-openid.active:hover,.open>.dropdown-toggle.btn-openid:hover,.btn-openid:active:focus,.btn-openid.active:focus,.open>.dropdown-toggle.btn-openid:focus,.btn-openid:active.focus,.btn-openid.active.focus,.open>.dropdown-toggle.btn-openid.focus{color:#fff;background-color:#b86607;border-color:rgba(0,0,0,0.2)} -.btn-openid:active,.btn-openid.active,.open>.dropdown-toggle.btn-openid{background-image:none} -.btn-openid.disabled:hover,.btn-openid[disabled]:hover,fieldset[disabled] .btn-openid:hover,.btn-openid.disabled:focus,.btn-openid[disabled]:focus,fieldset[disabled] .btn-openid:focus,.btn-openid.disabled.focus,.btn-openid[disabled].focus,fieldset[disabled] .btn-openid.focus{background-color:#f7931e;border-color:rgba(0,0,0,0.2)} -.btn-openid .badge{color:#f7931e;background-color:#fff} -.btn-pinterest{color:#fff;background-color:#cb2027;border-color:rgba(0,0,0,0.2)}.btn-pinterest:focus,.btn-pinterest.focus{color:#fff;background-color:#9f191f;border-color:rgba(0,0,0,0.2)} -.btn-pinterest:hover{color:#fff;background-color:#9f191f;border-color:rgba(0,0,0,0.2)} -.btn-pinterest:active,.btn-pinterest.active,.open>.dropdown-toggle.btn-pinterest{color:#fff;background-color:#9f191f;border-color:rgba(0,0,0,0.2)}.btn-pinterest:active:hover,.btn-pinterest.active:hover,.open>.dropdown-toggle.btn-pinterest:hover,.btn-pinterest:active:focus,.btn-pinterest.active:focus,.open>.dropdown-toggle.btn-pinterest:focus,.btn-pinterest:active.focus,.btn-pinterest.active.focus,.open>.dropdown-toggle.btn-pinterest.focus{color:#fff;background-color:#801419;border-color:rgba(0,0,0,0.2)} -.btn-pinterest:active,.btn-pinterest.active,.open>.dropdown-toggle.btn-pinterest{background-image:none} -.btn-pinterest.disabled:hover,.btn-pinterest[disabled]:hover,fieldset[disabled] .btn-pinterest:hover,.btn-pinterest.disabled:focus,.btn-pinterest[disabled]:focus,fieldset[disabled] .btn-pinterest:focus,.btn-pinterest.disabled.focus,.btn-pinterest[disabled].focus,fieldset[disabled] .btn-pinterest.focus{background-color:#cb2027;border-color:rgba(0,0,0,0.2)} -.btn-pinterest .badge{color:#cb2027;background-color:#fff} -.btn-reddit{color:#000;background-color:#eff7ff;border-color:rgba(0,0,0,0.2)}.btn-reddit:focus,.btn-reddit.focus{color:#000;background-color:#bcddff;border-color:rgba(0,0,0,0.2)} -.btn-reddit:hover{color:#000;background-color:#bcddff;border-color:rgba(0,0,0,0.2)} -.btn-reddit:active,.btn-reddit.active,.open>.dropdown-toggle.btn-reddit{color:#000;background-color:#bcddff;border-color:rgba(0,0,0,0.2)}.btn-reddit:active:hover,.btn-reddit.active:hover,.open>.dropdown-toggle.btn-reddit:hover,.btn-reddit:active:focus,.btn-reddit.active:focus,.open>.dropdown-toggle.btn-reddit:focus,.btn-reddit:active.focus,.btn-reddit.active.focus,.open>.dropdown-toggle.btn-reddit.focus{color:#000;background-color:#98ccff;border-color:rgba(0,0,0,0.2)} -.btn-reddit:active,.btn-reddit.active,.open>.dropdown-toggle.btn-reddit{background-image:none} -.btn-reddit.disabled:hover,.btn-reddit[disabled]:hover,fieldset[disabled] .btn-reddit:hover,.btn-reddit.disabled:focus,.btn-reddit[disabled]:focus,fieldset[disabled] .btn-reddit:focus,.btn-reddit.disabled.focus,.btn-reddit[disabled].focus,fieldset[disabled] .btn-reddit.focus{background-color:#eff7ff;border-color:rgba(0,0,0,0.2)} -.btn-reddit .badge{color:#eff7ff;background-color:#000} -.btn-soundcloud{color:#fff;background-color:#f50;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:focus,.btn-soundcloud.focus{color:#fff;background-color:#c40;border-color:rgba(0,0,0,0.2)} -.btn-soundcloud:hover{color:#fff;background-color:#c40;border-color:rgba(0,0,0,0.2)} -.btn-soundcloud:active,.btn-soundcloud.active,.open>.dropdown-toggle.btn-soundcloud{color:#fff;background-color:#c40;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:active:hover,.btn-soundcloud.active:hover,.open>.dropdown-toggle.btn-soundcloud:hover,.btn-soundcloud:active:focus,.btn-soundcloud.active:focus,.open>.dropdown-toggle.btn-soundcloud:focus,.btn-soundcloud:active.focus,.btn-soundcloud.active.focus,.open>.dropdown-toggle.btn-soundcloud.focus{color:#fff;background-color:#a83800;border-color:rgba(0,0,0,0.2)} -.btn-soundcloud:active,.btn-soundcloud.active,.open>.dropdown-toggle.btn-soundcloud{background-image:none} -.btn-soundcloud.disabled:hover,.btn-soundcloud[disabled]:hover,fieldset[disabled] .btn-soundcloud:hover,.btn-soundcloud.disabled:focus,.btn-soundcloud[disabled]:focus,fieldset[disabled] .btn-soundcloud:focus,.btn-soundcloud.disabled.focus,.btn-soundcloud[disabled].focus,fieldset[disabled] .btn-soundcloud.focus{background-color:#f50;border-color:rgba(0,0,0,0.2)} -.btn-soundcloud .badge{color:#f50;background-color:#fff} -.btn-tumblr{color:#fff;background-color:#2c4762;border-color:rgba(0,0,0,0.2)}.btn-tumblr:focus,.btn-tumblr.focus{color:#fff;background-color:#1c2d3f;border-color:rgba(0,0,0,0.2)} -.btn-tumblr:hover{color:#fff;background-color:#1c2d3f;border-color:rgba(0,0,0,0.2)} -.btn-tumblr:active,.btn-tumblr.active,.open>.dropdown-toggle.btn-tumblr{color:#fff;background-color:#1c2d3f;border-color:rgba(0,0,0,0.2)}.btn-tumblr:active:hover,.btn-tumblr.active:hover,.open>.dropdown-toggle.btn-tumblr:hover,.btn-tumblr:active:focus,.btn-tumblr.active:focus,.open>.dropdown-toggle.btn-tumblr:focus,.btn-tumblr:active.focus,.btn-tumblr.active.focus,.open>.dropdown-toggle.btn-tumblr.focus{color:#fff;background-color:#111c26;border-color:rgba(0,0,0,0.2)} -.btn-tumblr:active,.btn-tumblr.active,.open>.dropdown-toggle.btn-tumblr{background-image:none} -.btn-tumblr.disabled:hover,.btn-tumblr[disabled]:hover,fieldset[disabled] .btn-tumblr:hover,.btn-tumblr.disabled:focus,.btn-tumblr[disabled]:focus,fieldset[disabled] .btn-tumblr:focus,.btn-tumblr.disabled.focus,.btn-tumblr[disabled].focus,fieldset[disabled] .btn-tumblr.focus{background-color:#2c4762;border-color:rgba(0,0,0,0.2)} -.btn-tumblr .badge{color:#2c4762;background-color:#fff} -.btn-twitter{color:#fff;background-color:#55acee;border-color:rgba(0,0,0,0.2)}.btn-twitter:focus,.btn-twitter.focus{color:#fff;background-color:#2795e9;border-color:rgba(0,0,0,0.2)} -.btn-twitter:hover{color:#fff;background-color:#2795e9;border-color:rgba(0,0,0,0.2)} -.btn-twitter:active,.btn-twitter.active,.open>.dropdown-toggle.btn-twitter{color:#fff;background-color:#2795e9;border-color:rgba(0,0,0,0.2)}.btn-twitter:active:hover,.btn-twitter.active:hover,.open>.dropdown-toggle.btn-twitter:hover,.btn-twitter:active:focus,.btn-twitter.active:focus,.open>.dropdown-toggle.btn-twitter:focus,.btn-twitter:active.focus,.btn-twitter.active.focus,.open>.dropdown-toggle.btn-twitter.focus{color:#fff;background-color:#1583d7;border-color:rgba(0,0,0,0.2)} -.btn-twitter:active,.btn-twitter.active,.open>.dropdown-toggle.btn-twitter{background-image:none} -.btn-twitter.disabled:hover,.btn-twitter[disabled]:hover,fieldset[disabled] .btn-twitter:hover,.btn-twitter.disabled:focus,.btn-twitter[disabled]:focus,fieldset[disabled] .btn-twitter:focus,.btn-twitter.disabled.focus,.btn-twitter[disabled].focus,fieldset[disabled] .btn-twitter.focus{background-color:#55acee;border-color:rgba(0,0,0,0.2)} -.btn-twitter .badge{color:#55acee;background-color:#fff} -.btn-vimeo{color:#fff;background-color:#1ab7ea;border-color:rgba(0,0,0,0.2)}.btn-vimeo:focus,.btn-vimeo.focus{color:#fff;background-color:#1295bf;border-color:rgba(0,0,0,0.2)} -.btn-vimeo:hover{color:#fff;background-color:#1295bf;border-color:rgba(0,0,0,0.2)} -.btn-vimeo:active,.btn-vimeo.active,.open>.dropdown-toggle.btn-vimeo{color:#fff;background-color:#1295bf;border-color:rgba(0,0,0,0.2)}.btn-vimeo:active:hover,.btn-vimeo.active:hover,.open>.dropdown-toggle.btn-vimeo:hover,.btn-vimeo:active:focus,.btn-vimeo.active:focus,.open>.dropdown-toggle.btn-vimeo:focus,.btn-vimeo:active.focus,.btn-vimeo.active.focus,.open>.dropdown-toggle.btn-vimeo.focus{color:#fff;background-color:#0f7b9f;border-color:rgba(0,0,0,0.2)} -.btn-vimeo:active,.btn-vimeo.active,.open>.dropdown-toggle.btn-vimeo{background-image:none} -.btn-vimeo.disabled:hover,.btn-vimeo[disabled]:hover,fieldset[disabled] .btn-vimeo:hover,.btn-vimeo.disabled:focus,.btn-vimeo[disabled]:focus,fieldset[disabled] .btn-vimeo:focus,.btn-vimeo.disabled.focus,.btn-vimeo[disabled].focus,fieldset[disabled] .btn-vimeo.focus{background-color:#1ab7ea;border-color:rgba(0,0,0,0.2)} -.btn-vimeo .badge{color:#1ab7ea;background-color:#fff} -.btn-vk{color:#fff;background-color:#587ea3;border-color:rgba(0,0,0,0.2)}.btn-vk:focus,.btn-vk.focus{color:#fff;background-color:#466482;border-color:rgba(0,0,0,0.2)} -.btn-vk:hover{color:#fff;background-color:#466482;border-color:rgba(0,0,0,0.2)} -.btn-vk:active,.btn-vk.active,.open>.dropdown-toggle.btn-vk{color:#fff;background-color:#466482;border-color:rgba(0,0,0,0.2)}.btn-vk:active:hover,.btn-vk.active:hover,.open>.dropdown-toggle.btn-vk:hover,.btn-vk:active:focus,.btn-vk.active:focus,.open>.dropdown-toggle.btn-vk:focus,.btn-vk:active.focus,.btn-vk.active.focus,.open>.dropdown-toggle.btn-vk.focus{color:#fff;background-color:#3a526b;border-color:rgba(0,0,0,0.2)} -.btn-vk:active,.btn-vk.active,.open>.dropdown-toggle.btn-vk{background-image:none} -.btn-vk.disabled:hover,.btn-vk[disabled]:hover,fieldset[disabled] .btn-vk:hover,.btn-vk.disabled:focus,.btn-vk[disabled]:focus,fieldset[disabled] .btn-vk:focus,.btn-vk.disabled.focus,.btn-vk[disabled].focus,fieldset[disabled] .btn-vk.focus{background-color:#587ea3;border-color:rgba(0,0,0,0.2)} -.btn-vk .badge{color:#587ea3;background-color:#fff} -.btn-yahoo{color:#fff;background-color:#720e9e;border-color:rgba(0,0,0,0.2)}.btn-yahoo:focus,.btn-yahoo.focus{color:#fff;background-color:#500a6f;border-color:rgba(0,0,0,0.2)} -.btn-yahoo:hover{color:#fff;background-color:#500a6f;border-color:rgba(0,0,0,0.2)} -.btn-yahoo:active,.btn-yahoo.active,.open>.dropdown-toggle.btn-yahoo{color:#fff;background-color:#500a6f;border-color:rgba(0,0,0,0.2)}.btn-yahoo:active:hover,.btn-yahoo.active:hover,.open>.dropdown-toggle.btn-yahoo:hover,.btn-yahoo:active:focus,.btn-yahoo.active:focus,.open>.dropdown-toggle.btn-yahoo:focus,.btn-yahoo:active.focus,.btn-yahoo.active.focus,.open>.dropdown-toggle.btn-yahoo.focus{color:#fff;background-color:#39074e;border-color:rgba(0,0,0,0.2)} -.btn-yahoo:active,.btn-yahoo.active,.open>.dropdown-toggle.btn-yahoo{background-image:none} -.btn-yahoo.disabled:hover,.btn-yahoo[disabled]:hover,fieldset[disabled] .btn-yahoo:hover,.btn-yahoo.disabled:focus,.btn-yahoo[disabled]:focus,fieldset[disabled] .btn-yahoo:focus,.btn-yahoo.disabled.focus,.btn-yahoo[disabled].focus,fieldset[disabled] .btn-yahoo.focus{background-color:#720e9e;border-color:rgba(0,0,0,0.2)} -.btn-yahoo .badge{color:#720e9e;background-color:#fff} diff --git a/merepresenta/static/css/font-awesome.css b/merepresenta/static/css/font-awesome.css deleted file mode 100644 index 812418ae..00000000 --- a/merepresenta/static/css/font-awesome.css +++ /dev/null @@ -1,5 +0,0 @@ -/*! - * Font Awesome Free 5.2.0 by @fontawesome - https://fontawesome.com - * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) - */ -.fa,.fab,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{animation:a 2s infinite linear}.fa-pulse{animation:a 1s infinite steps(8)}@keyframes a{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";transform:scaleX(-1)}.fa-flip-vertical{transform:scaleY(-1)}.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.fa-flip-horizontal.fa-flip-vertical{transform:scale(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atom:before{content:"\f5d2"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-balance-scale:before{content:"\f24e"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bicycle:before{content:"\f206"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blender:before{content:"\f517"}.fa-blind:before{content:"\f29d"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before{content:"\f02e"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-certificate:before{content:"\f0a3"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-concierge-bell:before{content:"\f562"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-credit-card:before{content:"\f09d"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-delicious:before{content:"\f1a5"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-deviantart:before{content:"\f1bd"}.fa-diagnoses:before{content:"\f470"}.fa-dice:before{content:"\f522"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edit:before{content:"\f044"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-gift:before{content:"\f06b"}.fa-git:before{content:"\f1d3"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-handshake:before{content:"\f2b5"}.fa-hashtag:before{content:"\f292"}.fa-hdd:before{content:"\f0a0"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hockey-puck:before{content:"\f453"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hot-tub:before{content:"\f593"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-houzz:before{content:"\f27c"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-instagram:before{content:"\f16d"}.fa-internet-explorer:before{content:"\f26b"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-luggage-cart:before{content:"\f59d"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mercury:before{content:"\f223"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-motorcycle:before{content:"\f21c"}.fa-mouse-pointer:before{content:"\f245"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-nintendo-switch:before{content:"\f418"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-osi:before{content:"\f41a"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-people-carry:before{content:"\f4ce"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-volume:before{content:"\f2a0"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poo:before{content:"\f2fe"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-r-project:before{content:"\f4f7"}.fa-random:before{content:"\f074"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-rendact:before{content:"\f3e4"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-rupee-sign:before{content:"\f156"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-sass:before{content:"\f41e"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-search:before{content:"\f002"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-simplybuilt:before{content:"\f215"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skull:before{content:"\f54c"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowflake:before{content:"\f2dc"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-life:before{content:"\f621"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-swatchbook:before{content:"\f5c3"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toolbox:before{content:"\f552"}.fa-tooth:before{content:"\f5c9"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-train:before{content:"\f238"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-tripadvisor:before{content:"\f262"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-uikit:before{content:"\f403"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}@font-face{font-family:"Font Awesome 5 Brands";font-style:normal;font-weight:normal;src:url(../webfonts/fa-brands-400.eot);src:url(../webfonts/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.woff) format("woff"),url(../webfonts/fa-brands-400.ttf) format("truetype"),url(../webfonts/fa-brands-400.svg#fontawesome) format("svg")}.fab{font-family:"Font Awesome 5 Brands"}@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:400;src:url(../webfonts/fa-regular-400.eot);src:url(../webfonts/fa-regular-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.woff) format("woff"),url(../webfonts/fa-regular-400.ttf) format("truetype"),url(../webfonts/fa-regular-400.svg#fontawesome) format("svg")}.far{font-weight:400}@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:900;src:url(../webfonts/fa-solid-900.eot);src:url(../webfonts/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.woff) format("woff"),url(../webfonts/fa-solid-900.ttf) format("truetype"),url(../webfonts/fa-solid-900.svg#fontawesome) format("svg")}.fa,.far,.fas{font-family:"Font Awesome 5 Free"}.fa,.fas{font-weight:900} \ No newline at end of file diff --git a/merepresenta/static/css/font-awesome.min.css b/merepresenta/static/css/font-awesome.min.css deleted file mode 100644 index 540440ce..00000000 --- a/merepresenta/static/css/font-awesome.min.css +++ /dev/null @@ -1,4 +0,0 @@ -/*! - * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.7.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-vcard:before,.fa-address-card:before{content:"\f2bb"}.fa-vcard-o:before,.fa-address-card-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto} diff --git a/merepresenta/static/css/jquery-ui.css b/merepresenta/static/css/jquery-ui.css deleted file mode 100644 index 93707f4c..00000000 --- a/merepresenta/static/css/jquery-ui.css +++ /dev/null @@ -1,1312 +0,0 @@ -/*! jQuery UI - v1.12.1 - 2016-09-14 -* http://jqueryui.com -* Includes: core.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, draggable.css, resizable.css, progressbar.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css -* To view and modify this theme, visit http://jqueryui.com/themeroller/?bgShadowXPos=&bgOverlayXPos=&bgErrorXPos=&bgHighlightXPos=&bgContentXPos=&bgHeaderXPos=&bgActiveXPos=&bgHoverXPos=&bgDefaultXPos=&bgShadowYPos=&bgOverlayYPos=&bgErrorYPos=&bgHighlightYPos=&bgContentYPos=&bgHeaderYPos=&bgActiveYPos=&bgHoverYPos=&bgDefaultYPos=&bgShadowRepeat=&bgOverlayRepeat=&bgErrorRepeat=&bgHighlightRepeat=&bgContentRepeat=&bgHeaderRepeat=&bgActiveRepeat=&bgHoverRepeat=&bgDefaultRepeat=&iconsHover=url(%22images%2Fui-icons_555555_256x240.png%22)&iconsHighlight=url(%22images%2Fui-icons_777620_256x240.png%22)&iconsHeader=url(%22images%2Fui-icons_444444_256x240.png%22)&iconsError=url(%22images%2Fui-icons_cc0000_256x240.png%22)&iconsDefault=url(%22images%2Fui-icons_777777_256x240.png%22)&iconsContent=url(%22images%2Fui-icons_444444_256x240.png%22)&iconsActive=url(%22images%2Fui-icons_ffffff_256x240.png%22)&bgImgUrlShadow=&bgImgUrlOverlay=&bgImgUrlHover=&bgImgUrlHighlight=&bgImgUrlHeader=&bgImgUrlError=&bgImgUrlDefault=&bgImgUrlContent=&bgImgUrlActive=&opacityFilterShadow=Alpha(Opacity%3D30)&opacityFilterOverlay=Alpha(Opacity%3D30)&opacityShadowPerc=30&opacityOverlayPerc=30&iconColorHover=%23555555&iconColorHighlight=%23777620&iconColorHeader=%23444444&iconColorError=%23cc0000&iconColorDefault=%23777777&iconColorContent=%23444444&iconColorActive=%23ffffff&bgImgOpacityShadow=0&bgImgOpacityOverlay=0&bgImgOpacityError=95&bgImgOpacityHighlight=55&bgImgOpacityContent=75&bgImgOpacityHeader=75&bgImgOpacityActive=65&bgImgOpacityHover=75&bgImgOpacityDefault=75&bgTextureShadow=flat&bgTextureOverlay=flat&bgTextureError=flat&bgTextureHighlight=flat&bgTextureContent=flat&bgTextureHeader=flat&bgTextureActive=flat&bgTextureHover=flat&bgTextureDefault=flat&cornerRadius=3px&fwDefault=normal&ffDefault=Arial%2CHelvetica%2Csans-serif&fsDefault=1em&cornerRadiusShadow=8px&thicknessShadow=5px&offsetLeftShadow=0px&offsetTopShadow=0px&opacityShadow=.3&bgColorShadow=%23666666&opacityOverlay=.3&bgColorOverlay=%23aaaaaa&fcError=%235f3f3f&borderColorError=%23f1a899&bgColorError=%23fddfdf&fcHighlight=%23777620&borderColorHighlight=%23dad55e&bgColorHighlight=%23fffa90&fcContent=%23333333&borderColorContent=%23dddddd&bgColorContent=%23ffffff&fcHeader=%23333333&borderColorHeader=%23dddddd&bgColorHeader=%23e9e9e9&fcActive=%23ffffff&borderColorActive=%23003eff&bgColorActive=%23007fff&fcHover=%232b2b2b&borderColorHover=%23cccccc&bgColorHover=%23ededed&fcDefault=%23454545&borderColorDefault=%23c5c5c5&bgColorDefault=%23f6f6f6 -* Copyright jQuery Foundation and other contributors; Licensed MIT */ - -/* Layout helpers -----------------------------------*/ -.ui-helper-hidden { - display: none; -} -.ui-helper-hidden-accessible { - border: 0; - clip: rect(0 0 0 0); - height: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - width: 1px; -} -.ui-helper-reset { - margin: 0; - padding: 0; - border: 0; - outline: 0; - line-height: 1.3; - text-decoration: none; - font-size: 100%; - list-style: none; -} -.ui-helper-clearfix:before, -.ui-helper-clearfix:after { - content: ""; - display: table; - border-collapse: collapse; -} -.ui-helper-clearfix:after { - clear: both; -} -.ui-helper-zfix { - width: 100%; - height: 100%; - top: 0; - left: 0; - position: absolute; - opacity: 0; - filter:Alpha(Opacity=0); /* support: IE8 */ -} - -.ui-front { - z-index: 100; -} - - -/* Interaction Cues -----------------------------------*/ -.ui-state-disabled { - cursor: default !important; - pointer-events: none; -} - - -/* Icons -----------------------------------*/ -.ui-icon { - display: inline-block; - vertical-align: middle; - margin-top: -.25em; - position: relative; - text-indent: -99999px; - overflow: hidden; - background-repeat: no-repeat; -} - -.ui-widget-icon-block { - left: 50%; - margin-left: -8px; - display: block; -} - -/* Misc visuals -----------------------------------*/ - -/* Overlays */ -.ui-widget-overlay { - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; -} -.ui-accordion .ui-accordion-header { - display: block; - cursor: pointer; - position: relative; - margin: 2px 0 0 0; - padding: .5em .5em .5em .7em; - font-size: 100%; -} -.ui-accordion .ui-accordion-content { - padding: 1em 2.2em; - border-top: 0; - overflow: auto; -} -.ui-autocomplete { - position: absolute; - top: 0; - left: 0; - cursor: default; -} -.ui-menu { - list-style: none; - padding: 0; - margin: 0; - display: block; - outline: 0; -} -.ui-menu .ui-menu { - position: absolute; -} -.ui-menu .ui-menu-item { - margin: 0; - cursor: pointer; - /* support: IE10, see #8844 */ - list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"); -} -.ui-menu .ui-menu-item-wrapper { - position: relative; - padding: 3px 1em 3px .4em; -} -.ui-menu .ui-menu-divider { - margin: 5px 0; - height: 0; - font-size: 0; - line-height: 0; - border-width: 1px 0 0 0; -} -.ui-menu .ui-state-focus, -.ui-menu .ui-state-active { - margin: -1px; -} - -/* icon support */ -.ui-menu-icons { - position: relative; -} -.ui-menu-icons .ui-menu-item-wrapper { - padding-left: 2em; -} - -/* left-aligned */ -.ui-menu .ui-icon { - position: absolute; - top: 0; - bottom: 0; - left: .2em; - margin: auto 0; -} - -/* right-aligned */ -.ui-menu .ui-menu-icon { - left: auto; - right: 0; -} -.ui-button { - padding: .4em 1em; - display: inline-block; - position: relative; - line-height: normal; - margin-right: .1em; - cursor: pointer; - vertical-align: middle; - text-align: center; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - - /* Support: IE <= 11 */ - overflow: visible; -} - -.ui-button, -.ui-button:link, -.ui-button:visited, -.ui-button:hover, -.ui-button:active { - text-decoration: none; -} - -/* to make room for the icon, a width needs to be set here */ -.ui-button-icon-only { - width: 2em; - box-sizing: border-box; - text-indent: -9999px; - white-space: nowrap; -} - -/* no icon support for input elements */ -input.ui-button.ui-button-icon-only { - text-indent: 0; -} - -/* button icon element(s) */ -.ui-button-icon-only .ui-icon { - position: absolute; - top: 50%; - left: 50%; - margin-top: -8px; - margin-left: -8px; -} - -.ui-button.ui-icon-notext .ui-icon { - padding: 0; - width: 2.1em; - height: 2.1em; - text-indent: -9999px; - white-space: nowrap; - -} - -input.ui-button.ui-icon-notext .ui-icon { - width: auto; - height: auto; - text-indent: 0; - white-space: normal; - padding: .4em 1em; -} - -/* workarounds */ -/* Support: Firefox 5 - 40 */ -input.ui-button::-moz-focus-inner, -button.ui-button::-moz-focus-inner { - border: 0; - padding: 0; -} -.ui-controlgroup { - vertical-align: middle; - display: inline-block; -} -.ui-controlgroup > .ui-controlgroup-item { - float: left; - margin-left: 0; - margin-right: 0; -} -.ui-controlgroup > .ui-controlgroup-item:focus, -.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus { - z-index: 9999; -} -.ui-controlgroup-vertical > .ui-controlgroup-item { - display: block; - float: none; - width: 100%; - margin-top: 0; - margin-bottom: 0; - text-align: left; -} -.ui-controlgroup-vertical .ui-controlgroup-item { - box-sizing: border-box; -} -.ui-controlgroup .ui-controlgroup-label { - padding: .4em 1em; -} -.ui-controlgroup .ui-controlgroup-label span { - font-size: 80%; -} -.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item { - border-left: none; -} -.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item { - border-top: none; -} -.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content { - border-right: none; -} -.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content { - border-bottom: none; -} - -/* Spinner specific style fixes */ -.ui-controlgroup-vertical .ui-spinner-input { - - /* Support: IE8 only, Android < 4.4 only */ - width: 75%; - width: calc( 100% - 2.4em ); -} -.ui-controlgroup-vertical .ui-spinner .ui-spinner-up { - border-top-style: solid; -} - -.ui-checkboxradio-label .ui-icon-background { - box-shadow: inset 1px 1px 1px #ccc; - border-radius: .12em; - border: none; -} -.ui-checkboxradio-radio-label .ui-icon-background { - width: 16px; - height: 16px; - border-radius: 1em; - overflow: visible; - border: none; -} -.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon, -.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon { - background-image: none; - width: 8px; - height: 8px; - border-width: 4px; - border-style: solid; -} -.ui-checkboxradio-disabled { - pointer-events: none; -} -.ui-datepicker { - width: 17em; - padding: .2em .2em 0; - display: none; -} -.ui-datepicker .ui-datepicker-header { - position: relative; - padding: .2em 0; -} -.ui-datepicker .ui-datepicker-prev, -.ui-datepicker .ui-datepicker-next { - position: absolute; - top: 2px; - width: 1.8em; - height: 1.8em; -} -.ui-datepicker .ui-datepicker-prev-hover, -.ui-datepicker .ui-datepicker-next-hover { - top: 1px; -} -.ui-datepicker .ui-datepicker-prev { - left: 2px; -} -.ui-datepicker .ui-datepicker-next { - right: 2px; -} -.ui-datepicker .ui-datepicker-prev-hover { - left: 1px; -} -.ui-datepicker .ui-datepicker-next-hover { - right: 1px; -} -.ui-datepicker .ui-datepicker-prev span, -.ui-datepicker .ui-datepicker-next span { - display: block; - position: absolute; - left: 50%; - margin-left: -8px; - top: 50%; - margin-top: -8px; -} -.ui-datepicker .ui-datepicker-title { - margin: 0 2.3em; - line-height: 1.8em; - text-align: center; -} -.ui-datepicker .ui-datepicker-title select { - font-size: 1em; - margin: 1px 0; -} -.ui-datepicker select.ui-datepicker-month, -.ui-datepicker select.ui-datepicker-year { - width: 45%; -} -.ui-datepicker table { - width: 100%; - font-size: .9em; - border-collapse: collapse; - margin: 0 0 .4em; -} -.ui-datepicker th { - padding: .7em .3em; - text-align: center; - font-weight: bold; - border: 0; -} -.ui-datepicker td { - border: 0; - padding: 1px; -} -.ui-datepicker td span, -.ui-datepicker td a { - display: block; - padding: .2em; - text-align: right; - text-decoration: none; -} -.ui-datepicker .ui-datepicker-buttonpane { - background-image: none; - margin: .7em 0 0 0; - padding: 0 .2em; - border-left: 0; - border-right: 0; - border-bottom: 0; -} -.ui-datepicker .ui-datepicker-buttonpane button { - float: right; - margin: .5em .2em .4em; - cursor: pointer; - padding: .2em .6em .3em .6em; - width: auto; - overflow: visible; -} -.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { - float: left; -} - -/* with multiple calendars */ -.ui-datepicker.ui-datepicker-multi { - width: auto; -} -.ui-datepicker-multi .ui-datepicker-group { - float: left; -} -.ui-datepicker-multi .ui-datepicker-group table { - width: 95%; - margin: 0 auto .4em; -} -.ui-datepicker-multi-2 .ui-datepicker-group { - width: 50%; -} -.ui-datepicker-multi-3 .ui-datepicker-group { - width: 33.3%; -} -.ui-datepicker-multi-4 .ui-datepicker-group { - width: 25%; -} -.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header, -.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { - border-left-width: 0; -} -.ui-datepicker-multi .ui-datepicker-buttonpane { - clear: left; -} -.ui-datepicker-row-break { - clear: both; - width: 100%; - font-size: 0; -} - -/* RTL support */ -.ui-datepicker-rtl { - direction: rtl; -} -.ui-datepicker-rtl .ui-datepicker-prev { - right: 2px; - left: auto; -} -.ui-datepicker-rtl .ui-datepicker-next { - left: 2px; - right: auto; -} -.ui-datepicker-rtl .ui-datepicker-prev:hover { - right: 1px; - left: auto; -} -.ui-datepicker-rtl .ui-datepicker-next:hover { - left: 1px; - right: auto; -} -.ui-datepicker-rtl .ui-datepicker-buttonpane { - clear: right; -} -.ui-datepicker-rtl .ui-datepicker-buttonpane button { - float: left; -} -.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current, -.ui-datepicker-rtl .ui-datepicker-group { - float: right; -} -.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header, -.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { - border-right-width: 0; - border-left-width: 1px; -} - -/* Icons */ -.ui-datepicker .ui-icon { - display: block; - text-indent: -99999px; - overflow: hidden; - background-repeat: no-repeat; - left: .5em; - top: .3em; -} -.ui-dialog { - position: absolute; - top: 0; - left: 0; - padding: .2em; - outline: 0; -} -.ui-dialog .ui-dialog-titlebar { - padding: .4em 1em; - position: relative; -} -.ui-dialog .ui-dialog-title { - float: left; - margin: .1em 0; - white-space: nowrap; - width: 90%; - overflow: hidden; - text-overflow: ellipsis; -} -.ui-dialog .ui-dialog-titlebar-close { - position: absolute; - right: .3em; - top: 50%; - width: 20px; - margin: -10px 0 0 0; - padding: 1px; - height: 20px; -} -.ui-dialog .ui-dialog-content { - position: relative; - border: 0; - padding: .5em 1em; - background: none; - overflow: auto; -} -.ui-dialog .ui-dialog-buttonpane { - text-align: left; - border-width: 1px 0 0 0; - background-image: none; - margin-top: .5em; - padding: .3em 1em .5em .4em; -} -.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { - float: right; -} -.ui-dialog .ui-dialog-buttonpane button { - margin: .5em .4em .5em 0; - cursor: pointer; -} -.ui-dialog .ui-resizable-n { - height: 2px; - top: 0; -} -.ui-dialog .ui-resizable-e { - width: 2px; - right: 0; -} -.ui-dialog .ui-resizable-s { - height: 2px; - bottom: 0; -} -.ui-dialog .ui-resizable-w { - width: 2px; - left: 0; -} -.ui-dialog .ui-resizable-se, -.ui-dialog .ui-resizable-sw, -.ui-dialog .ui-resizable-ne, -.ui-dialog .ui-resizable-nw { - width: 7px; - height: 7px; -} -.ui-dialog .ui-resizable-se { - right: 0; - bottom: 0; -} -.ui-dialog .ui-resizable-sw { - left: 0; - bottom: 0; -} -.ui-dialog .ui-resizable-ne { - right: 0; - top: 0; -} -.ui-dialog .ui-resizable-nw { - left: 0; - top: 0; -} -.ui-draggable .ui-dialog-titlebar { - cursor: move; -} -.ui-draggable-handle { - -ms-touch-action: none; - touch-action: none; -} -.ui-resizable { - position: relative; -} -.ui-resizable-handle { - position: absolute; - font-size: 0.1px; - display: block; - -ms-touch-action: none; - touch-action: none; -} -.ui-resizable-disabled .ui-resizable-handle, -.ui-resizable-autohide .ui-resizable-handle { - display: none; -} -.ui-resizable-n { - cursor: n-resize; - height: 7px; - width: 100%; - top: -5px; - left: 0; -} -.ui-resizable-s { - cursor: s-resize; - height: 7px; - width: 100%; - bottom: -5px; - left: 0; -} -.ui-resizable-e { - cursor: e-resize; - width: 7px; - right: -5px; - top: 0; - height: 100%; -} -.ui-resizable-w { - cursor: w-resize; - width: 7px; - left: -5px; - top: 0; - height: 100%; -} -.ui-resizable-se { - cursor: se-resize; - width: 12px; - height: 12px; - right: 1px; - bottom: 1px; -} -.ui-resizable-sw { - cursor: sw-resize; - width: 9px; - height: 9px; - left: -5px; - bottom: -5px; -} -.ui-resizable-nw { - cursor: nw-resize; - width: 9px; - height: 9px; - left: -5px; - top: -5px; -} -.ui-resizable-ne { - cursor: ne-resize; - width: 9px; - height: 9px; - right: -5px; - top: -5px; -} -.ui-progressbar { - height: 2em; - text-align: left; - overflow: hidden; -} -.ui-progressbar .ui-progressbar-value { - margin: -1px; - height: 100%; -} -.ui-progressbar .ui-progressbar-overlay { - background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw=="); - height: 100%; - filter: alpha(opacity=25); /* support: IE8 */ - opacity: 0.25; -} -.ui-progressbar-indeterminate .ui-progressbar-value { - background-image: none; -} -.ui-selectable { - -ms-touch-action: none; - touch-action: none; -} -.ui-selectable-helper { - position: absolute; - z-index: 100; - border: 1px dotted black; -} -.ui-selectmenu-menu { - padding: 0; - margin: 0; - position: absolute; - top: 0; - left: 0; - display: none; -} -.ui-selectmenu-menu .ui-menu { - overflow: auto; - overflow-x: hidden; - padding-bottom: 1px; -} -.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup { - font-size: 1em; - font-weight: bold; - line-height: 1.5; - padding: 2px 0.4em; - margin: 0.5em 0 0 0; - height: auto; - border: 0; -} -.ui-selectmenu-open { - display: block; -} -.ui-selectmenu-text { - display: block; - margin-right: 20px; - overflow: hidden; - text-overflow: ellipsis; -} -.ui-selectmenu-button.ui-button { - text-align: left; - white-space: nowrap; - width: 14em; -} -.ui-selectmenu-icon.ui-icon { - float: right; - margin-top: 0; -} -.ui-slider { - position: relative; - text-align: left; -} -.ui-slider .ui-slider-handle { - position: absolute; - z-index: 2; - width: 1.2em; - height: 1.2em; - cursor: default; - -ms-touch-action: none; - touch-action: none; -} -.ui-slider .ui-slider-range { - position: absolute; - z-index: 1; - font-size: .7em; - display: block; - border: 0; - background-position: 0 0; -} - -/* support: IE8 - See #6727 */ -.ui-slider.ui-state-disabled .ui-slider-handle, -.ui-slider.ui-state-disabled .ui-slider-range { - filter: inherit; -} - -.ui-slider-horizontal { - height: .8em; -} -.ui-slider-horizontal .ui-slider-handle { - top: -.3em; - margin-left: -.6em; -} -.ui-slider-horizontal .ui-slider-range { - top: 0; - height: 100%; -} -.ui-slider-horizontal .ui-slider-range-min { - left: 0; -} -.ui-slider-horizontal .ui-slider-range-max { - right: 0; -} - -.ui-slider-vertical { - width: .8em; - height: 100px; -} -.ui-slider-vertical .ui-slider-handle { - left: -.3em; - margin-left: 0; - margin-bottom: -.6em; -} -.ui-slider-vertical .ui-slider-range { - left: 0; - width: 100%; -} -.ui-slider-vertical .ui-slider-range-min { - bottom: 0; -} -.ui-slider-vertical .ui-slider-range-max { - top: 0; -} -.ui-sortable-handle { - -ms-touch-action: none; - touch-action: none; -} -.ui-spinner { - position: relative; - display: inline-block; - overflow: hidden; - padding: 0; - vertical-align: middle; -} -.ui-spinner-input { - border: none; - background: none; - color: inherit; - padding: .222em 0; - margin: .2em 0; - vertical-align: middle; - margin-left: .4em; - margin-right: 2em; -} -.ui-spinner-button { - width: 1.6em; - height: 50%; - font-size: .5em; - padding: 0; - margin: 0; - text-align: center; - position: absolute; - cursor: default; - display: block; - overflow: hidden; - right: 0; -} -/* more specificity required here to override default borders */ -.ui-spinner a.ui-spinner-button { - border-top-style: none; - border-bottom-style: none; - border-right-style: none; -} -.ui-spinner-up { - top: 0; -} -.ui-spinner-down { - bottom: 0; -} -.ui-tabs { - position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ - padding: .2em; -} -.ui-tabs .ui-tabs-nav { - margin: 0; - padding: .2em .2em 0; -} -.ui-tabs .ui-tabs-nav li { - list-style: none; - float: left; - position: relative; - top: 0; - margin: 1px .2em 0 0; - border-bottom-width: 0; - padding: 0; - white-space: nowrap; -} -.ui-tabs .ui-tabs-nav .ui-tabs-anchor { - float: left; - padding: .5em 1em; - text-decoration: none; -} -.ui-tabs .ui-tabs-nav li.ui-tabs-active { - margin-bottom: -1px; - padding-bottom: 1px; -} -.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor, -.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor, -.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor { - cursor: text; -} -.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor { - cursor: pointer; -} -.ui-tabs .ui-tabs-panel { - display: block; - border-width: 0; - padding: 1em 1.4em; - background: none; -} -.ui-tooltip { - padding: 8px; - position: absolute; - z-index: 9999; - max-width: 300px; -} -body .ui-tooltip { - border-width: 2px; -} - -/* Component containers -----------------------------------*/ -.ui-widget { - font-family: Arial,Helvetica,sans-serif; - font-size: 1em; -} -.ui-widget .ui-widget { - font-size: 1em; -} -.ui-widget input, -.ui-widget select, -.ui-widget textarea, -.ui-widget button { - font-family: Arial,Helvetica,sans-serif; - font-size: 1em; -} -.ui-widget.ui-widget-content { - border: 1px solid #c5c5c5; -} -.ui-widget-content { - border: 1px solid #dddddd; - background: #ffffff; - color: #333333; -} -.ui-widget-content a { - color: #333333; -} -.ui-widget-header { - border: 1px solid #dddddd; - background: #e9e9e9; - color: #333333; - font-weight: bold; -} -.ui-widget-header a { - color: #333333; -} - -/* Interaction states -----------------------------------*/ -.ui-state-default, -.ui-widget-content .ui-state-default, -.ui-widget-header .ui-state-default, -.ui-button, - -/* We use html here because we need a greater specificity to make sure disabled -works properly when clicked or hovered */ -html .ui-button.ui-state-disabled:hover, -html .ui-button.ui-state-disabled:active { - border: 1px solid #c5c5c5; - background: #f6f6f6; - font-weight: normal; - color: #454545; -} -.ui-state-default a, -.ui-state-default a:link, -.ui-state-default a:visited, -a.ui-button, -a:link.ui-button, -a:visited.ui-button, -.ui-button { - color: #454545; - text-decoration: none; -} -.ui-state-hover, -.ui-widget-content .ui-state-hover, -.ui-widget-header .ui-state-hover, -.ui-state-focus, -.ui-widget-content .ui-state-focus, -.ui-widget-header .ui-state-focus, -.ui-button:hover, -.ui-button:focus { - border: 1px solid #cccccc; - background: #ededed; - font-weight: normal; - color: #2b2b2b; -} -.ui-state-hover a, -.ui-state-hover a:hover, -.ui-state-hover a:link, -.ui-state-hover a:visited, -.ui-state-focus a, -.ui-state-focus a:hover, -.ui-state-focus a:link, -.ui-state-focus a:visited, -a.ui-button:hover, -a.ui-button:focus { - color: #2b2b2b; - text-decoration: none; -} - -.ui-visual-focus { - box-shadow: 0 0 3px 1px rgb(94, 158, 214); -} -.ui-state-active, -.ui-widget-content .ui-state-active, -.ui-widget-header .ui-state-active, -a.ui-button:active, -.ui-button:active, -.ui-button.ui-state-active:hover { - border: 1px solid #003eff; - background: #007fff; - font-weight: normal; - color: #ffffff; -} -.ui-icon-background, -.ui-state-active .ui-icon-background { - border: #003eff; - background-color: #ffffff; -} -.ui-state-active a, -.ui-state-active a:link, -.ui-state-active a:visited { - color: #ffffff; - text-decoration: none; -} - -/* Interaction Cues -----------------------------------*/ -.ui-state-highlight, -.ui-widget-content .ui-state-highlight, -.ui-widget-header .ui-state-highlight { - border: 1px solid #dad55e; - background: #fffa90; - color: #777620; -} -.ui-state-checked { - border: 1px solid #dad55e; - background: #fffa90; -} -.ui-state-highlight a, -.ui-widget-content .ui-state-highlight a, -.ui-widget-header .ui-state-highlight a { - color: #777620; -} -.ui-state-error, -.ui-widget-content .ui-state-error, -.ui-widget-header .ui-state-error { - border: 1px solid #f1a899; - background: #fddfdf; - color: #5f3f3f; -} -.ui-state-error a, -.ui-widget-content .ui-state-error a, -.ui-widget-header .ui-state-error a { - color: #5f3f3f; -} -.ui-state-error-text, -.ui-widget-content .ui-state-error-text, -.ui-widget-header .ui-state-error-text { - color: #5f3f3f; -} -.ui-priority-primary, -.ui-widget-content .ui-priority-primary, -.ui-widget-header .ui-priority-primary { - font-weight: bold; -} -.ui-priority-secondary, -.ui-widget-content .ui-priority-secondary, -.ui-widget-header .ui-priority-secondary { - opacity: .7; - filter:Alpha(Opacity=70); /* support: IE8 */ - font-weight: normal; -} -.ui-state-disabled, -.ui-widget-content .ui-state-disabled, -.ui-widget-header .ui-state-disabled { - opacity: .35; - filter:Alpha(Opacity=35); /* support: IE8 */ - background-image: none; -} -.ui-state-disabled .ui-icon { - filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */ -} - -/* Icons -----------------------------------*/ - -/* states and images */ -.ui-icon { - width: 16px; - height: 16px; -} -.ui-icon, -.ui-widget-content .ui-icon { - background-image: url("images/ui-icons_444444_256x240.png"); -} -.ui-widget-header .ui-icon { - background-image: url("images/ui-icons_444444_256x240.png"); -} -.ui-state-hover .ui-icon, -.ui-state-focus .ui-icon, -.ui-button:hover .ui-icon, -.ui-button:focus .ui-icon { - background-image: url("images/ui-icons_555555_256x240.png"); -} -.ui-state-active .ui-icon, -.ui-button:active .ui-icon { - background-image: url("images/ui-icons_ffffff_256x240.png"); -} -.ui-state-highlight .ui-icon, -.ui-button .ui-state-highlight.ui-icon { - background-image: url("images/ui-icons_777620_256x240.png"); -} -.ui-state-error .ui-icon, -.ui-state-error-text .ui-icon { - background-image: url("images/ui-icons_cc0000_256x240.png"); -} -.ui-button .ui-icon { - background-image: url("images/ui-icons_777777_256x240.png"); -} - -/* positioning */ -.ui-icon-blank { background-position: 16px 16px; } -.ui-icon-caret-1-n { background-position: 0 0; } -.ui-icon-caret-1-ne { background-position: -16px 0; } -.ui-icon-caret-1-e { background-position: -32px 0; } -.ui-icon-caret-1-se { background-position: -48px 0; } -.ui-icon-caret-1-s { background-position: -65px 0; } -.ui-icon-caret-1-sw { background-position: -80px 0; } -.ui-icon-caret-1-w { background-position: -96px 0; } -.ui-icon-caret-1-nw { background-position: -112px 0; } -.ui-icon-caret-2-n-s { background-position: -128px 0; } -.ui-icon-caret-2-e-w { background-position: -144px 0; } -.ui-icon-triangle-1-n { background-position: 0 -16px; } -.ui-icon-triangle-1-ne { background-position: -16px -16px; } -.ui-icon-triangle-1-e { background-position: -32px -16px; } -.ui-icon-triangle-1-se { background-position: -48px -16px; } -.ui-icon-triangle-1-s { background-position: -65px -16px; } -.ui-icon-triangle-1-sw { background-position: -80px -16px; } -.ui-icon-triangle-1-w { background-position: -96px -16px; } -.ui-icon-triangle-1-nw { background-position: -112px -16px; } -.ui-icon-triangle-2-n-s { background-position: -128px -16px; } -.ui-icon-triangle-2-e-w { background-position: -144px -16px; } -.ui-icon-arrow-1-n { background-position: 0 -32px; } -.ui-icon-arrow-1-ne { background-position: -16px -32px; } -.ui-icon-arrow-1-e { background-position: -32px -32px; } -.ui-icon-arrow-1-se { background-position: -48px -32px; } -.ui-icon-arrow-1-s { background-position: -65px -32px; } -.ui-icon-arrow-1-sw { background-position: -80px -32px; } -.ui-icon-arrow-1-w { background-position: -96px -32px; } -.ui-icon-arrow-1-nw { background-position: -112px -32px; } -.ui-icon-arrow-2-n-s { background-position: -128px -32px; } -.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } -.ui-icon-arrow-2-e-w { background-position: -160px -32px; } -.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } -.ui-icon-arrowstop-1-n { background-position: -192px -32px; } -.ui-icon-arrowstop-1-e { background-position: -208px -32px; } -.ui-icon-arrowstop-1-s { background-position: -224px -32px; } -.ui-icon-arrowstop-1-w { background-position: -240px -32px; } -.ui-icon-arrowthick-1-n { background-position: 1px -48px; } -.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } -.ui-icon-arrowthick-1-e { background-position: -32px -48px; } -.ui-icon-arrowthick-1-se { background-position: -48px -48px; } -.ui-icon-arrowthick-1-s { background-position: -64px -48px; } -.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } -.ui-icon-arrowthick-1-w { background-position: -96px -48px; } -.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } -.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } -.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } -.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } -.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } -.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } -.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } -.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } -.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } -.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } -.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } -.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } -.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } -.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } -.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } -.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } -.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } -.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } -.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } -.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } -.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } -.ui-icon-arrow-4 { background-position: 0 -80px; } -.ui-icon-arrow-4-diag { background-position: -16px -80px; } -.ui-icon-extlink { background-position: -32px -80px; } -.ui-icon-newwin { background-position: -48px -80px; } -.ui-icon-refresh { background-position: -64px -80px; } -.ui-icon-shuffle { background-position: -80px -80px; } -.ui-icon-transfer-e-w { background-position: -96px -80px; } -.ui-icon-transferthick-e-w { background-position: -112px -80px; } -.ui-icon-folder-collapsed { background-position: 0 -96px; } -.ui-icon-folder-open { background-position: -16px -96px; } -.ui-icon-document { background-position: -32px -96px; } -.ui-icon-document-b { background-position: -48px -96px; } -.ui-icon-note { background-position: -64px -96px; } -.ui-icon-mail-closed { background-position: -80px -96px; } -.ui-icon-mail-open { background-position: -96px -96px; } -.ui-icon-suitcase { background-position: -112px -96px; } -.ui-icon-comment { background-position: -128px -96px; } -.ui-icon-person { background-position: -144px -96px; } -.ui-icon-print { background-position: -160px -96px; } -.ui-icon-trash { background-position: -176px -96px; } -.ui-icon-locked { background-position: -192px -96px; } -.ui-icon-unlocked { background-position: -208px -96px; } -.ui-icon-bookmark { background-position: -224px -96px; } -.ui-icon-tag { background-position: -240px -96px; } -.ui-icon-home { background-position: 0 -112px; } -.ui-icon-flag { background-position: -16px -112px; } -.ui-icon-calendar { background-position: -32px -112px; } -.ui-icon-cart { background-position: -48px -112px; } -.ui-icon-pencil { background-position: -64px -112px; } -.ui-icon-clock { background-position: -80px -112px; } -.ui-icon-disk { background-position: -96px -112px; } -.ui-icon-calculator { background-position: -112px -112px; } -.ui-icon-zoomin { background-position: -128px -112px; } -.ui-icon-zoomout { background-position: -144px -112px; } -.ui-icon-search { background-position: -160px -112px; } -.ui-icon-wrench { background-position: -176px -112px; } -.ui-icon-gear { background-position: -192px -112px; } -.ui-icon-heart { background-position: -208px -112px; } -.ui-icon-star { background-position: -224px -112px; } -.ui-icon-link { background-position: -240px -112px; } -.ui-icon-cancel { background-position: 0 -128px; } -.ui-icon-plus { background-position: -16px -128px; } -.ui-icon-plusthick { background-position: -32px -128px; } -.ui-icon-minus { background-position: -48px -128px; } -.ui-icon-minusthick { background-position: -64px -128px; } -.ui-icon-close { background-position: -80px -128px; } -.ui-icon-closethick { background-position: -96px -128px; } -.ui-icon-key { background-position: -112px -128px; } -.ui-icon-lightbulb { background-position: -128px -128px; } -.ui-icon-scissors { background-position: -144px -128px; } -.ui-icon-clipboard { background-position: -160px -128px; } -.ui-icon-copy { background-position: -176px -128px; } -.ui-icon-contact { background-position: -192px -128px; } -.ui-icon-image { background-position: -208px -128px; } -.ui-icon-video { background-position: -224px -128px; } -.ui-icon-script { background-position: -240px -128px; } -.ui-icon-alert { background-position: 0 -144px; } -.ui-icon-info { background-position: -16px -144px; } -.ui-icon-notice { background-position: -32px -144px; } -.ui-icon-help { background-position: -48px -144px; } -.ui-icon-check { background-position: -64px -144px; } -.ui-icon-bullet { background-position: -80px -144px; } -.ui-icon-radio-on { background-position: -96px -144px; } -.ui-icon-radio-off { background-position: -112px -144px; } -.ui-icon-pin-w { background-position: -128px -144px; } -.ui-icon-pin-s { background-position: -144px -144px; } -.ui-icon-play { background-position: 0 -160px; } -.ui-icon-pause { background-position: -16px -160px; } -.ui-icon-seek-next { background-position: -32px -160px; } -.ui-icon-seek-prev { background-position: -48px -160px; } -.ui-icon-seek-end { background-position: -64px -160px; } -.ui-icon-seek-start { background-position: -80px -160px; } -/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ -.ui-icon-seek-first { background-position: -80px -160px; } -.ui-icon-stop { background-position: -96px -160px; } -.ui-icon-eject { background-position: -112px -160px; } -.ui-icon-volume-off { background-position: -128px -160px; } -.ui-icon-volume-on { background-position: -144px -160px; } -.ui-icon-power { background-position: 0 -176px; } -.ui-icon-signal-diag { background-position: -16px -176px; } -.ui-icon-signal { background-position: -32px -176px; } -.ui-icon-battery-0 { background-position: -48px -176px; } -.ui-icon-battery-1 { background-position: -64px -176px; } -.ui-icon-battery-2 { background-position: -80px -176px; } -.ui-icon-battery-3 { background-position: -96px -176px; } -.ui-icon-circle-plus { background-position: 0 -192px; } -.ui-icon-circle-minus { background-position: -16px -192px; } -.ui-icon-circle-close { background-position: -32px -192px; } -.ui-icon-circle-triangle-e { background-position: -48px -192px; } -.ui-icon-circle-triangle-s { background-position: -64px -192px; } -.ui-icon-circle-triangle-w { background-position: -80px -192px; } -.ui-icon-circle-triangle-n { background-position: -96px -192px; } -.ui-icon-circle-arrow-e { background-position: -112px -192px; } -.ui-icon-circle-arrow-s { background-position: -128px -192px; } -.ui-icon-circle-arrow-w { background-position: -144px -192px; } -.ui-icon-circle-arrow-n { background-position: -160px -192px; } -.ui-icon-circle-zoomin { background-position: -176px -192px; } -.ui-icon-circle-zoomout { background-position: -192px -192px; } -.ui-icon-circle-check { background-position: -208px -192px; } -.ui-icon-circlesmall-plus { background-position: 0 -208px; } -.ui-icon-circlesmall-minus { background-position: -16px -208px; } -.ui-icon-circlesmall-close { background-position: -32px -208px; } -.ui-icon-squaresmall-plus { background-position: -48px -208px; } -.ui-icon-squaresmall-minus { background-position: -64px -208px; } -.ui-icon-squaresmall-close { background-position: -80px -208px; } -.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } -.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } -.ui-icon-grip-solid-vertical { background-position: -32px -224px; } -.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } -.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } -.ui-icon-grip-diagonal-se { background-position: -80px -224px; } - - -/* Misc visuals -----------------------------------*/ - -/* Corner radius */ -.ui-corner-all, -.ui-corner-top, -.ui-corner-left, -.ui-corner-tl { - border-top-left-radius: 3px; -} -.ui-corner-all, -.ui-corner-top, -.ui-corner-right, -.ui-corner-tr { - border-top-right-radius: 3px; -} -.ui-corner-all, -.ui-corner-bottom, -.ui-corner-left, -.ui-corner-bl { - border-bottom-left-radius: 3px; -} -.ui-corner-all, -.ui-corner-bottom, -.ui-corner-right, -.ui-corner-br { - border-bottom-right-radius: 3px; -} - -/* Overlays */ -.ui-widget-overlay { - background: #aaaaaa; - opacity: .003; - filter: Alpha(Opacity=.3); /* support: IE8 */ -} -.ui-widget-shadow { - -webkit-box-shadow: 0px 0px 5px #666666; - box-shadow: 0px 0px 5px #666666; -} diff --git a/merepresenta/static/css/merepresenta/MyFontsWebfontsKit.css b/merepresenta/static/css/merepresenta/MyFontsWebfontsKit.css deleted file mode 100644 index fe85728a..00000000 --- a/merepresenta/static/css/merepresenta/MyFontsWebfontsKit.css +++ /dev/null @@ -1,47 +0,0 @@ -/** - * @license - * MyFonts Webfont Build ID 3277737, 2016-09-01T16:15:34-0400 - * - * The fonts listed in this notice are subject to the End User License - * Agreement(s) entered into by the website owner. All other parties are - * explicitly restricted from using the Licensed Webfonts(s). - * - * You may obtain a valid license at the URLs below. - * - * Webfont: ProximaNovaSoft-Medium by Mark Simonson - * URL: http://www.myfonts.com/fonts/marksimonson/proxima-nova-soft/medium/ - * - * Webfont: ProximaNovaSoft-Semibold by Mark Simonson - * URL: http://www.myfonts.com/fonts/marksimonson/proxima-nova-soft/semibold/ - * - * Webfont: ProximaNovaSoft-Bold by Mark Simonson - * URL: http://www.myfonts.com/fonts/marksimonson/proxima-nova-soft/bold/ - * - * Webfont: ProximaNovaSoft-Regular by Mark Simonson - * URL: http://www.myfonts.com/fonts/marksimonson/proxima-nova-soft/regular/ - * - * - * License: http://www.myfonts.com/viewlicense?type=web&buildid=3277737 - * Licensed pageviews: 1,000,000 - * Webfonts copyright: Copyright (c) Mark Simonson, 2010. All rights reserved. - * - * © 2016 MyFonts Inc -*/ - - -/* @import must be at top of file, otherwise CSS will not work */ - -@import url("//hello.myfonts.net/count/3203a9"); - - -@font-face {font-family: 'ProximaNovaSoft-Medium';src: url('/static/fonts/merepresenta/3203A9_0_0.eot');src: url('/static/fonts/merepresenta/3203A9_0_0.eot?#iefix') format('embedded-opentype'),url('/static/fonts/merepresenta/3203A9_0_0.woff2') format('woff2'),url('/static/fonts/merepresenta/3203A9_0_0.woff') format('woff'),url('/static/fonts/merepresenta/3203A9_0_0.ttf') format('truetype');} - - -@font-face {font-family: 'ProximaNovaSoft-Semibold';src: url('/static/fonts/merepresenta/3203A9_1_0.eot');src: url('/static/fonts/merepresenta/3203A9_1_0.eot?#iefix') format('embedded-opentype'),url('/static/fonts/merepresenta/3203A9_1_0.woff2') format('woff2'),url('/static/fonts/merepresenta/3203A9_1_0.woff') format('woff'),url('/static/fonts/merepresenta/3203A9_1_0.ttf') format('truetype');} - - -@font-face {font-family: 'ProximaNovaSoft-Bold';src: url('/static/fonts/merepresenta/3203A9_2_0.eot');src: url('/static/fonts/merepresenta/3203A9_2_0.eot?#iefix') format('embedded-opentype'),url('/static/fonts/merepresenta/3203A9_2_0.woff2') format('woff2'),url('/static/fonts/merepresenta/3203A9_2_0.woff') format('woff'),url('/static/fonts/merepresenta/3203A9_2_0.ttf') format('truetype');} - - -@font-face {font-family: 'ProximaNovaSoft-Regular';src: url('/static/fonts/merepresenta/3203A9_3_0.eot');src: url('/static/fonts/merepresenta/3203A9_3_0.eot?#iefix') format('embedded-opentype'),url('/static/fonts/merepresenta/3203A9_3_0.woff2') format('woff2'),url('/static/fonts/merepresenta/3203A9_3_0.woff') format('woff'),url('/static/fonts/merepresenta/3203A9_3_0.ttf') format('truetype');} - diff --git a/merepresenta/static/css/merepresenta/about.css b/merepresenta/static/css/merepresenta/about.css deleted file mode 100644 index ba388488..00000000 --- a/merepresenta/static/css/merepresenta/about.css +++ /dev/null @@ -1,76 +0,0 @@ -body { - background-color: #00a9d9; - background-image: url("/assets/FC3.png"); -} -header { - padding: .5em 0; - border-bottom: 1px solid #582985; -} -.links.atual { - color: #582985; -} -.links { - color: #fff; - font-weight: bolder; - font-size: 1.1em; - display: inline-block; - text-transform: uppercase; - margin-right: 2em; -} -a.links:hover { - font-size: 1.2em; - text-decoration: none; - transform: rotate(360deg); - transition: font-size 1s, transform 2s; -} -h1 { - color: #d8b212; - font-size: 2.5em; - text-transform: uppercase; - transform: rotate(-3deg); - text-shadow: -.1em .1em #582985; - text-align: center; - margin: 2em 0; - font-family: ProximaNovaSoft-Bold; -} -h1:after { - content: ":)"; - margin-left: .3em; -} -h2 { - text-transform: uppercase; - font-size: 1.2em; - color: #582985; - font-family: ProximaNovaSoft-Bold; - margin: 2em 0 1em 0; -} -p { - color: #fff; -} -.video-container { - position:relative; - padding-bottom:56.25%; - padding-top:30px; - height:0; - overflow:hidden; -} -.video-container iframe, .video-container object, .video-container embed { - position:absolute; - top:0; - left:0; - width:100%; - height:100%; -} -.parcerias { - text-align: center; -} -@media screen and (min-width: 600px) { - h1 { - font-size: 3em; - } -} -@media screen and (min-width: 1000px) { - h1 { - font-size: 5em; - } -} diff --git a/merepresenta/static/css/merepresenta/bootstrap.min.css b/merepresenta/static/css/merepresenta/bootstrap.min.css deleted file mode 100644 index 6561b6f4..00000000 --- a/merepresenta/static/css/merepresenta/bootstrap.min.css +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Bootstrap v4.0.0 (https://getbootstrap.com) - * Copyright 2011-2018 The Bootstrap Authors - * Copyright 2011-2018 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}@-ms-viewport{width:device-width}article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-family:inherit;font-weight:500;line-height:1.2;color:inherit}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014 \00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-sm-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-sm-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-sm-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-sm-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-sm-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-sm-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-sm-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-sm-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-sm-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-sm-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-sm-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-sm-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-sm-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-sm-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-sm-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-md-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-md-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-md-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-md-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-md-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-md-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-md-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-md-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-md-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-md-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-md-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-md-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-md-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-md-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-md-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-lg-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-lg-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-lg-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-lg-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-lg-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-lg-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-lg-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-lg-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-lg-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-lg-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-lg-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-lg-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-lg-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-lg-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-lg-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-xl-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-xl-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-xl-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-xl-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-xl-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-xl-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-xl-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-xl-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-xl-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-xl-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-xl-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-xl-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-xl-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-xl-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-xl-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;max-width:100%;margin-bottom:1rem;background-color:transparent}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table .table{background-color:#fff}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#212529;border-color:#32383e}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#212529}.table-dark td,.table-dark th,.table-dark thead th{border-color:#32383e}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:not([size]):not([multiple]){height:calc(2.25rem + 2px)}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm,.input-group-lg>.form-control-plaintext.form-control,.input-group-lg>.input-group-append>.form-control-plaintext.btn,.input-group-lg>.input-group-append>.form-control-plaintext.input-group-text,.input-group-lg>.input-group-prepend>.form-control-plaintext.btn,.input-group-lg>.input-group-prepend>.form-control-plaintext.input-group-text,.input-group-sm>.form-control-plaintext.form-control,.input-group-sm>.input-group-append>.form-control-plaintext.btn,.input-group-sm>.input-group-append>.form-control-plaintext.input-group-text,.input-group-sm>.input-group-prepend>.form-control-plaintext.btn,.input-group-sm>.input-group-prepend>.form-control-plaintext.input-group-text{padding-right:0;padding-left:0}.form-control-sm,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-sm>.input-group-append>select.btn:not([size]):not([multiple]),.input-group-sm>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-sm>select.form-control:not([size]):not([multiple]),select.form-control-sm:not([size]):not([multiple]){height:calc(1.8125rem + 2px)}.form-control-lg,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-lg>.input-group-append>select.btn:not([size]):not([multiple]),.input-group-lg>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-lg>select.form-control:not([size]):not([multiple]),select.form-control-lg:not([size]):not([multiple]){height:calc(2.875rem + 2px)}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(40,167,69,.8);border-radius:.2rem}.custom-select.is-valid,.form-control.is-valid,.was-validated .custom-select:valid,.was-validated .form-control:valid{border-color:#28a745}.custom-select.is-valid:focus,.form-control.is-valid:focus,.was-validated .custom-select:valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{background-color:#71dd8a}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(40,167,69,.25)}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label::before,.was-validated .custom-file-input:valid~.custom-file-label::before{border-color:inherit}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(220,53,69,.8);border-radius:.2rem}.custom-select.is-invalid,.form-control.is-invalid,.was-validated .custom-select:invalid,.was-validated .form-control:invalid{border-color:#dc3545}.custom-select.is-invalid:focus,.form-control.is-invalid:focus,.was-validated .custom-select:invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{background-color:#efa2a9}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(220,53,69,.25)}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label::before,.was-validated .custom-file-input:invalid~.custom-file-label::before{border-color:inherit}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .input-group{width:auto}.form-inline .form-check{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.btn:focus,.btn:hover{text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}.btn:not(:disabled):not(.disabled).active,.btn:not(:disabled):not(.disabled):active{background-image:none}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-primary{color:#007bff;background-color:transparent;background-image:none;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;background-color:transparent;background-image:none;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;background-color:transparent;background-image:none;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;background-color:transparent;background-image:none;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;background-color:transparent;background-image:none;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;background-color:transparent;background-image:none;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;background-color:transparent;background-image:none;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;background-color:transparent;background-image:none;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;background-color:transparent}.btn-link:hover{color:#0056b3;text-decoration:underline;background-color:transparent;border-color:transparent}.btn-link.focus,.btn-link:focus{text-decoration:underline;border-color:transparent;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;transition:opacity .15s linear}.fade.show{opacity:1}.collapse{display:none}.collapse.show{display:block}tr.collapse.show{display:table-row}tbody.collapse.show{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}.dropdown,.dropup{position:relative}.dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropup .dropdown-menu{margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;width:0;height:0;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.btn-group,.btn-group-vertical{position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group,.btn-group-vertical .btn+.btn,.btn-group-vertical .btn+.btn-group,.btn-group-vertical .btn-group+.btn,.btn-group-vertical .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after{margin-left:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.btn-group-vertical .btn,.btn-group-vertical .btn-group{width:100%}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file:focus,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control{margin-left:-1px}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::before{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label,.input-group>.custom-file:not(:first-child) .custom-file-label::before{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-webkit-box;display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:active~.custom-control-label::before{color:#fff;background-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{margin-bottom:0}.custom-control-label::before{position:absolute;top:.25rem;left:0;display:block;width:1rem;height:1rem;pointer-events:none;content:"";-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#dee2e6}.custom-control-label::after{position:absolute;top:.25rem;left:0;display:block;width:1rem;height:1rem;content:"";background-repeat:no-repeat;background-position:center center;background-size:50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(2.25rem + 2px);padding:.375rem 1.75rem .375rem .75rem;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center;background-size:8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:inset 0 1px 2px rgba(0,0,0,.075),0 0 5px rgba(128,189,255,.5)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{opacity:0}.custom-select-sm{height:calc(1.8125rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:75%}.custom-select-lg{height:calc(2.875rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:125%}.custom-file{position:relative;display:inline-block;width:100%;height:calc(2.25rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(2.25rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-control{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:focus~.custom-file-control::before{border-color:#80bdff}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(2.25rem + 2px);padding:.375rem .75rem;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(calc(2.25rem + 2px) - 1px * 2);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:1px solid #ced4da;border-radius:0 .25rem .25rem 0}.nav{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar>.container,.navbar>.container-fluid{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler:not(:disabled):not(.disabled){cursor:pointer}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .dropup .dropdown-menu{top:auto;bottom:100%}}.navbar-expand{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .dropup .dropdown-menu{top:auto;bottom:100%}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:first-child .card-header,.card-group>.card:first-child .card-img-top{border-top-right-radius:0}.card-group>.card:first-child .card-footer,.card-group>.card:first-child .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:last-child .card-header,.card-group>.card:last-child .card-img-top{border-top-left-radius:0}.card-group>.card:last-child .card-footer,.card-group>.card:last-child .card-img-bottom{border-bottom-left-radius:0}.card-group>.card:only-child{border-radius:.25rem}.card-group>.card:only-child .card-header,.card-group>.card:only-child .card-img-top{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-group>.card:only-child .card-footer,.card-group>.card:only-child .card-img-bottom{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-group>.card:not(:first-child):not(:last-child):not(:only-child){border-radius:0}.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-footer,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-header,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-top{border-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem}.card-columns .card{display:inline-block;width:100%}}.breadcrumb{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;padding-left:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-webkit-box;display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-link:not(:disabled):not(.disabled){cursor:pointer}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}.badge-primary[href]:focus,.badge-primary[href]:hover{color:#fff;text-decoration:none;background-color:#0062cc}.badge-secondary{color:#fff;background-color:#6c757d}.badge-secondary[href]:focus,.badge-secondary[href]:hover{color:#fff;text-decoration:none;background-color:#545b62}.badge-success{color:#fff;background-color:#28a745}.badge-success[href]:focus,.badge-success[href]:hover{color:#fff;text-decoration:none;background-color:#1e7e34}.badge-info{color:#fff;background-color:#17a2b8}.badge-info[href]:focus,.badge-info[href]:hover{color:#fff;text-decoration:none;background-color:#117a8b}.badge-warning{color:#212529;background-color:#ffc107}.badge-warning[href]:focus,.badge-warning[href]:hover{color:#212529;text-decoration:none;background-color:#d39e00}.badge-danger{color:#fff;background-color:#dc3545}.badge-danger[href]:focus,.badge-danger[href]:hover{color:#fff;text-decoration:none;background-color:#bd2130}.badge-light{color:#212529;background-color:#f8f9fa}.badge-light[href]:focus,.badge-light[href]:hover{color:#212529;text-decoration:none;background-color:#dae0e5}.badge-dark{color:#fff;background-color:#343a40}.badge-dark[href]:focus,.badge-dark[href]:hover{color:#fff;text-decoration:none;background-color:#1d2124}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-webkit-box;display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;background-color:#007bff;transition:width .6s ease}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}.media{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.media-body{-webkit-box-flex:1;-ms-flex:1;flex:1}.list-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item:focus,.list-group-item:hover{z-index:1;text-decoration:none}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:focus,.close:hover{color:#000;text-decoration:none;opacity:.75}.close:not(:disabled):not(.disabled){cursor:pointer}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;outline:0}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.show .modal-dialog{-webkit-transform:translate(0,0);transform:translate(0,0)}.modal-dialog-centered{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;min-height:calc(100% - (.5rem * 2))}.modal-content{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:1rem;border-bottom:1px solid #e9ecef;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid #e9ecef}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-centered{min-height:calc(100% - (1.75rem * 2))}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg{max-width:800px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top] .arrow,.bs-popover-top .arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::after,.bs-popover-top .arrow::before{border-width:.5rem .5rem 0}.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::before{bottom:0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-top .arrow::after{bottom:1px;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right] .arrow,.bs-popover-right .arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::after,.bs-popover-right .arrow::before{border-width:.5rem .5rem .5rem 0}.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::before{left:0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-right .arrow::after{left:1px;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom] .arrow,.bs-popover-bottom .arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::after,.bs-popover-bottom .arrow::before{border-width:0 .5rem .5rem .5rem}.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::before{top:0;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-bottom .arrow::after{top:1px;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left] .arrow,.bs-popover-left .arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::after,.bs-popover-left .arrow::before{border-width:.5rem 0 .5rem .5rem}.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::before{right:0;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-left .arrow::after{right:1px;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;color:inherit;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-item{position:relative;display:none;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;transition:-webkit-transform .6s ease;transition:transform .6s ease;transition:transform .6s ease,-webkit-transform .6s ease;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.carousel-item-next,.carousel-item-prev{position:absolute;top:0}.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translateX(0);transform:translateX(0)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.active.carousel-item-right,.carousel-item-next{-webkit-transform:translateX(100%);transform:translateX(100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-right,.carousel-item-next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translateX(-100%);transform:translateX(-100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:transparent no-repeat center center;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E")}.carousel-indicators{position:absolute;right:0;bottom:10px;left:0;z-index:15;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{position:relative;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;background-color:rgba(255,255,255,.5)}.carousel-indicators li::before{position:absolute;top:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators li::after{position:absolute;bottom:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-circle{border-radius:50%!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-sm-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-md-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-lg-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-xl-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;-webkit-clip-path:inset(50%);clip-path:inset(50%);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal;-webkit-clip-path:none;clip-path:none}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-justify{text-align:justify!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0062cc!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#545b62!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#1e7e34!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#117a8b!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#d39e00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#bd2130!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#dae0e5!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#1d2124!important}.text-muted{color:#6c757d!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}} -/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/merepresenta/static/css/merepresenta/bootstrap.min.css.map b/merepresenta/static/css/merepresenta/bootstrap.min.css.map deleted file mode 100644 index 2323f3d6..00000000 --- a/merepresenta/static/css/merepresenta/bootstrap.min.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../scss/_normalize.scss","bootstrap.css","../../scss/_print.scss","../../scss/_reboot.scss","../../scss/_variables.scss","../../scss/mixins/_tab-focus.scss","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/mixins/_border-radius.scss","../../scss/_code.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_clearfix.scss","../../scss/mixins/_breakpoints.scss","../../scss/mixins/_grid-framework.scss","../../scss/_tables.scss","../../scss/mixins/_table-row.scss","../../scss/_forms.scss","../../scss/mixins/_forms.scss","../../scss/_buttons.scss","../../scss/mixins/_buttons.scss","../../scss/_animation.scss","../../scss/_dropdown.scss","../../scss/mixins/_nav-divider.scss","../../scss/mixins/_reset-filter.scss","../../scss/_button-group.scss","../../scss/_input-group.scss","../../scss/_custom-forms.scss","../../scss/_nav.scss","../../scss/_navbar.scss","../../scss/_card.scss","../../scss/mixins/_cards.scss","../../scss/_breadcrumb.scss","../../scss/_pagination.scss","../../scss/mixins/_pagination.scss","../../scss/_tags.scss","../../scss/mixins/_tag.scss","../../scss/_jumbotron.scss","../../scss/_alert.scss","../../scss/mixins/_alert.scss","../../scss/_progress.scss","../../scss/mixins/_gradients.scss","../../scss/mixins/_progress.scss","../../scss/_media.scss","../../scss/_list-group.scss","../../scss/mixins/_list-group.scss","../../scss/_responsive-embed.scss","../../scss/_close.scss","../../scss/_modal.scss","../../scss/_tooltip.scss","../../scss/mixins/_reset-text.scss","../../scss/_popover.scss","../../scss/_carousel.scss","../../scss/utilities/_background.scss","../../scss/mixins/_background-variant.scss","../../scss/utilities/_clearfix.scss","../../scss/utilities/_display.scss","../../scss/utilities/_pulls.scss","../../scss/mixins/_pulls.scss","../../scss/utilities/_screenreaders.scss","../../scss/mixins/_screen-reader.scss","../../scss/utilities/_spacing.scss","../../scss/utilities/_text.scss","../../scss/mixins/_text-truncate.scss","../../scss/mixins/_text-emphasis.scss","../../scss/mixins/_text-hide.scss","../../scss/utilities/_visibility.scss"],"names":[],"mappings":"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,UHWJ,MAAA,KACA,MAAA,WGZI,UHWJ,MAAA,KACA,MAAA,WGZI,UHWJ,MAAA,KACA,MAAA,IGZI,WHWJ,MAAA,KACA,MAAA,WGZI,WHWJ,MAAA,KACA,MAAA,WGZI,WHWJ,MAAA,KACA,MAAA,KGLM,WHkBR,MAAA,KGlBQ,WHkBR,MAAA,UGlBQ,WHkBR,MAAA,WGlBQ,WHkBR,MAAA,IGlBQ,WHkBR,MAAA,WGlBQ,WHkBR,MAAA,WGlBQ,WHkBR,MAAA,IGlBQ,WHkBR,MAAA,WGlBQ,WHkBR,MAAA,WGlBQ,WHkBR,MAAA,IGlBQ,YHkBR,MAAA,WGlBQ,YHkBR,MAAA,WGlBQ,YHkBR,MAAA,KGlBQ,WHcR,KAAA,KGdQ,WHcR,KAAA,UGdQ,WHcR,KAAA,WGdQ,WHcR,KAAA,IGdQ,WHcR,KAAA,WGdQ,WHcR,KAAA,WGdQ,WHcR,KAAA,IGdQ,WHcR,KAAA,WGdQ,WHcR,KAAA,WGdQ,WHcR,KAAA,IGdQ,YHcR,KAAA,WGdQ,YHcR,KAAA,WGdQ,YHcR,KAAA,KGLQ,aHCR,YAAA,EGDQ,aHCR,YAAA,UGDQ,aHCR,YAAA,WGDQ,aHCR,YAAA,IGDQ,aHCR,YAAA,WGDQ,aHCR,YAAA,WGDQ,aHCR,YAAA,IGDQ,aHCR,YAAA,WGDQ,aHCR,YAAA,WGDQ,aHCR,YAAA,IGDQ,cHCR,YAAA,WGDQ,cHCR,YAAA,YElBE,yBCCI,UHWJ,MAAA,KACA,MAAA,UGZI,UHWJ,MAAA,KACA,MAAA,WGZI,UHWJ,MAAA,KACA,MAAA,IGZI,UHWJ,MAAA,KACA,MAAA,WGZI,UHWJ,MAAA,KACA,MAAA,WGZI,UHWJ,MAAA,KACA,MAAA,IGZI,UHWJ,MAAA,KACA,MAAA,WGZI,UHWJ,MAAA,KACA,MAAA,WGZI,UHWJ,MAAA,KACA,MAAA,IGZI,WHWJ,MAAA,KACA,MAAA,WGZI,WHWJ,MAAA,KACA,MAAA,WGZI,WHWJ,MAAA,KACA,MAAA,KGLM,WHkBR,MAAA,KGlBQ,WHkBR,MAAA,UGlBQ,WHkBR,MAAA,WGlBQ,WHkBR,MAAA,IGlBQ,WHkBR,MAAA,WGlBQ,WHkBR,MAAA,WGlBQ,WHkBR,MAAA,IGlBQ,WHkBR,MAAA,WGlBQ,WHkBR,MAAA,WGlBQ,WHkBR,MAAA,IGlBQ,YHkBR,MAAA,WGlBQ,YHkBR,MAAA,WGlBQ,YHkBR,MAAA,KGlBQ,WHcR,KAAA,KGdQ,WHcR,KAAA,UGdQ,WHcR,KAAA,WGdQ,WHcR,KAAA,IGdQ,WHcR,KAAA,WGdQ,WHcR,KAAA,WGdQ,WHcR,KAAA,IGdQ,WHcR,KAAA,WGdQ,WHcR,KAAA,WGdQ,WHcR,KAAA,IGdQ,YHcR,KAAA,WGdQ,YHcR,KAAA,WGdQ,YHcR,KAAA,KGLQ,aHCR,YAAA,EGDQ,aHCR,YAAA,UGDQ,aHCR,YAAA,WGDQ,aHCR,YAAA,IGDQ,aHCR,YAAA,WGDQ,aHCR,YAAA,WGDQ,aHCR,YAAA,IGDQ,aHCR,YAAA,WGDQ,aHCR,YAAA,WGDQ,aHCR,YAAA,IGDQ,cHCR,YAAA,WGDQ,cHCR,YAAA,YElBE,yBCCI,UHWJ,MAAA,KACA,MAAA,UGZI,UHWJ,MAAA,KACA,MAAA,WGZI,UHWJ,MAAA,KACA,MAAA,IGZI,UHWJ,MAAA,KACA,MAAA,WGZI,UHWJ,MAAA,KACA,MAAA,WGZI,UHWJ,MAAA,KACA,MAAA,IGZI,UHWJ,MAAA,KACA,MAAA,WGZI,UHWJ,MAAA,KACA,MAAA,WGZI,UHWJ,MAAA,KACA,MAAA,IGZI,WHWJ,MAAA,KACA,MAAA,WGZI,WHWJ,MAAA,KACA,MAAA,WGZI,WHWJ,MAAA,KACA,MAAA,KGLM,WHkBR,MAAA,KGlBQ,WHkBR,MAAA,UGlBQ,WHkBR,MAAA,WGlBQ,WHkBR,MAAA,IGlBQ,WHkBR,MAAA,WGlBQ,WHkBR,MAAA,WGlBQ,WHkBR,MAAA,IGlBQ,WHkBR,MAAA,WGlBQ,WHkBR,MAAA,WGlBQ,WHkBR,MAAA,IGlBQ,YHkBR,MAAA,WGlBQ,YHkBR,MAAA,WGlBQ,YHkBR,MAAA,KGlBQ,WHcR,KAAA,KGdQ,WHcR,KAAA,UGdQ,WHcR,KAAA,WGdQ,WHcR,KAAA,IGdQ,WHcR,KAAA,WGdQ,WHcR,KAAA,WGdQ,WHcR,KAAA,IGdQ,WHcR,KAAA,WGdQ,WHcR,KAAA,WGdQ,WHcR,KAAA,IGdQ,YHcR,KAAA,WGdQ,YHcR,KAAA,WGdQ,YHcR,KAAA,KGLQ,aHCR,YAAA,EGDQ,aHCR,YAAA,UGDQ,aHCR,YAAA,WGDQ,aHCR,YAAA,IGDQ,aHCR,YAAA,WGDQ,aHCR,YAAA,WGDQ,aHCR,YAAA,IGDQ,aHCR,YAAA,WGDQ,aHCR,YAAA,WGDQ,aHCR,YAAA,IGDQ,cHCR,YAAA,WGDQ,cHCR,YAAA,YElBE,0BCCI,UHWJ,MAAA,KACA,MAAA,UGZI,UHWJ,MAAA,KACA,MAAA,WGZI,UHWJ,MAAA,KACA,MAAA,IGZI,UHWJ,MAAA,KACA,MAAA,WGZI,UHWJ,MAAA,KACA,MAAA,WGZI,UHWJ,MAAA,KACA,MAAA,IGZI,UHWJ,MAAA,KACA,MAAA,WGZI,UHWJ,MAAA,KACA,MAAA,WGZI,UHWJ,MAAA,KACA,MAAA,IGZI,WHWJ,MAAA,KACA,MAAA,WGZI,WHWJ,MAAA,KACA,MAAA,WGZI,WHWJ,MAAA,KACA,MAAA,KGLM,WHkBR,MAAA,KGlBQ,WHkBR,MAAA,UGlBQ,WHkBR,MAAA,WGlBQ,WHkBR,MAAA,IGlBQ,WHkBR,MAAA,WGlBQ,WHkBR,MAAA,WGlBQ,WHkBR,MAAA,IGlBQ,WHkBR,MAAA,WGlBQ,WHkBR,MAAA,WGlBQ,WHkBR,MAAA,IGlBQ,YHkBR,MAAA,WGlBQ,YHkBR,MAAA,WGlBQ,YHkBR,MAAA,KGlBQ,WHcR,KAAA,KGdQ,WHcR,KAAA,UGdQ,WHcR,KAAA,WGdQ,WHcR,KAAA,IGdQ,WHcR,KAAA,WGdQ,WHcR,KAAA,WGdQ,WHcR,KAAA,IGdQ,WHcR,KAAA,WGdQ,WHcR,KAAA,WGdQ,WHcR,KAAA,IGdQ,YHcR,KAAA,WGdQ,YHcR,KAAA,WGdQ,YHcR,KAAA,KGLQ,aHCR,YAAA,EGDQ,aHCR,YAAA,UGDQ,aHCR,YAAA,WGDQ,aHCR,YAAA,IGDQ,aHCR,YAAA,WGDQ,aHCR,YAAA,WGDQ,aHCR,YAAA,IGDQ,aHCR,YAAA,WGDQ,aHCR,YAAA,WGDQ,aHCR,YAAA,IGDQ,cHCR,YAAA,WGDQ,cHCR,YAAA,YI3DF,OACE,MAAA,KACA,UAAA,KACA,cAAA,KAHF,UAAA,UAOI,QAAA,OACA,eAAA,IACA,WAAA,IAAA,MAAA,QATJ,gBAaI,eAAA,OACA,cAAA,IAAA,MAAA,QAdJ,mBAkBI,WAAA,IAAA,MAAA,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"} \ No newline at end of file diff --git a/merepresenta/static/css/merepresenta/candidates-match.css b/merepresenta/static/css/merepresenta/candidates-match.css deleted file mode 100644 index 85f36318..00000000 --- a/merepresenta/static/css/merepresenta/candidates-match.css +++ /dev/null @@ -1,106 +0,0 @@ -body { - background-color: #582985; - background-image: url('/static/img/merepresenta/FE3.png'); -} -h2 { - font-family: ProximaNovaSoft-Bold; - text-transform: uppercase; - color: #097e74; - font-size: 1.2em; - text-align: center; -} -.conteudo { - margin: 2em 0; - font-family: ProximaNovaSoft-Bold; -} -h1 { - color: #d8b212; - text-transform: uppercase; - font-size: 1.5em; - font-weight: bolder; - text-align: center; -} -p { - color: #fff; - margin: 2em 0; -} -.btn-2 { - border: 2px solid #d8b212; - padding: 1em; - margin: auto; - display: block; - width: 36ch; - max-width: 100%; - text-transform: uppercase; - font-weight: bolder; - margin-top: 4em; - font-size: 1.2em; -} -.btn.invisivel { - display: none; -} -.conteudo a, .conteudo a:hover { - color: white; - border-bottom: 1px solid #fff; - text-decoration: none; -} -@media screen and (min-width: 768px) { - h2 { - font-size: 1.5em; - } -} -@media screen and (min-width: 1200px) { - th { - background-color: #097e74; - border: 1em solid #582985; - padding: 1em; - } - h2 { - font-size: 2em; - } - label { - display: block; - font-size: .8em; - } -} - -.candidatos { - display: flex; - flex-wrap: wrap; - justify-content: center; -} -.candidato { - background-color: #097e74; - display: inline-block; - width: 300px; - margin: 1em; - padding: 1.5em; -} -.can-pic { - display: block; - margin: 0 auto 1em auto; - width: 150px; - height: 150px; - border-radius: 50%; -} -.info-text { - text-transform: uppercase; - color: #fff; - display: block; - text-align: center; -} -.info-text.name { - font-weight: bolder; -} -.candidate-number { - font-size: 3em; -} -.info-text.party, .info-text.contagem { - color: #d8b212; -} -.info-text.nota { - padding-top: .2em; - background-color: #d8b212; - color: #532985; - border-radius: .3em; -} diff --git a/merepresenta/static/css/merepresenta/candidates.css b/merepresenta/static/css/merepresenta/candidates.css deleted file mode 100644 index 42b0ab3e..00000000 --- a/merepresenta/static/css/merepresenta/candidates.css +++ /dev/null @@ -1,143 +0,0 @@ -body { - background-image: url('/static/img/merepresenta/FE3.png'); - background-color: #582985; -} -option { - background-color: #582985; -} -main { - color: #fff; - font-family: ProximaNovaSoft-Bold; -} -.btn-3 { - width: 40ch; - margin: 0 auto; - display: block; - text-transform: uppercase; - max-width: 100%; - white-space: normal; -} -h1 { - color: #d8b212; - text-transform: uppercase; - text-shadow: -.1em 0 #097e74; - font-size: 3em; - width: 7em; - letter-spacing: .2em; - transform: rotate(-5deg); - margin: 0 auto .5em auto; -} -.intro { - margin-bottom: 2em; -} -#busca_cidade, #busca_cidade~input { - display: none; -} -#busca_cidade:checked~input { - display: block; -} -#busca_cidade + label { - cursor: pointer; - color: #d8b212; -} -.erros, .erro { - margin: 0; -} -.login { - box-shadow: 0 0 0 2000px rgba(61,61,61,.77); - background-color: rgba(61,61,61,.77); - position: fixed; - z-index: 1; - width: 100vw; - top: 10%; - left: 0; - right: 0; -} -.login>.texto { - background-color: #00a99d; - color: #582985; - padding: 1em; - max-width: 100vw; - width: 450px; - /*margin: 0 auto;*/ - margin: 2em auto; -} -.login .nav { - max-width: 450px; - margin: 0 auto; -} -.login .nav button { - width: 100%; -} -#btn_login_voltar { - position: relative; -} -#btn_login_voltar:before { - content: "<"; - position: absolute; - left: 1em; - font-weight: bold; - font-size: 1.5em; - top: .18em; -} -#btn_login_prosseguir { - position: relative; -} -#btn_login_prosseguir:after { - content: ">"; - position: absolute; - right: 1em; - font-weight: bold; - font-size: 1.5em; - top: .18em; -} -@media screen and (min-width: 500px) { - h1 { - font-size: 4em; - } - #busca_cidade + label { - display: inline; - } - #btn_login_voltar { - float: left; - } - #btn_login_prosseguir { - float: right; - } - .login { - top: 30%; - } - .login .nav button { - width: 200px; - } -} -@media screen and (min-width: 800px) { - h1 { - font-size: 5em; - } -} -@media screen and (min-width: 900px) { - .header { - margin-bottom: 5em; - } - .header, .div-user { - display: inline-block; - width: 100%; - } - h1 { - float: left; - } - .intro { - display: block; - top: 6em; - width: 100%; - left: -10em; - font-size: 1em; - text-transform: uppercase; - position: relative; - } - .explicacao { - font-size: .8em; - position: initial; - } -} diff --git a/merepresenta/static/css/merepresenta/cidades.js b/merepresenta/static/css/merepresenta/cidades.js deleted file mode 100644 index 1c11ca22..00000000 --- a/merepresenta/static/css/merepresenta/cidades.js +++ /dev/null @@ -1,48 +0,0 @@ -var ligaCidades = function(componenteBusca, selecionaValores) { - cBusca = $( componenteBusca ); - cBusca.autocomplete({ - source: function( request, response ) { - $.ajax({ - url: "/cities?match=" + request.term - , method: "get" - , accept: "application/json" - , success: function( data ) { - var objetos = data.map(function(cidade){ - return { - value: cidade[0] - , label: cidade[1] - }; - }); - response( data.length === 1 && data[ 0 ].length === 0 ? [] : objetos ); - } - , error: function(xref) { - selecionaValores(xref); - } - }); - } - , minLength: 2 - , select: function( event, ui ) { - cBusca.val(ui.item.label); - return false; - } - , change: function( event, ui ) { - if (ui.item != null) { - var retorno = { - id: ui.item.value - , texto: ui.item.label - }; - cBusca.val(ui.item.label); - selecionaValores(null, retorno); - } - else { - cBusca.val(''); - selecionaValores(null, {}); - } - return false; - } - , focus: function( event, ui ) { - event.preventDefault(); - $(event.target).val(ui.item.label); - } - } ); -}; diff --git a/merepresenta/static/css/merepresenta/contact.css b/merepresenta/static/css/merepresenta/contact.css deleted file mode 100644 index 6b902e2f..00000000 --- a/merepresenta/static/css/merepresenta/contact.css +++ /dev/null @@ -1,64 +0,0 @@ -header { - border-bottom: 1px solid #582985; - padding: .5em 0; -} -main { - font-family: ProximaNovaSoft-Bold; - text-transform: uppercase; - letter-spacing: .2em; - margin-bottom: 3em; -} -body, .form-control, .form-control:focus { - background-color: #097e74; -} -label, h1 { - color: #582985; -} -h1 { - font-size: 3.5em; - margin: .5em 0; - text-shadow: .1em .1em #d8b212; - text-align: center; -} -.form-control,.form-control:focus { - color: #fff; - border: 2px solid #582985; -} -.btn { - width: 30ch; - max-width: 100%; - letter-spacing: .2em; - display: block; - position: relative; - top: 2em; -} -.mensagem { - color: #582985; - text-align: center -} -.container { - margin-bottom: 2em; -} -@media screen and (min-width: 340px) { - .btn { - margin: 0 0 0 auto; - } -} -@media screen and (min-width: 500px) { - h1 { - font-size: 5em; - margin: .5em auto; - } -} -@media screen and (min-width: 768px) { - .form-group { - padding-bottom: 1em; - } -} -@media screen and (min-width: 1200px) { - label { - text-align: right; - position: relative; - top: .5em; - } -} diff --git a/merepresenta/static/css/merepresenta/convine.css b/merepresenta/static/css/merepresenta/convine.css deleted file mode 100644 index 8b998bb5..00000000 --- a/merepresenta/static/css/merepresenta/convine.css +++ /dev/null @@ -1,81 +0,0 @@ -#sadface { - max-width: 270px; - width: 50%; - margin: 0 auto; - display: block; - margin-bottom: 3em; -} -body { - background-color: gray; - background-image: url('/assets/FE4.png'); -} -div.cities { - background-color: white; - border-radius: .5em; - padding: 2em; -} -div.cities>div { - margin-top: 1em; -} -h2, p { - color: #d8b212; - line-height: 1.3em; -} -h2 { - text-transform: uppercase; - font-size: 1em; - font-weight: bolder; -} -.conteudo { - width: 90%; - margin: 0 auto; -} -.btn { - margin: 3em auto 0 auto; - display: table; - text-transform: uppercase; -} -.mensagem>p { - color: #582985; - letter-spacing: .17em; -} -@media screen and (min-width: 400px) { - main { - font-size: 1.3rem; - } -} -@media screen and (min-width: 800px) { - .conteudo { - position: absolute; - top: 80px; - left: 0; - right: 0; - bottom: 0; - min-width: 400px; - } - .left { - position: absolute; - top: 0; - left: 0; - right: 60%; - bottom: 0; - } - .right { - position: absolute; - top: 0; - left: 40%; - right: 0; - bottom: 0; - } - .right>div, #sadface { - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - display: inline-table; - margin: auto; - } - #sadface { - } -} diff --git a/merepresenta/static/css/merepresenta/index.css b/merepresenta/static/css/merepresenta/index.css deleted file mode 100644 index 7a4a2aec..00000000 --- a/merepresenta/static/css/merepresenta/index.css +++ /dev/null @@ -1,194 +0,0 @@ -body { - font-size: 13px; - background-color: #552e76; - color: #fff; - background-image: url('/static/img/merepresenta/FE1.png'); - background-size: cover; -} -.container { - display: relative; -} -img.logo { - max-width: 100%; -} -header { - padding: 1em; - border-bottom: 1px solid #7e5c9e; -} -.content>h2 { - display: block; - font-size: 1.2em; - font-weight: bolder; - padding: .5em 0 .5em 0; -} -.content { - color: #fff; - padding: 0 2em 0 1em; -} -.botao { - display: block; - width: 38ch; - max-width: 100%; - margin: 1.5em auto; -} -.botao span { - width: 100%; - text-align: center; - display: block; -} -.btn { - color: #000; - text-transform: uppercase; - width: 38ch; - max-width: 100%; - white-space: normal; -} -header { - border: none; -} -.link, .link:hover { - color: transparent; - position: relative; - margin-right: .5em; -} -.link.about:hover { - color: #fff; - text-decoration: none; -} -.link.about { - color: #fff; - background-size: 2em; - background-color: rgba(211, 211, 211, 0.35); - background-repeat: no-repeat; - height: 4em; - display: inline-block; - background-position: 1em; - padding: 1.3em 1em .7em 1em; - text-transform: uppercase; -} -.link.facebook:before, .link.contact:before { - content: ""; - background-size: 2em; - background-color: rgba(211, 211, 211, 0.35); - background-repeat: no-repeat; - height: 4em; - width: 4em; - display: inline-block; - position: absolute; - background-position: 1em; -} -.link.contact:before { - background-image: url('/static/img/merepresenta/envelope.svg'); -} -.link.facebook:before { - background-image: url('/static/img/merepresenta/face.svg'); -} - -.links { - position: absolute; - top: 0; -} -.aviso { - top: 6em; - left: 10%; - width: 100%; - padding: 1.5em; - background-color: rgba(200,200,200,0.8); - border-radius: .5em; - border: 1px solid white; - font-weight: bolder; - letter-spacing: .1em; - margin-bottom: 2em; -} -.aviso input, .aviso label { - display: none; -} -.aviso span { - color: red; -} -@media screen and (min-width: 360px) { - body { - font-size: 1rem; - } -} -@media screen and (min-width: 600px) { - .link, .link:hover { - color: transparent; - position: relative; - margin-right: 1.5em; - } - .link.facebook { - margin-right: .665em; - } - .link.about { - padding: 5.3em 1em 2.7em 1em; - margin-right: 0; - } - .link.contact:before, .link.facebook:before { - background-size: 3em; - height: 8em; - width: 5em; - border-radius: 0; - } - .link.contact:before { - background-position: 1em 5em; - } - .link.facebook:before { - background-position: 1em 4.5em; - } -} -@media screen and (min-width: 991px) { - body { - background-repeat: no-repeat; - } - main { - } - img.logo { - display: none; - } - .content { - float: right; - width: 51%; - margin: 15% 0; - } - .container { - background-image: url("/static/img/merepresenta/01.png"); - background-size: 60%; - background-repeat: no-repeat; - background-position: -24% 60%; - } - .links { - left: 10%; - } - nav a { - margin-right: 2em; - } - .aviso { - background-color: rgba(141, 114, 164,.8); - position: absolute; - left: 50%; - width: 43%; - top: 4%; - padding: 1em; - max-width: 519px; - } - .aviso span { - color: #d8b212; - } -} -@media screen and (min-width: 1200px) { - .sistema { - display: flex; - justify-content: space-between; - } - .botao, .voluntario { - width: 100%; - } - .sistema .botao { - width: 26ch; - margin: 0; - } -} -.no-background { - background-image: none; -} \ No newline at end of file diff --git a/merepresenta/static/css/merepresenta/jquery-ui.css b/merepresenta/static/css/merepresenta/jquery-ui.css deleted file mode 100644 index ac4712ad..00000000 --- a/merepresenta/static/css/merepresenta/jquery-ui.css +++ /dev/null @@ -1,583 +0,0 @@ -/*! jQuery UI - v1.12.0 - 2016-08-19 -* http://jqueryui.com -* Includes: core.css, autocomplete.css, menu.css, theme.css -* To view and modify this theme, visit http://jqueryui.com/themeroller/?scope=&folderName=base&cornerRadiusShadow=8px&offsetLeftShadow=0px&offsetTopShadow=0px&thicknessShadow=5px&opacityShadow=30&bgImgOpacityShadow=0&bgTextureShadow=flat&bgColorShadow=666666&opacityOverlay=30&bgImgOpacityOverlay=0&bgTextureOverlay=flat&bgColorOverlay=aaaaaa&iconColorError=cc0000&fcError=5f3f3f&borderColorError=f1a899&bgTextureError=flat&bgColorError=fddfdf&iconColorHighlight=777620&fcHighlight=777620&borderColorHighlight=dad55e&bgTextureHighlight=flat&bgColorHighlight=fffa90&iconColorActive=ffffff&fcActive=ffffff&borderColorActive=003eff&bgTextureActive=flat&bgColorActive=007fff&iconColorHover=555555&fcHover=2b2b2b&borderColorHover=cccccc&bgTextureHover=flat&bgColorHover=ededed&iconColorDefault=777777&fcDefault=454545&borderColorDefault=c5c5c5&bgTextureDefault=flat&bgColorDefault=f6f6f6&iconColorContent=444444&fcContent=333333&borderColorContent=dddddd&bgTextureContent=flat&bgColorContent=ffffff&iconColorHeader=444444&fcHeader=333333&borderColorHeader=dddddd&bgTextureHeader=flat&bgColorHeader=e9e9e9&cornerRadius=3px&fwDefault=normal&fsDefault=1em&ffDefault=Arial%2CHelvetica%2Csans-serif -* Copyright jQuery Foundation and other contributors; Licensed MIT */ - -/* Layout helpers -----------------------------------*/ -.ui-helper-hidden { - display: none; -} -.ui-helper-hidden-accessible { - border: 0; - clip: rect(0 0 0 0); - height: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - width: 1px; -} -.ui-helper-reset { - margin: 0; - padding: 0; - border: 0; - outline: 0; - line-height: 1.3; - text-decoration: none; - font-size: 100%; - list-style: none; -} -.ui-helper-clearfix:before, -.ui-helper-clearfix:after { - content: ""; - display: table; - border-collapse: collapse; -} -.ui-helper-clearfix:after { - clear: both; -} -.ui-helper-zfix { - width: 100%; - height: 100%; - top: 0; - left: 0; - position: absolute; - opacity: 0; - filter:Alpha(Opacity=0); /* support: IE8 */ -} - -.ui-front { - z-index: 100; -} - - -/* Interaction Cues -----------------------------------*/ -.ui-state-disabled { - cursor: default !important; - pointer-events: none; -} - - -/* Icons -----------------------------------*/ -.ui-icon { - display: inline-block; - vertical-align: middle; - margin-top: -.25em; - position: relative; - text-indent: -99999px; - overflow: hidden; - background-repeat: no-repeat; -} - -.ui-widget-icon-block { - left: 50%; - margin-left: -8px; - display: block; -} - -/* Misc visuals -----------------------------------*/ - -/* Overlays */ -.ui-widget-overlay { - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; -} -.ui-autocomplete { - position: absolute; - top: 0; - left: 0; - cursor: default; -} -.ui-menu { - list-style: none; - padding: 0; - margin: 0; - display: block; - outline: 0; -} -.ui-menu .ui-menu { - position: absolute; -} -.ui-menu .ui-menu-item { - margin: 0; - cursor: pointer; - /* support: IE10, see #8844 */ - list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"); -} -.ui-menu .ui-menu-item-wrapper { - position: relative; - padding: 3px 1em 3px .4em; -} -.ui-menu .ui-menu-divider { - margin: 5px 0; - height: 0; - font-size: 0; - line-height: 0; - border-width: 1px 0 0 0; -} -.ui-menu .ui-state-focus, -.ui-menu .ui-state-active { - margin: -1px; -} - -/* icon support */ -.ui-menu-icons { - position: relative; -} -.ui-menu-icons .ui-menu-item-wrapper { - padding-left: 2em; -} - -/* left-aligned */ -.ui-menu .ui-icon { - position: absolute; - top: 0; - bottom: 0; - left: .2em; - margin: auto 0; -} - -/* right-aligned */ -.ui-menu .ui-menu-icon { - left: auto; - right: 0; -} - -/* Component containers -----------------------------------*/ -.ui-widget { - font-family: Arial,Helvetica,sans-serif; - font-size: 1em; -} -.ui-widget .ui-widget { - font-size: 1em; -} -.ui-widget input, -.ui-widget select, -.ui-widget textarea, -.ui-widget button { - font-family: Arial,Helvetica,sans-serif; - font-size: 1em; -} -.ui-widget.ui-widget-content { - border: 1px solid #c5c5c5; -} -.ui-widget-content { - border: 1px solid #dddddd; - background: #ffffff; - color: #333333; -} -.ui-widget-content a { - color: #333333; -} -.ui-widget-header { - border: 1px solid #dddddd; - background: #e9e9e9; - color: #333333; - font-weight: bold; -} -.ui-widget-header a { - color: #333333; -} - -/* Interaction states -----------------------------------*/ -.ui-state-default, -.ui-widget-content .ui-state-default, -.ui-widget-header .ui-state-default, -.ui-button, - -/* We use html here because we need a greater specificity to make sure disabled -works properly when clicked or hovered */ -html .ui-button.ui-state-disabled:hover, -html .ui-button.ui-state-disabled:active { - border: 1px solid #c5c5c5; - background: #f6f6f6; - font-weight: normal; - color: #454545; -} -.ui-state-default a, -.ui-state-default a:link, -.ui-state-default a:visited, -a.ui-button, -a:link.ui-button, -a:visited.ui-button, -.ui-button { - color: #454545; - text-decoration: none; -} -.ui-state-hover, -.ui-widget-content .ui-state-hover, -.ui-widget-header .ui-state-hover, -.ui-state-focus, -.ui-widget-content .ui-state-focus, -.ui-widget-header .ui-state-focus, -.ui-button:hover, -.ui-button:focus { - border: 1px solid #cccccc; - background: #ededed; - font-weight: normal; - color: #2b2b2b; -} -.ui-state-hover a, -.ui-state-hover a:hover, -.ui-state-hover a:link, -.ui-state-hover a:visited, -.ui-state-focus a, -.ui-state-focus a:hover, -.ui-state-focus a:link, -.ui-state-focus a:visited, -a.ui-button:hover, -a.ui-button:focus { - color: #2b2b2b; - text-decoration: none; -} - -.ui-visual-focus { - box-shadow: 0 0 3px 1px rgb(94, 158, 214); -} -.ui-state-active, -.ui-widget-content .ui-state-active, -.ui-widget-header .ui-state-active, -a.ui-button:active, -.ui-button:active, -.ui-button.ui-state-active:hover { - border: 1px solid #003eff; - background: #007fff; - font-weight: normal; - color: #ffffff; -} -.ui-icon-background, -.ui-state-active .ui-icon-background { - border: #003eff; - background-color: #ffffff; -} -.ui-state-active a, -.ui-state-active a:link, -.ui-state-active a:visited { - color: #ffffff; - text-decoration: none; -} - -/* Interaction Cues -----------------------------------*/ -.ui-state-highlight, -.ui-widget-content .ui-state-highlight, -.ui-widget-header .ui-state-highlight { - border: 1px solid #dad55e; - background: #fffa90; - color: #777620; -} -.ui-state-checked { - border: 1px solid #dad55e; - background: #fffa90; -} -.ui-state-highlight a, -.ui-widget-content .ui-state-highlight a, -.ui-widget-header .ui-state-highlight a { - color: #777620; -} -.ui-state-error, -.ui-widget-content .ui-state-error, -.ui-widget-header .ui-state-error { - border: 1px solid #f1a899; - background: #fddfdf; - color: #5f3f3f; -} -.ui-state-error a, -.ui-widget-content .ui-state-error a, -.ui-widget-header .ui-state-error a { - color: #5f3f3f; -} -.ui-state-error-text, -.ui-widget-content .ui-state-error-text, -.ui-widget-header .ui-state-error-text { - color: #5f3f3f; -} -.ui-priority-primary, -.ui-widget-content .ui-priority-primary, -.ui-widget-header .ui-priority-primary { - font-weight: bold; -} -.ui-priority-secondary, -.ui-widget-content .ui-priority-secondary, -.ui-widget-header .ui-priority-secondary { - opacity: .7; - filter:Alpha(Opacity=70); /* support: IE8 */ - font-weight: normal; -} -.ui-state-disabled, -.ui-widget-content .ui-state-disabled, -.ui-widget-header .ui-state-disabled { - opacity: .35; - filter:Alpha(Opacity=35); /* support: IE8 */ - background-image: none; -} -.ui-state-disabled .ui-icon { - filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */ -} - -/* Icons -----------------------------------*/ - -/* states and images */ -.ui-icon { - width: 16px; - height: 16px; -} -.ui-icon, -.ui-widget-content .ui-icon { - background-image: url("/assets/ui-icons_444444_256x240.png"); -} -.ui-widget-header .ui-icon { - background-image: url("/assets/ui-icons_444444_256x240.png"); -} -.ui-button .ui-icon { - background-image: url("/assets/ui-icons_777777_256x240.png"); -} -.ui-state-hover .ui-icon, -.ui-state-focus .ui-icon, -.ui-button:hover .ui-icon, -.ui-button:focus .ui-icon, -.ui-state-default .ui-icon { - background-image: url("/assets/ui-icons_555555_256x240.png"); -} -.ui-state-active .ui-icon, -.ui-button:active .ui-icon { - background-image: url("/assets/ui-icons_ffffff_256x240.png"); -} -.ui-state-highlight .ui-icon, -.ui-button .ui-state-highlight.ui-icon { - background-image: url("/assets/ui-icons_777620_256x240.png"); -} -.ui-state-error .ui-icon, -.ui-state-error-text .ui-icon { - background-image: url("/assets/ui-icons_cc0000_256x240.png"); -} - -/* positioning */ -.ui-icon-blank { background-position: 16px 16px; } -.ui-icon-caret-1-n { background-position: 0 0; } -.ui-icon-caret-1-ne { background-position: -16px 0; } -.ui-icon-caret-1-e { background-position: -32px 0; } -.ui-icon-caret-1-se { background-position: -48px 0; } -.ui-icon-caret-1-s { background-position: -65px 0; } -.ui-icon-caret-1-sw { background-position: -80px 0; } -.ui-icon-caret-1-w { background-position: -96px 0; } -.ui-icon-caret-1-nw { background-position: -112px 0; } -.ui-icon-caret-2-n-s { background-position: -128px 0; } -.ui-icon-caret-2-e-w { background-position: -144px 0; } -.ui-icon-triangle-1-n { background-position: 0 -16px; } -.ui-icon-triangle-1-ne { background-position: -16px -16px; } -.ui-icon-triangle-1-e { background-position: -32px -16px; } -.ui-icon-triangle-1-se { background-position: -48px -16px; } -.ui-icon-triangle-1-s { background-position: -65px -16px; } -.ui-icon-triangle-1-sw { background-position: -80px -16px; } -.ui-icon-triangle-1-w { background-position: -96px -16px; } -.ui-icon-triangle-1-nw { background-position: -112px -16px; } -.ui-icon-triangle-2-n-s { background-position: -128px -16px; } -.ui-icon-triangle-2-e-w { background-position: -144px -16px; } -.ui-icon-arrow-1-n { background-position: 0 -32px; } -.ui-icon-arrow-1-ne { background-position: -16px -32px; } -.ui-icon-arrow-1-e { background-position: -32px -32px; } -.ui-icon-arrow-1-se { background-position: -48px -32px; } -.ui-icon-arrow-1-s { background-position: -65px -32px; } -.ui-icon-arrow-1-sw { background-position: -80px -32px; } -.ui-icon-arrow-1-w { background-position: -96px -32px; } -.ui-icon-arrow-1-nw { background-position: -112px -32px; } -.ui-icon-arrow-2-n-s { background-position: -128px -32px; } -.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } -.ui-icon-arrow-2-e-w { background-position: -160px -32px; } -.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } -.ui-icon-arrowstop-1-n { background-position: -192px -32px; } -.ui-icon-arrowstop-1-e { background-position: -208px -32px; } -.ui-icon-arrowstop-1-s { background-position: -224px -32px; } -.ui-icon-arrowstop-1-w { background-position: -240px -32px; } -.ui-icon-arrowthick-1-n { background-position: 1px -48px; } -.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } -.ui-icon-arrowthick-1-e { background-position: -32px -48px; } -.ui-icon-arrowthick-1-se { background-position: -48px -48px; } -.ui-icon-arrowthick-1-s { background-position: -64px -48px; } -.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } -.ui-icon-arrowthick-1-w { background-position: -96px -48px; } -.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } -.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } -.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } -.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } -.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } -.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } -.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } -.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } -.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } -.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } -.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } -.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } -.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } -.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } -.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } -.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } -.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } -.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } -.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } -.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } -.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } -.ui-icon-arrow-4 { background-position: 0 -80px; } -.ui-icon-arrow-4-diag { background-position: -16px -80px; } -.ui-icon-extlink { background-position: -32px -80px; } -.ui-icon-newwin { background-position: -48px -80px; } -.ui-icon-refresh { background-position: -64px -80px; } -.ui-icon-shuffle { background-position: -80px -80px; } -.ui-icon-transfer-e-w { background-position: -96px -80px; } -.ui-icon-transferthick-e-w { background-position: -112px -80px; } -.ui-icon-folder-collapsed { background-position: 0 -96px; } -.ui-icon-folder-open { background-position: -16px -96px; } -.ui-icon-document { background-position: -32px -96px; } -.ui-icon-document-b { background-position: -48px -96px; } -.ui-icon-note { background-position: -64px -96px; } -.ui-icon-mail-closed { background-position: -80px -96px; } -.ui-icon-mail-open { background-position: -96px -96px; } -.ui-icon-suitcase { background-position: -112px -96px; } -.ui-icon-comment { background-position: -128px -96px; } -.ui-icon-person { background-position: -144px -96px; } -.ui-icon-print { background-position: -160px -96px; } -.ui-icon-trash { background-position: -176px -96px; } -.ui-icon-locked { background-position: -192px -96px; } -.ui-icon-unlocked { background-position: -208px -96px; } -.ui-icon-bookmark { background-position: -224px -96px; } -.ui-icon-tag { background-position: -240px -96px; } -.ui-icon-home { background-position: 0 -112px; } -.ui-icon-flag { background-position: -16px -112px; } -.ui-icon-calendar { background-position: -32px -112px; } -.ui-icon-cart { background-position: -48px -112px; } -.ui-icon-pencil { background-position: -64px -112px; } -.ui-icon-clock { background-position: -80px -112px; } -.ui-icon-disk { background-position: -96px -112px; } -.ui-icon-calculator { background-position: -112px -112px; } -.ui-icon-zoomin { background-position: -128px -112px; } -.ui-icon-zoomout { background-position: -144px -112px; } -.ui-icon-search { background-position: -160px -112px; } -.ui-icon-wrench { background-position: -176px -112px; } -.ui-icon-gear { background-position: -192px -112px; } -.ui-icon-heart { background-position: -208px -112px; } -.ui-icon-star { background-position: -224px -112px; } -.ui-icon-link { background-position: -240px -112px; } -.ui-icon-cancel { background-position: 0 -128px; } -.ui-icon-plus { background-position: -16px -128px; } -.ui-icon-plusthick { background-position: -32px -128px; } -.ui-icon-minus { background-position: -48px -128px; } -.ui-icon-minusthick { background-position: -64px -128px; } -.ui-icon-close { background-position: -80px -128px; } -.ui-icon-closethick { background-position: -96px -128px; } -.ui-icon-key { background-position: -112px -128px; } -.ui-icon-lightbulb { background-position: -128px -128px; } -.ui-icon-scissors { background-position: -144px -128px; } -.ui-icon-clipboard { background-position: -160px -128px; } -.ui-icon-copy { background-position: -176px -128px; } -.ui-icon-contact { background-position: -192px -128px; } -.ui-icon-image { background-position: -208px -128px; } -.ui-icon-video { background-position: -224px -128px; } -.ui-icon-script { background-position: -240px -128px; } -.ui-icon-alert { background-position: 0 -144px; } -.ui-icon-info { background-position: -16px -144px; } -.ui-icon-notice { background-position: -32px -144px; } -.ui-icon-help { background-position: -48px -144px; } -.ui-icon-check { background-position: -64px -144px; } -.ui-icon-bullet { background-position: -80px -144px; } -.ui-icon-radio-on { background-position: -96px -144px; } -.ui-icon-radio-off { background-position: -112px -144px; } -.ui-icon-pin-w { background-position: -128px -144px; } -.ui-icon-pin-s { background-position: -144px -144px; } -.ui-icon-play { background-position: 0 -160px; } -.ui-icon-pause { background-position: -16px -160px; } -.ui-icon-seek-next { background-position: -32px -160px; } -.ui-icon-seek-prev { background-position: -48px -160px; } -.ui-icon-seek-end { background-position: -64px -160px; } -.ui-icon-seek-start { background-position: -80px -160px; } -/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ -.ui-icon-seek-first { background-position: -80px -160px; } -.ui-icon-stop { background-position: -96px -160px; } -.ui-icon-eject { background-position: -112px -160px; } -.ui-icon-volume-off { background-position: -128px -160px; } -.ui-icon-volume-on { background-position: -144px -160px; } -.ui-icon-power { background-position: 0 -176px; } -.ui-icon-signal-diag { background-position: -16px -176px; } -.ui-icon-signal { background-position: -32px -176px; } -.ui-icon-battery-0 { background-position: -48px -176px; } -.ui-icon-battery-1 { background-position: -64px -176px; } -.ui-icon-battery-2 { background-position: -80px -176px; } -.ui-icon-battery-3 { background-position: -96px -176px; } -.ui-icon-circle-plus { background-position: 0 -192px; } -.ui-icon-circle-minus { background-position: -16px -192px; } -.ui-icon-circle-close { background-position: -32px -192px; } -.ui-icon-circle-triangle-e { background-position: -48px -192px; } -.ui-icon-circle-triangle-s { background-position: -64px -192px; } -.ui-icon-circle-triangle-w { background-position: -80px -192px; } -.ui-icon-circle-triangle-n { background-position: -96px -192px; } -.ui-icon-circle-arrow-e { background-position: -112px -192px; } -.ui-icon-circle-arrow-s { background-position: -128px -192px; } -.ui-icon-circle-arrow-w { background-position: -144px -192px; } -.ui-icon-circle-arrow-n { background-position: -160px -192px; } -.ui-icon-circle-zoomin { background-position: -176px -192px; } -.ui-icon-circle-zoomout { background-position: -192px -192px; } -.ui-icon-circle-check { background-position: -208px -192px; } -.ui-icon-circlesmall-plus { background-position: 0 -208px; } -.ui-icon-circlesmall-minus { background-position: -16px -208px; } -.ui-icon-circlesmall-close { background-position: -32px -208px; } -.ui-icon-squaresmall-plus { background-position: -48px -208px; } -.ui-icon-squaresmall-minus { background-position: -64px -208px; } -.ui-icon-squaresmall-close { background-position: -80px -208px; } -.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } -.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } -.ui-icon-grip-solid-vertical { background-position: -32px -224px; } -.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } -.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } -.ui-icon-grip-diagonal-se { background-position: -80px -224px; } - - -/* Misc visuals -----------------------------------*/ - -/* Corner radius */ -.ui-corner-all, -.ui-corner-top, -.ui-corner-left, -.ui-corner-tl { - border-top-left-radius: 3px; -} -.ui-corner-all, -.ui-corner-top, -.ui-corner-right, -.ui-corner-tr { - border-top-right-radius: 3px; -} -.ui-corner-all, -.ui-corner-bottom, -.ui-corner-left, -.ui-corner-bl { - border-bottom-left-radius: 3px; -} -.ui-corner-all, -.ui-corner-bottom, -.ui-corner-right, -.ui-corner-br { - border-bottom-right-radius: 3px; -} - -/* Overlays */ -.ui-widget-overlay { - background: #aaaaaa; - opacity: .3; - filter: Alpha(Opacity=30); /* support: IE8 */ -} -.ui-widget-shadow { - -webkit-box-shadow: 0px 0px 5px #666666; - box-shadow: 0px 0px 5px #666666; -} diff --git a/merepresenta/static/css/merepresenta/jquery-ui.structure.css b/merepresenta/static/css/merepresenta/jquery-ui.structure.css deleted file mode 100644 index 713af6e3..00000000 --- a/merepresenta/static/css/merepresenta/jquery-ui.structure.css +++ /dev/null @@ -1,156 +0,0 @@ -/*! - * jQuery UI CSS Framework 1.12.0 - * http://jqueryui.com - * - * Copyright jQuery Foundation and other contributors - * Released under the MIT license. - * http://jquery.org/license - * - * http://api.jqueryui.com/category/theming/ - */ -/* Layout helpers -----------------------------------*/ -.ui-helper-hidden { - display: none; -} -.ui-helper-hidden-accessible { - border: 0; - clip: rect(0 0 0 0); - height: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - width: 1px; -} -.ui-helper-reset { - margin: 0; - padding: 0; - border: 0; - outline: 0; - line-height: 1.3; - text-decoration: none; - font-size: 100%; - list-style: none; -} -.ui-helper-clearfix:before, -.ui-helper-clearfix:after { - content: ""; - display: table; - border-collapse: collapse; -} -.ui-helper-clearfix:after { - clear: both; -} -.ui-helper-zfix { - width: 100%; - height: 100%; - top: 0; - left: 0; - position: absolute; - opacity: 0; - filter:Alpha(Opacity=0); /* support: IE8 */ -} - -.ui-front { - z-index: 100; -} - - -/* Interaction Cues -----------------------------------*/ -.ui-state-disabled { - cursor: default !important; - pointer-events: none; -} - - -/* Icons -----------------------------------*/ -.ui-icon { - display: inline-block; - vertical-align: middle; - margin-top: -.25em; - position: relative; - text-indent: -99999px; - overflow: hidden; - background-repeat: no-repeat; -} - -.ui-widget-icon-block { - left: 50%; - margin-left: -8px; - display: block; -} - -/* Misc visuals -----------------------------------*/ - -/* Overlays */ -.ui-widget-overlay { - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; -} -.ui-autocomplete { - position: absolute; - top: 0; - left: 0; - cursor: default; -} -.ui-menu { - list-style: none; - padding: 0; - margin: 0; - display: block; - outline: 0; -} -.ui-menu .ui-menu { - position: absolute; -} -.ui-menu .ui-menu-item { - margin: 0; - cursor: pointer; - /* support: IE10, see #8844 */ - list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"); -} -.ui-menu .ui-menu-item-wrapper { - position: relative; - padding: 3px 1em 3px .4em; -} -.ui-menu .ui-menu-divider { - margin: 5px 0; - height: 0; - font-size: 0; - line-height: 0; - border-width: 1px 0 0 0; -} -.ui-menu .ui-state-focus, -.ui-menu .ui-state-active { - margin: -1px; -} - -/* icon support */ -.ui-menu-icons { - position: relative; -} -.ui-menu-icons .ui-menu-item-wrapper { - padding-left: 2em; -} - -/* left-aligned */ -.ui-menu .ui-icon { - position: absolute; - top: 0; - bottom: 0; - left: .2em; - margin: auto 0; -} - -/* right-aligned */ -.ui-menu .ui-menu-icon { - left: auto; - right: 0; -} diff --git a/merepresenta/static/css/merepresenta/jquery-ui.theme.css b/merepresenta/static/css/merepresenta/jquery-ui.theme.css deleted file mode 100644 index 9fa46402..00000000 --- a/merepresenta/static/css/merepresenta/jquery-ui.theme.css +++ /dev/null @@ -1,444 +0,0 @@ -/*! - * jQuery UI CSS Framework 1.12.0 - * http://jqueryui.com - * - * Copyright jQuery Foundation and other contributors - * Released under the MIT license. - * http://jquery.org/license - * - * http://api.jqueryui.com/category/theming/ - * - * To view and modify this theme, visit http://jqueryui.com/themeroller/?scope=&folderName=base&cornerRadiusShadow=8px&offsetLeftShadow=0px&offsetTopShadow=0px&thicknessShadow=5px&opacityShadow=30&bgImgOpacityShadow=0&bgTextureShadow=flat&bgColorShadow=666666&opacityOverlay=30&bgImgOpacityOverlay=0&bgTextureOverlay=flat&bgColorOverlay=aaaaaa&iconColorError=cc0000&fcError=5f3f3f&borderColorError=f1a899&bgTextureError=flat&bgColorError=fddfdf&iconColorHighlight=777620&fcHighlight=777620&borderColorHighlight=dad55e&bgTextureHighlight=flat&bgColorHighlight=fffa90&iconColorActive=ffffff&fcActive=ffffff&borderColorActive=003eff&bgTextureActive=flat&bgColorActive=007fff&iconColorHover=555555&fcHover=2b2b2b&borderColorHover=cccccc&bgTextureHover=flat&bgColorHover=ededed&iconColorDefault=777777&fcDefault=454545&borderColorDefault=c5c5c5&bgTextureDefault=flat&bgColorDefault=f6f6f6&iconColorContent=444444&fcContent=333333&borderColorContent=dddddd&bgTextureContent=flat&bgColorContent=ffffff&iconColorHeader=444444&fcHeader=333333&borderColorHeader=dddddd&bgTextureHeader=flat&bgColorHeader=e9e9e9&cornerRadius=3px&fwDefault=normal&fsDefault=1em&ffDefault=Arial%2CHelvetica%2Csans-serif - */ - - -/* Component containers -----------------------------------*/ -.ui-widget { - font-family: Arial,Helvetica,sans-serif; - font-size: 1em; -} -.ui-widget .ui-widget { - font-size: 1em; -} -.ui-widget input, -.ui-widget select, -.ui-widget textarea, -.ui-widget button { - font-family: Arial,Helvetica,sans-serif; - font-size: 1em; -} -.ui-widget.ui-widget-content { - border: 1px solid #c5c5c5; -} -.ui-widget-content { - border: 1px solid #dddddd; - background: #ffffff; - color: #333333; -} -.ui-widget-content a { - color: #333333; -} -.ui-widget-header { - border: 1px solid #dddddd; - background: #e9e9e9; - color: #333333; - font-weight: bold; -} -.ui-widget-header a { - color: #333333; -} - -/* Interaction states -----------------------------------*/ -.ui-state-default, -.ui-widget-content .ui-state-default, -.ui-widget-header .ui-state-default, -.ui-button, - -/* We use html here because we need a greater specificity to make sure disabled -works properly when clicked or hovered */ -html .ui-button.ui-state-disabled:hover, -html .ui-button.ui-state-disabled:active { - border: 1px solid #c5c5c5; - background: #f6f6f6; - font-weight: normal; - color: #454545; -} -.ui-state-default a, -.ui-state-default a:link, -.ui-state-default a:visited, -a.ui-button, -a:link.ui-button, -a:visited.ui-button, -.ui-button { - color: #454545; - text-decoration: none; -} -.ui-state-hover, -.ui-widget-content .ui-state-hover, -.ui-widget-header .ui-state-hover, -.ui-state-focus, -.ui-widget-content .ui-state-focus, -.ui-widget-header .ui-state-focus, -.ui-button:hover, -.ui-button:focus { - border: 1px solid #cccccc; - background: #ededed; - font-weight: normal; - color: #2b2b2b; -} -.ui-state-hover a, -.ui-state-hover a:hover, -.ui-state-hover a:link, -.ui-state-hover a:visited, -.ui-state-focus a, -.ui-state-focus a:hover, -.ui-state-focus a:link, -.ui-state-focus a:visited, -a.ui-button:hover, -a.ui-button:focus { - color: #2b2b2b; - text-decoration: none; -} - -.ui-visual-focus { - box-shadow: 0 0 3px 1px rgb(94, 158, 214); -} -.ui-state-active, -.ui-widget-content .ui-state-active, -.ui-widget-header .ui-state-active, -a.ui-button:active, -.ui-button:active, -.ui-button.ui-state-active:hover { - border: 1px solid #003eff; - background: #007fff; - font-weight: normal; - color: #ffffff; -} -.ui-icon-background, -.ui-state-active .ui-icon-background { - border: #003eff; - background-color: #ffffff; -} -.ui-state-active a, -.ui-state-active a:link, -.ui-state-active a:visited { - color: #ffffff; - text-decoration: none; -} - -/* Interaction Cues -----------------------------------*/ -.ui-state-highlight, -.ui-widget-content .ui-state-highlight, -.ui-widget-header .ui-state-highlight { - border: 1px solid #dad55e; - background: #fffa90; - color: #777620; -} -.ui-state-checked { - border: 1px solid #dad55e; - background: #fffa90; -} -.ui-state-highlight a, -.ui-widget-content .ui-state-highlight a, -.ui-widget-header .ui-state-highlight a { - color: #777620; -} -.ui-state-error, -.ui-widget-content .ui-state-error, -.ui-widget-header .ui-state-error { - border: 1px solid #f1a899; - background: #fddfdf; - color: #5f3f3f; -} -.ui-state-error a, -.ui-widget-content .ui-state-error a, -.ui-widget-header .ui-state-error a { - color: #5f3f3f; -} -.ui-state-error-text, -.ui-widget-content .ui-state-error-text, -.ui-widget-header .ui-state-error-text { - color: #5f3f3f; -} -.ui-priority-primary, -.ui-widget-content .ui-priority-primary, -.ui-widget-header .ui-priority-primary { - font-weight: bold; -} -.ui-priority-secondary, -.ui-widget-content .ui-priority-secondary, -.ui-widget-header .ui-priority-secondary { - opacity: .7; - filter:Alpha(Opacity=70); /* support: IE8 */ - font-weight: normal; -} -.ui-state-disabled, -.ui-widget-content .ui-state-disabled, -.ui-widget-header .ui-state-disabled { - opacity: .35; - filter:Alpha(Opacity=35); /* support: IE8 */ - background-image: none; -} -.ui-state-disabled .ui-icon { - filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */ -} - -/* Icons -----------------------------------*/ - -/* states and images */ -.ui-icon { - width: 16px; - height: 16px; -} -.ui-icon, -.ui-widget-content .ui-icon { - background-image: url("/assets/ui-icons_444444_256x240.png"); -} -.ui-widget-header .ui-icon { - background-image: url("/assets/ui-icons_444444_256x240.png"); -} -.ui-button .ui-icon { - background-image: url("/assets/ui-icons_777777_256x240.png"); -} -.ui-state-hover .ui-icon, -.ui-state-focus .ui-icon, -.ui-button:hover .ui-icon, -.ui-button:focus .ui-icon, -.ui-state-default .ui-icon { - background-image: url("/assets/ui-icons_555555_256x240.png"); -} -.ui-state-active .ui-icon, -.ui-button:active .ui-icon { - background-image: url("/assets/ui-icons_ffffff_256x240.png"); -} -.ui-state-highlight .ui-icon, -.ui-button .ui-state-highlight.ui-icon { - background-image: url("/assets/ui-icons_777620_256x240.png"); -} -.ui-state-error .ui-icon, -.ui-state-error-text .ui-icon { - background-image: url("/assets/ui-icons_cc0000_256x240.png"); -} - -/* positioning */ -.ui-icon-blank { background-position: 16px 16px; } -.ui-icon-caret-1-n { background-position: 0 0; } -.ui-icon-caret-1-ne { background-position: -16px 0; } -.ui-icon-caret-1-e { background-position: -32px 0; } -.ui-icon-caret-1-se { background-position: -48px 0; } -.ui-icon-caret-1-s { background-position: -65px 0; } -.ui-icon-caret-1-sw { background-position: -80px 0; } -.ui-icon-caret-1-w { background-position: -96px 0; } -.ui-icon-caret-1-nw { background-position: -112px 0; } -.ui-icon-caret-2-n-s { background-position: -128px 0; } -.ui-icon-caret-2-e-w { background-position: -144px 0; } -.ui-icon-triangle-1-n { background-position: 0 -16px; } -.ui-icon-triangle-1-ne { background-position: -16px -16px; } -.ui-icon-triangle-1-e { background-position: -32px -16px; } -.ui-icon-triangle-1-se { background-position: -48px -16px; } -.ui-icon-triangle-1-s { background-position: -65px -16px; } -.ui-icon-triangle-1-sw { background-position: -80px -16px; } -.ui-icon-triangle-1-w { background-position: -96px -16px; } -.ui-icon-triangle-1-nw { background-position: -112px -16px; } -.ui-icon-triangle-2-n-s { background-position: -128px -16px; } -.ui-icon-triangle-2-e-w { background-position: -144px -16px; } -.ui-icon-arrow-1-n { background-position: 0 -32px; } -.ui-icon-arrow-1-ne { background-position: -16px -32px; } -.ui-icon-arrow-1-e { background-position: -32px -32px; } -.ui-icon-arrow-1-se { background-position: -48px -32px; } -.ui-icon-arrow-1-s { background-position: -65px -32px; } -.ui-icon-arrow-1-sw { background-position: -80px -32px; } -.ui-icon-arrow-1-w { background-position: -96px -32px; } -.ui-icon-arrow-1-nw { background-position: -112px -32px; } -.ui-icon-arrow-2-n-s { background-position: -128px -32px; } -.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } -.ui-icon-arrow-2-e-w { background-position: -160px -32px; } -.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } -.ui-icon-arrowstop-1-n { background-position: -192px -32px; } -.ui-icon-arrowstop-1-e { background-position: -208px -32px; } -.ui-icon-arrowstop-1-s { background-position: -224px -32px; } -.ui-icon-arrowstop-1-w { background-position: -240px -32px; } -.ui-icon-arrowthick-1-n { background-position: 1px -48px; } -.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } -.ui-icon-arrowthick-1-e { background-position: -32px -48px; } -.ui-icon-arrowthick-1-se { background-position: -48px -48px; } -.ui-icon-arrowthick-1-s { background-position: -64px -48px; } -.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } -.ui-icon-arrowthick-1-w { background-position: -96px -48px; } -.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } -.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } -.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } -.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } -.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } -.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } -.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } -.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } -.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } -.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } -.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } -.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } -.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } -.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } -.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } -.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } -.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } -.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } -.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } -.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } -.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } -.ui-icon-arrow-4 { background-position: 0 -80px; } -.ui-icon-arrow-4-diag { background-position: -16px -80px; } -.ui-icon-extlink { background-position: -32px -80px; } -.ui-icon-newwin { background-position: -48px -80px; } -.ui-icon-refresh { background-position: -64px -80px; } -.ui-icon-shuffle { background-position: -80px -80px; } -.ui-icon-transfer-e-w { background-position: -96px -80px; } -.ui-icon-transferthick-e-w { background-position: -112px -80px; } -.ui-icon-folder-collapsed { background-position: 0 -96px; } -.ui-icon-folder-open { background-position: -16px -96px; } -.ui-icon-document { background-position: -32px -96px; } -.ui-icon-document-b { background-position: -48px -96px; } -.ui-icon-note { background-position: -64px -96px; } -.ui-icon-mail-closed { background-position: -80px -96px; } -.ui-icon-mail-open { background-position: -96px -96px; } -.ui-icon-suitcase { background-position: -112px -96px; } -.ui-icon-comment { background-position: -128px -96px; } -.ui-icon-person { background-position: -144px -96px; } -.ui-icon-print { background-position: -160px -96px; } -.ui-icon-trash { background-position: -176px -96px; } -.ui-icon-locked { background-position: -192px -96px; } -.ui-icon-unlocked { background-position: -208px -96px; } -.ui-icon-bookmark { background-position: -224px -96px; } -.ui-icon-tag { background-position: -240px -96px; } -.ui-icon-home { background-position: 0 -112px; } -.ui-icon-flag { background-position: -16px -112px; } -.ui-icon-calendar { background-position: -32px -112px; } -.ui-icon-cart { background-position: -48px -112px; } -.ui-icon-pencil { background-position: -64px -112px; } -.ui-icon-clock { background-position: -80px -112px; } -.ui-icon-disk { background-position: -96px -112px; } -.ui-icon-calculator { background-position: -112px -112px; } -.ui-icon-zoomin { background-position: -128px -112px; } -.ui-icon-zoomout { background-position: -144px -112px; } -.ui-icon-search { background-position: -160px -112px; } -.ui-icon-wrench { background-position: -176px -112px; } -.ui-icon-gear { background-position: -192px -112px; } -.ui-icon-heart { background-position: -208px -112px; } -.ui-icon-star { background-position: -224px -112px; } -.ui-icon-link { background-position: -240px -112px; } -.ui-icon-cancel { background-position: 0 -128px; } -.ui-icon-plus { background-position: -16px -128px; } -.ui-icon-plusthick { background-position: -32px -128px; } -.ui-icon-minus { background-position: -48px -128px; } -.ui-icon-minusthick { background-position: -64px -128px; } -.ui-icon-close { background-position: -80px -128px; } -.ui-icon-closethick { background-position: -96px -128px; } -.ui-icon-key { background-position: -112px -128px; } -.ui-icon-lightbulb { background-position: -128px -128px; } -.ui-icon-scissors { background-position: -144px -128px; } -.ui-icon-clipboard { background-position: -160px -128px; } -.ui-icon-copy { background-position: -176px -128px; } -.ui-icon-contact { background-position: -192px -128px; } -.ui-icon-image { background-position: -208px -128px; } -.ui-icon-video { background-position: -224px -128px; } -.ui-icon-script { background-position: -240px -128px; } -.ui-icon-alert { background-position: 0 -144px; } -.ui-icon-info { background-position: -16px -144px; } -.ui-icon-notice { background-position: -32px -144px; } -.ui-icon-help { background-position: -48px -144px; } -.ui-icon-check { background-position: -64px -144px; } -.ui-icon-bullet { background-position: -80px -144px; } -.ui-icon-radio-on { background-position: -96px -144px; } -.ui-icon-radio-off { background-position: -112px -144px; } -.ui-icon-pin-w { background-position: -128px -144px; } -.ui-icon-pin-s { background-position: -144px -144px; } -.ui-icon-play { background-position: 0 -160px; } -.ui-icon-pause { background-position: -16px -160px; } -.ui-icon-seek-next { background-position: -32px -160px; } -.ui-icon-seek-prev { background-position: -48px -160px; } -.ui-icon-seek-end { background-position: -64px -160px; } -.ui-icon-seek-start { background-position: -80px -160px; } -/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ -.ui-icon-seek-first { background-position: -80px -160px; } -.ui-icon-stop { background-position: -96px -160px; } -.ui-icon-eject { background-position: -112px -160px; } -.ui-icon-volume-off { background-position: -128px -160px; } -.ui-icon-volume-on { background-position: -144px -160px; } -.ui-icon-power { background-position: 0 -176px; } -.ui-icon-signal-diag { background-position: -16px -176px; } -.ui-icon-signal { background-position: -32px -176px; } -.ui-icon-battery-0 { background-position: -48px -176px; } -.ui-icon-battery-1 { background-position: -64px -176px; } -.ui-icon-battery-2 { background-position: -80px -176px; } -.ui-icon-battery-3 { background-position: -96px -176px; } -.ui-icon-circle-plus { background-position: 0 -192px; } -.ui-icon-circle-minus { background-position: -16px -192px; } -.ui-icon-circle-close { background-position: -32px -192px; } -.ui-icon-circle-triangle-e { background-position: -48px -192px; } -.ui-icon-circle-triangle-s { background-position: -64px -192px; } -.ui-icon-circle-triangle-w { background-position: -80px -192px; } -.ui-icon-circle-triangle-n { background-position: -96px -192px; } -.ui-icon-circle-arrow-e { background-position: -112px -192px; } -.ui-icon-circle-arrow-s { background-position: -128px -192px; } -.ui-icon-circle-arrow-w { background-position: -144px -192px; } -.ui-icon-circle-arrow-n { background-position: -160px -192px; } -.ui-icon-circle-zoomin { background-position: -176px -192px; } -.ui-icon-circle-zoomout { background-position: -192px -192px; } -.ui-icon-circle-check { background-position: -208px -192px; } -.ui-icon-circlesmall-plus { background-position: 0 -208px; } -.ui-icon-circlesmall-minus { background-position: -16px -208px; } -.ui-icon-circlesmall-close { background-position: -32px -208px; } -.ui-icon-squaresmall-plus { background-position: -48px -208px; } -.ui-icon-squaresmall-minus { background-position: -64px -208px; } -.ui-icon-squaresmall-close { background-position: -80px -208px; } -.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } -.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } -.ui-icon-grip-solid-vertical { background-position: -32px -224px; } -.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } -.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } -.ui-icon-grip-diagonal-se { background-position: -80px -224px; } - - -/* Misc visuals -----------------------------------*/ - -/* Corner radius */ -.ui-corner-all, -.ui-corner-top, -.ui-corner-left, -.ui-corner-tl { - border-top-left-radius: 3px; -} -.ui-corner-all, -.ui-corner-top, -.ui-corner-right, -.ui-corner-tr { - border-top-right-radius: 3px; -} -.ui-corner-all, -.ui-corner-bottom, -.ui-corner-left, -.ui-corner-bl { - border-bottom-left-radius: 3px; -} -.ui-corner-all, -.ui-corner-bottom, -.ui-corner-right, -.ui-corner-br { - border-bottom-right-radius: 3px; -} - -/* Overlays */ -.ui-widget-overlay { - background: #aaaaaa; - opacity: .3; - filter: Alpha(Opacity=30); /* support: IE8 */ -} -.ui-widget-shadow { - -webkit-box-shadow: 0px 0px 5px #666666; - box-shadow: 0px 0px 5px #666666; -} diff --git a/merepresenta/static/css/merepresenta/merepresenta.css b/merepresenta/static/css/merepresenta/merepresenta.css deleted file mode 100644 index e4fa80f0..00000000 --- a/merepresenta/static/css/merepresenta/merepresenta.css +++ /dev/null @@ -1,51 +0,0 @@ -.btn-1 { - background-color: #582985; - color: #097e74; - font-weight: bolder; -} -.btn-1-inv { - background-color: #00a99d; - color: #582985; - font-weight: bolder; -} -.btn-2 { - background-color: #d8b212; - color: #582985; - font-weight: bolder; -} -.btn-2-inv { - background-color: #582985; - color: #d8b212; - font-weight: bolder; -} -.btn-3 { - background-color: #097e74; - color: #582985; - font-weight: bolder; -} -.invisivel { - display: none; -} -body { - font-family: ProximaNovaSoft-Regular; -} -.btn-amarelo-roxo,.btn-amarelo-roxo:hover { - background-color: #d8b212; - color: #582985; - font-weight: bolder; -} -.btn-roxo-amarelo,.btn-roxo-amarelo:hover { - background-color: #582985; - color: #d8b212; - font-weight: bolder; -} -.btn-verdeescuro-roxo,.btn-verdeescuro-roxo:hover { - background-color: #097e74; - color: #582985; - font-weight: bolder; -} -.btn-verdeclaro-roxo,.btn-verdeclaro-roxo:hover { - background-color: #00a99d; - color: #582985; - font-weight: bolder; -} diff --git a/merepresenta/static/css/merepresenta/merepresentalogged.css b/merepresenta/static/css/merepresenta/merepresentalogged.css deleted file mode 100644 index 8ea157a7..00000000 --- a/merepresenta/static/css/merepresenta/merepresentalogged.css +++ /dev/null @@ -1,49 +0,0 @@ -.main-menu-item { - background-color: transparent; - border: none; -} -.main-menu-item:hover { - border-left: 1px dotted lightgray; - box-shadow: inset 1 -1 0px lightgray; -} -.user-image { - display: none; -} -.user { - color: #fff; - font-weight: bolder; -} -.navbar-light .navbar-nav .nav-link { - color: #fff; - font-weight: bolder; - text-transform: uppercase; -} -.navbar-light .navbar-nav .nav-link:hover { - color: #fff; - font-weight: bolder; -} -.navbar-light .navbar-nav .disabled.nav-link, .navbar-light .navbar-nav .disabled.nav-link:hover { - color: lightgray; - border: none; - color: #582985; -} -.navbar-light .navbar-nav .nav-link.dropdown-toggle:hover { - border-bottom: none; -} -.dropdown-menu { - left: inherit; - right: 0; -} -@media screen and (min-width: 768px){ - .user-image { - display: initial; - border-radius: 1.5em; - width: 3em; - position: absolute; - left: -4em; - top: -.4em; - } - .navbar-light .navbar-nav .nav-link:hover { - border-bottom: 1px solid #fff; - } -} \ No newline at end of file diff --git a/merepresenta/static/css/merepresenta/new_for_candidates.css b/merepresenta/static/css/merepresenta/new_for_candidates.css deleted file mode 100644 index 7f049612..00000000 --- a/merepresenta/static/css/merepresenta/new_for_candidates.css +++ /dev/null @@ -1,94 +0,0 @@ -.dados-ok { - color: gold; - animation: blinker .8s linear infinite; -} -.dados-erro { - color: red; - animation: blinker 1s linear infinite; -} -@keyframes blinker { - 50% { opacity: 0.0; } -} -body { - background: #097e74; - background-image: url('/assets/FC3.png'); - color: #fff; - text-transform: uppercase; -} -h1 { - color: #00a99d; - font-size: 2em; - transform: rotate(-3deg); - margin: 1em 0; - text-align: center; - text-shadow: -.05em -.02em #3a497d; - font-weight: bolder; -} -h2 { - font-size: 1.1em; - font-weight: bolder; - color: #582985; -} -label { - width: 23%; - display: inline-block; -} -.opiniao { - position: relative; - left: 30%; -} -.question { - margin: 1em 0; -} -.question+.alert { - display: none; -} -.question.dados-erro+.alert { - display: inline-block; -} -.resposta { - display: none; -} -.resposta+span:before { - content: ""; - background-size: contain; - height: 1px; - width: 1px; - background-image: url('/assets/rb20p.svg'); - position: relative; - padding-right: 1.32em; - background-repeat: no-repeat; - display: inline; -} -.resposta:checked+span:before { - background-image: url('/assets/rb21p.svg'); -} -.btn { - margin: 0 auto; - display: table; - margin-top: 2em; - font-size: 1em; -} -@media screen and (min-width: 400px) { - main { - font-size: 1.2em; - } -} -@media screen and (min-width: 600px) { - main { - font-size: 2em; - } - h1 { - font-size: 2em; - } -} -@media screen and (min-width: 1000px) { - h1 { - font-size: 3em; - } -} -@media screen and (min-width: 1200px) { - h1 { - font-size: 4em; - } -} diff --git a/merepresenta/static/css/merepresenta/new_for_users.css b/merepresenta/static/css/merepresenta/new_for_users.css deleted file mode 100644 index f211d16c..00000000 --- a/merepresenta/static/css/merepresenta/new_for_users.css +++ /dev/null @@ -1,93 +0,0 @@ -.dados-ok { - color: gold; - animation: blinker .8s linear infinite; -} -.dados-erro { - color: red; - animation: blinker 1s linear infinite; -} -@keyframes blinker { - 50% { opacity: 0.0; } -} -body { - background: #582985; - background-image: url('/static/img/merepresenta/FE3.png'); - color: #fff; -} -.container { - text-transform: uppercase; - font-weight: bolder; -} -h1 { - text-shadow: -.05em -.02em #885c59; - font-size: 2.4em; - color: #00a99d; - opacity: .6; - text-align: center; - font-family: ProximaNovaSoft-Bold; - transform: rotate(-2deg); -} -h2 { - text-align: justify; - font-size: 1em; - font-weight: bolder; - margin: 2em 0 1.5em 0; - color: #fff; -} -.conteudo { - margin: 0 auto; -} -.question { - display: flex; - align-items: center; - margin-bottom: 2em; -} -.btn-1-inv { - opacity: .8; - margin: 2em auto; - display: table; - width: 40ch; - max-width: 100%; - display: block; -} -.answer { - margin-right: .8em; -} -.answer input { - display: none; -} -.answer label { - font-size: 0; -} -.answer>input+label:after { - content: ""; - background-image: url("/static/img/merepresenta/cb0.svg"); - background-size: cover; - width: 1.5rem; - height: 1.5rem; - display: inline-block; -} -.answer>input:checked+label:after { - background-image: url("/static/img/merepresenta/cb1.svg"); -} -@media screen and (min-width: 500px) { - h1 { - font-size: 3.5em; - } -} -@media screen and (min-width: 992px) { - h1 { - font-size: 5em; - } - h2 { - text-align: center; - } -} -@media screen and (min-width: 1200px) { - h1 { - font-size: 7em; - } - h2 { - font-size: 1em; - } -} diff --git a/merepresenta/static/css/merepresenta/perfil_candidato.css b/merepresenta/static/css/merepresenta/perfil_candidato.css deleted file mode 100644 index e7959cc9..00000000 --- a/merepresenta/static/css/merepresenta/perfil_candidato.css +++ /dev/null @@ -1,377 +0,0 @@ -header { - padding-bottom: .3em; - border-bottom: 1px solid #532985; -} -textarea { - background-color: #532985; - border: none; - height: 80%; - width: 100%; - resize: none; - color: #fff; -} -.container { - margin-top: 2em; - margin-bottom: 2em; -} -#votar { - border: 3px solid #532985; - position: relative; - margin: 0 auto; - display: block; -} -body { - background-color: #d8b212; -} -.disclaimer, .legenda h3, .brother a, .btn-2 { - text-transform: uppercase; -} -main { - font-size: .8em; - color: #532985; -} -main h3 { - font-size: 2em; -} -.info-basica { - background-color: #532985; - color: #fff; - padding: 1.5em 1.5em .5em 1.5em; - text-transform: uppercase; - margin-bottom: 1em; -} -.bio { - background-color: #532985; - color: #fff; - padding: 1.5em 1.5em .5em 1.5em; - text-transform: uppercase; - margin-bottom: 1em; -} -.info-text { - display: block; -} -.info-text.name { - margin-top: 1em; -} -.info-text.number { - margin: 1em 0; -} -.info-text.score.perigo { - color: red; -} -.candidate-number { - font-size: 2em; -} -.puxar .title { - background-color: #532985; - color: #fff; -} -.puxar h2 { - text-transform: uppercase; -} -.can-pic { - width: 100px; - height: 100px; - border-radius: 50%; - margin: 0 auto; - display: block; -} -.votes-int { - color: #d8b212; - text-align: center; - display: block; -} -.title { - padding: 1em; -} -.brother td { - background-color: #532985; - color: #fff; - padding: 1em; -} -.brother { - margin: 1em 0; - border-collapse: separate; - border-spacing: 0 1em; - width: 100%; - font-size: 1.2em; -} -.partido span { - display: block; -} -.partido { - text-transform: uppercase; - text-align: center; - width: 10ch; -} -.nota { - font-weight: bolder; - color: #532985; -} -.votes-int p { - font-size: .6em; -} -.respostas, .puxar { - margin: 3em 0; -} -.respostas table { - width: 100%; - color: #fff; - border-spacing: .3em; - border-collapse: separate; - text-transform: uppercase; - font-family: ProximaNovaSoft-Bold; -} -.respostas td { - background-color: #532985; -} -.resposta.perigo { - font-size: 1.1em; -} -td.perigo { - color: #532985; - background-color: pink; -} -.pergunta, .resposta { - padding: .5em; -} -.puxar { - width: 100%; -} -main .nav a { - display: block; - text-transform: uppercase; - position: relative; - margin-bottom: 1em; -} -#btn-voltar { - padding: .6em 0 .8em 0; -} -#btn-voltar:before { - content: "<"; - margin-right: .5em; - font-size: 1.8em; - position: relative; - top: .15em; -} -#btn-compartilhar { - padding: .6em 0 1em 0; -} -#btn-compartilhar:before { - content: ""; - display: inline-block; - background-image: url('/assets/face2.svg'); - background-size: cover; - width: 1.5em; - height: 1.5em; - position: relative; - top: .38em; - margin-right: .5em; - -} -.nota { - background-color: #d8b212; - font-size: .6em; - padding: .3em; - border-radius: .4em; - white-space: nowrap; -} -span.info-text.score { - margin-top: 2em; - background-color: #d8b212; - text-align: center; - color: #532985; - border-radius: 4px; - font-size: .8em; - position: relative; - bottom: 0px; -} -@media screen and (min-width:500px) { - main { - font-size: 1rem; - } - .pergunta, .resposta { - padding: 1em 3em; - - } -} -@media screen and (min-width:600px) { - main .nav { - display: flex; - flex-wrap: wrap; - justify-content: space-around; - } - main .nav a { - width: 49%; - margin-top: .5em; - display: inline; - } -} -@media screen and (min-width:800px) { - .bio { - min-height: 435px; - } - .can-pic { - width: 150px; - height: 150px; - } - .flex { - display: flex; - margin-bottom: 2em; - position: relative; - } - .info-bio { - font-size: 1.2em; - margin: 0; - width: 100%; - } - .info-basica { - font-size: 1.2em; - width: 40ch; - margin: 0 3em 0 0; - box-sizing: border-box; - } - .info-basica:after, #votar:before { - content: ""; - position: absolute; - left: 0; - right: 0; - background-color: #532985; - height: .5em; - z-index: -1; - } - .info-basica:after { - bottom: 5em; - } - #votar { - float: right; - position: initial; - display: inline-block; - } - #votar:before { - bottom: 1.1em; - } - .avaliacao { - position: absolute; - bottom: 1em; - } - .avaliacao>span { - margin-right: 1em; - } - .legenda { - margin-top: 2em; - } -} -@media screen and (min-width:992px) { - .partido span { - display: inline-block; - } - .partido { - width: 30%; - text-align: right; - } - .nota { - background-color: #d8b212; - font-size: .6em; - padding: 0.4em 1em .2em 1em; - border-radius: .4em; - margin-left: 1em; - } -} - - span.info-text.city { - font-size: 0.7em; - margin: 1em 0; - } - -@media screen and (min-width:1200px) { - .partido { - width: 25%; - } - .puxar h2,.puxar h5 { - display: inline; - } -} - - .share-it { - width: 87.5%; - position: fixed; - top: 7%; - background-color: #532985; - left: 6.25%; - animation-name: treme; - box-shadow: 0 0 0 calc( 100vw + 100vh ) rgba(0,0,0,.6); - font-size: 1.2em; - text-align: center; - padding-bottom: 2em; - } - .share-it h4 { - font-size: 1.1em; - font-family: ProximaNovaSoft-Bold; - background-color: #532985; - color: #d8b212; - padding: .4em .4em .4em .85em; - text-transform: uppercase; - padding: 1.5em; - } - .share-it p { - margin: 0; - color: #fff; - padding: 0 2em 1.5em 2em; - } - .share-it>h4>a { - position: absolute; - right: .5em; - color: transparent; - } - .share-it>h4>a:after { - content: "X"; - position: absolute; - right: 0.2em; - color: #d8b212; - top: -17px; - } - .share-it:after { - content: ""; - position: absolute; - background-image: url('/assets/01_.png'); - background-repeat: no-repeat; - background-size: cover; - height: 100px; - width: 100px; - bottom: -54px; - right: 0px; - } - .btn-compartilhe, .btn-compartilhe:hover { - /*color: #fff;*/ - text-decoration: none; - width: 250px; - position: relative; - padding-left: 3em; - } - .btn-compartilhe:before, .btn-compartilhe:hover:before { - content: ""; - background-image: url("/assets/face3.svg"); - background-size: cover; - width: 1.5em; - height: 2em; - display: inline-block; - position: absolute; - left: .5em; - top: .1em; - } - .btn-compartilhe:after, .btn-compartilhe:hover:after { - content: ""; - border-left: 1px double #532985; - position: absolute; - top: .5em; - left: 2.6em; - height: 1.3em; - } - @media screen and (min-width: 650px) { - .share-it { - width: 550px; - left: calc( ( 100% - 550px ) / 2 ); - padding-bottom: 1em; - } - } diff --git a/merepresenta/static/css/merepresenta/questionnaire.css b/merepresenta/static/css/merepresenta/questionnaire.css deleted file mode 100644 index 2ace7297..00000000 --- a/merepresenta/static/css/merepresenta/questionnaire.css +++ /dev/null @@ -1,52 +0,0 @@ -.control-label { - color: #fff; - text-align: right; - font-weight: bolder; -} -.control-label { - text-transform: uppercase; -} -.buttons { - width: 100%; - display: inline-block; - padding-top: 1.5em; -} -.form-control, .form-control:focus { - background-color: transparent; - border: 2px solid #fff; - margin-bottom: 1em; - color: #fff; -} -span.loading_msg { - display: none; -} -/*background: transparent url("/assets/ui-anim_basic_16x16.gif") right center no-repeat;*/ -.ui-autocomplete-loading+ span.loading_msg { - display: inline-block; - position: absolute; - top: .5em; - right: 2em; - color: rgba(0,0,0,.5); - animation-name: blinker; - animation-duration: 1s; - animation-iteration-count: infinite; - animation-direction: alternate; -} -@keyframes blinker { - from { - color: rgba(0,0,0,.5); - } - to { - color: #ff0000; - } -} -@media screen and (min-width: 544px) { - .control-label { - } - .form-control, .form-control:focus { - margin-bottom: 2em; - } - .buttons { - padding-top: 2em; - } -} diff --git a/merepresenta/static/css/merepresenta/reset.css b/merepresenta/static/css/merepresenta/reset.css deleted file mode 100644 index 224ab710..00000000 --- a/merepresenta/static/css/merepresenta/reset.css +++ /dev/null @@ -1,47 +0,0 @@ -/* http://meyerweb.com/eric/tools/css/reset/ - v2.0 | 20110126 - License: none (public domain) -*/ -html, body, div, span, applet, object, iframe, -h1, h2, h3, h4, h5, h6, p, blockquote, pre, -a, abbr, acronym, address, big, cite, code, -del, dfn, em, img, ins, kbd, q, s, samp, -small, strike, strong, sub, sup, tt, var, -b, u, i, center, -dl, dt, dd, ol, ul, li, -fieldset, form, label, legend, -table, caption, tbody, tfoot, thead, tr, th, td, -article, aside, canvas, details, embed, -figure, figcaption, footer, header, hgroup, -menu, nav, output, ruby, section, summary, -time, mark, audio, video { - margin: 0; - padding: 0; - border: 0; - font-size: 100%; - font: inherit; - vertical-align: baseline; -} -/* HTML5 display-role reset for older browsers */ -article, aside, details, figcaption, figure, -footer, header, hgroup, menu, nav, section { - display: block; -} -body { - line-height: 1; -} -ol, ul { - list-style: none; -} -blockquote, q { - quotes: none; -} -blockquote:before, blockquote:after, -q:before, q:after { - content: ''; - content: none; -} -table { - border-collapse: collapse; - border-spacing: 0; -} \ No newline at end of file diff --git a/merepresenta/static/css/merepresenta/users.css b/merepresenta/static/css/merepresenta/users.css deleted file mode 100644 index 3be04cbe..00000000 --- a/merepresenta/static/css/merepresenta/users.css +++ /dev/null @@ -1,58 +0,0 @@ -.erros { - margin: 0; -} -body, option { - background-color: #097e74; - background-image: url('/assets/FC3.png'); -} -.btn-1 { - margin: 0 auto; - display: block; - max-width: 100%; - white-space: normal; -} -.container { - margin-top: 2em; -} -.header, .div-user { - display: inline-block; - width: 100%; -} -.form-content { - width: 100%; - margin-bottom: 2em; - color: #fff; -} -h1 { - font-family: ProximaNovaSoft-Bold; - color: #d8b212; - margin: auto; - font-size: 1.5em; - text-transform: uppercase; - letter-spacing: .15em; -} -p { - color: #fff; - display: block; - font-size: 1.1em; - margin: 1em 0 3em 0; -} -#busca_cidade, #busca_cidade~input { - display: none; -} -#busca_cidade:checked~input { - display: block; -} -#busca_cidade + label { - cursor: pointer; - color: #d8b212; -} -#city_name { - color: #fff; - font-weight: bold; -} -@media screen and (min-width: 1200px) { - h1 { - font-size: 2em; - } -} diff --git a/merepresenta/static/fonts/merepresenta/3203A9_0_0.eot b/merepresenta/static/fonts/merepresenta/3203A9_0_0.eot deleted file mode 100644 index f1bc6a40..00000000 Binary files a/merepresenta/static/fonts/merepresenta/3203A9_0_0.eot and /dev/null differ diff --git a/merepresenta/static/fonts/merepresenta/3203A9_0_0.ttf b/merepresenta/static/fonts/merepresenta/3203A9_0_0.ttf deleted file mode 100644 index df624c03..00000000 Binary files a/merepresenta/static/fonts/merepresenta/3203A9_0_0.ttf and /dev/null differ diff --git a/merepresenta/static/fonts/merepresenta/3203A9_0_0.woff b/merepresenta/static/fonts/merepresenta/3203A9_0_0.woff deleted file mode 100644 index ab80b839..00000000 Binary files a/merepresenta/static/fonts/merepresenta/3203A9_0_0.woff and /dev/null differ diff --git a/merepresenta/static/fonts/merepresenta/3203A9_0_0.woff2 b/merepresenta/static/fonts/merepresenta/3203A9_0_0.woff2 deleted file mode 100644 index a0f28b51..00000000 Binary files a/merepresenta/static/fonts/merepresenta/3203A9_0_0.woff2 and /dev/null differ diff --git a/merepresenta/static/fonts/merepresenta/3203A9_1_0.eot b/merepresenta/static/fonts/merepresenta/3203A9_1_0.eot deleted file mode 100644 index 562b6d57..00000000 Binary files a/merepresenta/static/fonts/merepresenta/3203A9_1_0.eot and /dev/null differ diff --git a/merepresenta/static/fonts/merepresenta/3203A9_1_0.ttf b/merepresenta/static/fonts/merepresenta/3203A9_1_0.ttf deleted file mode 100644 index 6ebeb9a2..00000000 Binary files a/merepresenta/static/fonts/merepresenta/3203A9_1_0.ttf and /dev/null differ diff --git a/merepresenta/static/fonts/merepresenta/3203A9_1_0.woff b/merepresenta/static/fonts/merepresenta/3203A9_1_0.woff deleted file mode 100644 index 8375157b..00000000 Binary files a/merepresenta/static/fonts/merepresenta/3203A9_1_0.woff and /dev/null differ diff --git a/merepresenta/static/fonts/merepresenta/3203A9_1_0.woff2 b/merepresenta/static/fonts/merepresenta/3203A9_1_0.woff2 deleted file mode 100644 index aa2e25e9..00000000 Binary files a/merepresenta/static/fonts/merepresenta/3203A9_1_0.woff2 and /dev/null differ diff --git a/merepresenta/static/fonts/merepresenta/3203A9_2_0.eot b/merepresenta/static/fonts/merepresenta/3203A9_2_0.eot deleted file mode 100644 index 50e02808..00000000 Binary files a/merepresenta/static/fonts/merepresenta/3203A9_2_0.eot and /dev/null differ diff --git a/merepresenta/static/fonts/merepresenta/3203A9_2_0.ttf b/merepresenta/static/fonts/merepresenta/3203A9_2_0.ttf deleted file mode 100644 index bd0424df..00000000 Binary files a/merepresenta/static/fonts/merepresenta/3203A9_2_0.ttf and /dev/null differ diff --git a/merepresenta/static/fonts/merepresenta/3203A9_2_0.woff b/merepresenta/static/fonts/merepresenta/3203A9_2_0.woff deleted file mode 100644 index 3526083e..00000000 Binary files a/merepresenta/static/fonts/merepresenta/3203A9_2_0.woff and /dev/null differ diff --git a/merepresenta/static/fonts/merepresenta/3203A9_2_0.woff2 b/merepresenta/static/fonts/merepresenta/3203A9_2_0.woff2 deleted file mode 100644 index 6ebd03e4..00000000 Binary files a/merepresenta/static/fonts/merepresenta/3203A9_2_0.woff2 and /dev/null differ diff --git a/merepresenta/static/fonts/merepresenta/3203A9_3_0.eot b/merepresenta/static/fonts/merepresenta/3203A9_3_0.eot deleted file mode 100644 index 7bf71524..00000000 Binary files a/merepresenta/static/fonts/merepresenta/3203A9_3_0.eot and /dev/null differ diff --git a/merepresenta/static/fonts/merepresenta/3203A9_3_0.ttf b/merepresenta/static/fonts/merepresenta/3203A9_3_0.ttf deleted file mode 100644 index eb0a96b6..00000000 Binary files a/merepresenta/static/fonts/merepresenta/3203A9_3_0.ttf and /dev/null differ diff --git a/merepresenta/static/fonts/merepresenta/3203A9_3_0.woff b/merepresenta/static/fonts/merepresenta/3203A9_3_0.woff deleted file mode 100644 index f7f32f98..00000000 Binary files a/merepresenta/static/fonts/merepresenta/3203A9_3_0.woff and /dev/null differ diff --git a/merepresenta/static/fonts/merepresenta/3203A9_3_0.woff2 b/merepresenta/static/fonts/merepresenta/3203A9_3_0.woff2 deleted file mode 100644 index 1d822a01..00000000 Binary files a/merepresenta/static/fonts/merepresenta/3203A9_3_0.woff2 and /dev/null differ diff --git a/merepresenta/static/fonts/merepresenta/IcoMoon.eot b/merepresenta/static/fonts/merepresenta/IcoMoon.eot deleted file mode 100644 index 251f74b2..00000000 Binary files a/merepresenta/static/fonts/merepresenta/IcoMoon.eot and /dev/null differ diff --git a/merepresenta/static/fonts/merepresenta/IcoMoon.svg b/merepresenta/static/fonts/merepresenta/IcoMoon.svg deleted file mode 100644 index 0fc906de..00000000 --- a/merepresenta/static/fonts/merepresenta/IcoMoon.svg +++ /dev/null @@ -1,70 +0,0 @@ - - - - -This is a custom SVG font generated by IcoMoon. -2 - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/merepresenta/static/fonts/merepresenta/IcoMoon.ttf b/merepresenta/static/fonts/merepresenta/IcoMoon.ttf deleted file mode 100644 index db6214cc..00000000 Binary files a/merepresenta/static/fonts/merepresenta/IcoMoon.ttf and /dev/null differ diff --git a/merepresenta/static/fonts/merepresenta/IcoMoon.woff b/merepresenta/static/fonts/merepresenta/IcoMoon.woff deleted file mode 100644 index 0293a6e1..00000000 Binary files a/merepresenta/static/fonts/merepresenta/IcoMoon.woff and /dev/null differ diff --git a/merepresenta/static/img/BG_ChamadaVoluntarias_4x.png b/merepresenta/static/img/BG_ChamadaVoluntarias_4x.png deleted file mode 100644 index 668e790a..00000000 Binary files a/merepresenta/static/img/BG_ChamadaVoluntarias_4x.png and /dev/null differ diff --git a/merepresenta/static/img/Big_Grafico_QuemUsou.png b/merepresenta/static/img/Big_Grafico_QuemUsou.png deleted file mode 100644 index 72d43fed..00000000 Binary files a/merepresenta/static/img/Big_Grafico_QuemUsou.png and /dev/null differ diff --git a/merepresenta/static/img/Ilustra_Eleitoras_Rosa.png b/merepresenta/static/img/Ilustra_Eleitoras_Rosa.png deleted file mode 100644 index 06e93245..00000000 Binary files a/merepresenta/static/img/Ilustra_Eleitoras_Rosa.png and /dev/null differ diff --git a/merepresenta/static/img/Ilustra_Galera_Azul.png b/merepresenta/static/img/Ilustra_Galera_Azul.png deleted file mode 100644 index 88b0f70b..00000000 Binary files a/merepresenta/static/img/Ilustra_Galera_Azul.png and /dev/null differ diff --git a/merepresenta/static/img/Ilustra_azul.png b/merepresenta/static/img/Ilustra_azul.png deleted file mode 100644 index 56c9237a..00000000 Binary files a/merepresenta/static/img/Ilustra_azul.png and /dev/null differ diff --git a/merepresenta/static/img/compartilhar.png b/merepresenta/static/img/compartilhar.png deleted file mode 100644 index ac873ba6..00000000 Binary files a/merepresenta/static/img/compartilhar.png and /dev/null differ diff --git a/merepresenta/static/img/gif_fb.gif b/merepresenta/static/img/gif_fb.gif deleted file mode 100644 index 7cd72764..00000000 Binary files a/merepresenta/static/img/gif_fb.gif and /dev/null differ diff --git a/merepresenta/static/img/icon.png b/merepresenta/static/img/icon.png deleted file mode 100644 index 66538a37..00000000 Binary files a/merepresenta/static/img/icon.png and /dev/null differ diff --git a/merepresenta/static/img/ilustra_3_amarela.svg b/merepresenta/static/img/ilustra_3_amarela.svg deleted file mode 100644 index 8846e4e5..00000000 --- a/merepresenta/static/img/ilustra_3_amarela.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/merepresenta/static/img/logos/05.png b/merepresenta/static/img/logos/05.png deleted file mode 100644 index 136213d1..00000000 Binary files a/merepresenta/static/img/logos/05.png and /dev/null differ diff --git a/merepresenta/static/img/logos/06.png b/merepresenta/static/img/logos/06.png deleted file mode 100644 index 0dbbf848..00000000 Binary files a/merepresenta/static/img/logos/06.png and /dev/null differ diff --git a/merepresenta/static/img/logos/07.png b/merepresenta/static/img/logos/07.png deleted file mode 100644 index aaafd322..00000000 Binary files a/merepresenta/static/img/logos/07.png and /dev/null differ diff --git a/merepresenta/static/img/logos/08.png b/merepresenta/static/img/logos/08.png deleted file mode 100644 index 0583c030..00000000 Binary files a/merepresenta/static/img/logos/08.png and /dev/null differ diff --git a/merepresenta/static/img/logos/09.png b/merepresenta/static/img/logos/09.png deleted file mode 100644 index 81934e4d..00000000 Binary files a/merepresenta/static/img/logos/09.png and /dev/null differ diff --git a/merepresenta/static/img/logos/1.png b/merepresenta/static/img/logos/1.png deleted file mode 100644 index 9926ae9e..00000000 Binary files a/merepresenta/static/img/logos/1.png and /dev/null differ diff --git a/merepresenta/static/img/logos/10.png b/merepresenta/static/img/logos/10.png deleted file mode 100644 index a4347e0c..00000000 Binary files a/merepresenta/static/img/logos/10.png and /dev/null differ diff --git a/merepresenta/static/img/logos/11.png b/merepresenta/static/img/logos/11.png deleted file mode 100644 index f841da01..00000000 Binary files a/merepresenta/static/img/logos/11.png and /dev/null differ diff --git a/merepresenta/static/img/logos/12.png b/merepresenta/static/img/logos/12.png deleted file mode 100644 index 122533cd..00000000 Binary files a/merepresenta/static/img/logos/12.png and /dev/null differ diff --git a/merepresenta/static/img/logos/13.png b/merepresenta/static/img/logos/13.png deleted file mode 100644 index 374360ec..00000000 Binary files a/merepresenta/static/img/logos/13.png and /dev/null differ diff --git a/merepresenta/static/img/logos/14.png b/merepresenta/static/img/logos/14.png deleted file mode 100644 index cc6bee4a..00000000 Binary files a/merepresenta/static/img/logos/14.png and /dev/null differ diff --git a/merepresenta/static/img/logos/15.png b/merepresenta/static/img/logos/15.png deleted file mode 100644 index a22284f6..00000000 Binary files a/merepresenta/static/img/logos/15.png and /dev/null differ diff --git a/merepresenta/static/img/logos/16.png b/merepresenta/static/img/logos/16.png deleted file mode 100644 index c2b9be09..00000000 Binary files a/merepresenta/static/img/logos/16.png and /dev/null differ diff --git a/merepresenta/static/img/logos/17.png b/merepresenta/static/img/logos/17.png deleted file mode 100644 index 2b43ebf1..00000000 Binary files a/merepresenta/static/img/logos/17.png and /dev/null differ diff --git a/merepresenta/static/img/logos/18.png b/merepresenta/static/img/logos/18.png deleted file mode 100644 index 1911a87f..00000000 Binary files a/merepresenta/static/img/logos/18.png and /dev/null differ diff --git a/merepresenta/static/img/logos/19.png b/merepresenta/static/img/logos/19.png deleted file mode 100644 index 5bc577ac..00000000 Binary files a/merepresenta/static/img/logos/19.png and /dev/null differ diff --git a/merepresenta/static/img/logos/2.png b/merepresenta/static/img/logos/2.png deleted file mode 100644 index 285383ac..00000000 Binary files a/merepresenta/static/img/logos/2.png and /dev/null differ diff --git a/merepresenta/static/img/logos/20.png b/merepresenta/static/img/logos/20.png deleted file mode 100644 index ae438358..00000000 Binary files a/merepresenta/static/img/logos/20.png and /dev/null differ diff --git a/merepresenta/static/img/logos/21.png b/merepresenta/static/img/logos/21.png deleted file mode 100644 index bc113ff9..00000000 Binary files a/merepresenta/static/img/logos/21.png and /dev/null differ diff --git a/merepresenta/static/img/logos/22.png b/merepresenta/static/img/logos/22.png deleted file mode 100644 index 7282674d..00000000 Binary files a/merepresenta/static/img/logos/22.png and /dev/null differ diff --git a/merepresenta/static/img/logos/3.png b/merepresenta/static/img/logos/3.png deleted file mode 100644 index c52cdb8f..00000000 Binary files a/merepresenta/static/img/logos/3.png and /dev/null differ diff --git a/merepresenta/static/img/logos/4.png b/merepresenta/static/img/logos/4.png deleted file mode 100644 index ad937d88..00000000 Binary files a/merepresenta/static/img/logos/4.png and /dev/null differ diff --git a/merepresenta/static/img/logos/apoiam/01.png b/merepresenta/static/img/logos/apoiam/01.png deleted file mode 100644 index 8c348637..00000000 Binary files a/merepresenta/static/img/logos/apoiam/01.png and /dev/null differ diff --git a/merepresenta/static/img/logos/apoiam/02.png b/merepresenta/static/img/logos/apoiam/02.png deleted file mode 100644 index 649128c4..00000000 Binary files a/merepresenta/static/img/logos/apoiam/02.png and /dev/null differ diff --git a/merepresenta/static/img/logos/apoiam/03.png b/merepresenta/static/img/logos/apoiam/03.png deleted file mode 100644 index 23b6e282..00000000 Binary files a/merepresenta/static/img/logos/apoiam/03.png and /dev/null differ diff --git a/merepresenta/static/img/logos/apoiam/04.png b/merepresenta/static/img/logos/apoiam/04.png deleted file mode 100644 index c1240020..00000000 Binary files a/merepresenta/static/img/logos/apoiam/04.png and /dev/null differ diff --git a/merepresenta/static/img/logos/apoiam/05.png b/merepresenta/static/img/logos/apoiam/05.png deleted file mode 100644 index 9a758fe5..00000000 Binary files a/merepresenta/static/img/logos/apoiam/05.png and /dev/null differ diff --git a/merepresenta/static/img/logos/financiadora/01.png b/merepresenta/static/img/logos/financiadora/01.png deleted file mode 100644 index 390e0f25..00000000 Binary files a/merepresenta/static/img/logos/financiadora/01.png and /dev/null differ diff --git a/merepresenta/static/img/logos/financiadora/02.png b/merepresenta/static/img/logos/financiadora/02.png deleted file mode 100644 index 6be19a85..00000000 Binary files a/merepresenta/static/img/logos/financiadora/02.png and /dev/null differ diff --git a/merepresenta/static/img/logos/financiadora/03.png b/merepresenta/static/img/logos/financiadora/03.png deleted file mode 100644 index 4c85bb23..00000000 Binary files a/merepresenta/static/img/logos/financiadora/03.png and /dev/null differ diff --git a/merepresenta/static/img/merepresenta/01.png b/merepresenta/static/img/merepresenta/01.png deleted file mode 100644 index 8d87f86c..00000000 Binary files a/merepresenta/static/img/merepresenta/01.png and /dev/null differ diff --git a/merepresenta/static/img/merepresenta/01_.png b/merepresenta/static/img/merepresenta/01_.png deleted file mode 100644 index eb5af0b8..00000000 Binary files a/merepresenta/static/img/merepresenta/01_.png and /dev/null differ diff --git a/merepresenta/static/img/merepresenta/2.png b/merepresenta/static/img/merepresenta/2.png deleted file mode 100644 index e5f1e572..00000000 Binary files a/merepresenta/static/img/merepresenta/2.png and /dev/null differ diff --git a/merepresenta/static/img/merepresenta/3.png b/merepresenta/static/img/merepresenta/3.png deleted file mode 100644 index 05beff15..00000000 Binary files a/merepresenta/static/img/merepresenta/3.png and /dev/null differ diff --git a/merepresenta/static/img/merepresenta/4.png b/merepresenta/static/img/merepresenta/4.png deleted file mode 100644 index 1e576040..00000000 Binary files a/merepresenta/static/img/merepresenta/4.png and /dev/null differ diff --git a/merepresenta/static/img/merepresenta/4ico.png b/merepresenta/static/img/merepresenta/4ico.png deleted file mode 100644 index 66538a37..00000000 Binary files a/merepresenta/static/img/merepresenta/4ico.png and /dev/null differ diff --git a/merepresenta/static/img/merepresenta/5.png b/merepresenta/static/img/merepresenta/5.png deleted file mode 100644 index 996df923..00000000 Binary files a/merepresenta/static/img/merepresenta/5.png and /dev/null differ diff --git a/merepresenta/static/img/merepresenta/FC1.png b/merepresenta/static/img/merepresenta/FC1.png deleted file mode 100644 index 600ad906..00000000 Binary files a/merepresenta/static/img/merepresenta/FC1.png and /dev/null differ diff --git a/merepresenta/static/img/merepresenta/FC3.png b/merepresenta/static/img/merepresenta/FC3.png deleted file mode 100644 index ec1ae85c..00000000 Binary files a/merepresenta/static/img/merepresenta/FC3.png and /dev/null differ diff --git a/merepresenta/static/img/merepresenta/FC4.png b/merepresenta/static/img/merepresenta/FC4.png deleted file mode 100644 index 12d1f247..00000000 Binary files a/merepresenta/static/img/merepresenta/FC4.png and /dev/null differ diff --git a/merepresenta/static/img/merepresenta/FE1.png b/merepresenta/static/img/merepresenta/FE1.png deleted file mode 100644 index 64eac7dc..00000000 Binary files a/merepresenta/static/img/merepresenta/FE1.png and /dev/null differ diff --git a/merepresenta/static/img/merepresenta/FE3.png b/merepresenta/static/img/merepresenta/FE3.png deleted file mode 100644 index 33f447e5..00000000 Binary files a/merepresenta/static/img/merepresenta/FE3.png and /dev/null differ diff --git a/merepresenta/static/img/merepresenta/FE4.png b/merepresenta/static/img/merepresenta/FE4.png deleted file mode 100644 index 59f6de6e..00000000 Binary files a/merepresenta/static/img/merepresenta/FE4.png and /dev/null differ diff --git a/merepresenta/static/img/merepresenta/MPOA.png b/merepresenta/static/img/merepresenta/MPOA.png deleted file mode 100644 index cb0f8566..00000000 Binary files a/merepresenta/static/img/merepresenta/MPOA.png and /dev/null differ diff --git a/merepresenta/static/img/merepresenta/MR.png b/merepresenta/static/img/merepresenta/MR.png deleted file mode 100644 index ff55bb21..00000000 Binary files a/merepresenta/static/img/merepresenta/MR.png and /dev/null differ diff --git a/merepresenta/static/img/merepresenta/MREC.png b/merepresenta/static/img/merepresenta/MREC.png deleted file mode 100644 index 060e91bd..00000000 Binary files a/merepresenta/static/img/merepresenta/MREC.png and /dev/null differ diff --git a/merepresenta/static/img/merepresenta/MSP.png b/merepresenta/static/img/merepresenta/MSP.png deleted file mode 100644 index 34bba11a..00000000 Binary files a/merepresenta/static/img/merepresenta/MSP.png and /dev/null differ diff --git a/merepresenta/static/img/merepresenta/RFJUR-branco.png b/merepresenta/static/img/merepresenta/RFJUR-branco.png deleted file mode 100644 index e7cfe0a9..00000000 Binary files a/merepresenta/static/img/merepresenta/RFJUR-branco.png and /dev/null differ diff --git a/merepresenta/static/img/merepresenta/activity_background.png b/merepresenta/static/img/merepresenta/activity_background.png deleted file mode 100644 index 35028b47..00000000 Binary files a/merepresenta/static/img/merepresenta/activity_background.png and /dev/null differ diff --git a/merepresenta/static/img/merepresenta/agora-e-que-sao-elas.png b/merepresenta/static/img/merepresenta/agora-e-que-sao-elas.png deleted file mode 100644 index b8caaa81..00000000 Binary files a/merepresenta/static/img/merepresenta/agora-e-que-sao-elas.png and /dev/null differ diff --git a/merepresenta/static/img/merepresenta/c0.svg b/merepresenta/static/img/merepresenta/c0.svg deleted file mode 100644 index ae81521b..00000000 --- a/merepresenta/static/img/merepresenta/c0.svg +++ /dev/null @@ -1,53 +0,0 @@ - - - -image/svg+xml \ No newline at end of file diff --git a/merepresenta/static/img/merepresenta/c02.svg b/merepresenta/static/img/merepresenta/c02.svg deleted file mode 100644 index 38bee7d4..00000000 --- a/merepresenta/static/img/merepresenta/c02.svg +++ /dev/null @@ -1,53 +0,0 @@ - - - -image/svg+xml \ No newline at end of file diff --git a/merepresenta/static/img/merepresenta/c1.svg b/merepresenta/static/img/merepresenta/c1.svg deleted file mode 100644 index c5dc63be..00000000 --- a/merepresenta/static/img/merepresenta/c1.svg +++ /dev/null @@ -1,53 +0,0 @@ - - - -image/svg+xml \ No newline at end of file diff --git a/merepresenta/static/img/merepresenta/cb0.svg b/merepresenta/static/img/merepresenta/cb0.svg deleted file mode 100644 index c23f0cf5..00000000 --- a/merepresenta/static/img/merepresenta/cb0.svg +++ /dev/null @@ -1,53 +0,0 @@ - - - -image/svg+xml \ No newline at end of file diff --git a/merepresenta/static/img/merepresenta/cb1.svg b/merepresenta/static/img/merepresenta/cb1.svg deleted file mode 100644 index 096949eb..00000000 --- a/merepresenta/static/img/merepresenta/cb1.svg +++ /dev/null @@ -1,61 +0,0 @@ - - - -image/svg+xml \ No newline at end of file diff --git a/merepresenta/static/img/merepresenta/envelope.svg b/merepresenta/static/img/merepresenta/envelope.svg deleted file mode 100644 index 41f0aeb2..00000000 --- a/merepresenta/static/img/merepresenta/envelope.svg +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - image/svg+xml - - - - - - - - - - - - - - diff --git a/merepresenta/static/img/merepresenta/f1.svg b/merepresenta/static/img/merepresenta/f1.svg deleted file mode 100644 index fa122cb4..00000000 --- a/merepresenta/static/img/merepresenta/f1.svg +++ /dev/null @@ -1,126 +0,0 @@ - - - -image/svg+xml \ No newline at end of file diff --git a/merepresenta/static/img/merepresenta/f1w.svg b/merepresenta/static/img/merepresenta/f1w.svg deleted file mode 100644 index df128cdc..00000000 --- a/merepresenta/static/img/merepresenta/f1w.svg +++ /dev/null @@ -1,137 +0,0 @@ - - - -image/svg+xml \ No newline at end of file diff --git a/merepresenta/static/img/merepresenta/f2.svg b/merepresenta/static/img/merepresenta/f2.svg deleted file mode 100644 index 70def88e..00000000 --- a/merepresenta/static/img/merepresenta/f2.svg +++ /dev/null @@ -1,139 +0,0 @@ - - - -image/svg+xml \ No newline at end of file diff --git a/merepresenta/static/img/merepresenta/f21.svg b/merepresenta/static/img/merepresenta/f21.svg deleted file mode 100644 index a513552e..00000000 --- a/merepresenta/static/img/merepresenta/f21.svg +++ /dev/null @@ -1,165 +0,0 @@ - - - -image/svg+xml \ No newline at end of file diff --git a/merepresenta/static/img/merepresenta/f2w.svg b/merepresenta/static/img/merepresenta/f2w.svg deleted file mode 100644 index 1ca8e24a..00000000 --- a/merepresenta/static/img/merepresenta/f2w.svg +++ /dev/null @@ -1,163 +0,0 @@ - - - -image/svg+xml \ No newline at end of file diff --git a/merepresenta/static/img/merepresenta/f3.svg b/merepresenta/static/img/merepresenta/f3.svg deleted file mode 100644 index 6e299c81..00000000 --- a/merepresenta/static/img/merepresenta/f3.svg +++ /dev/null @@ -1,117 +0,0 @@ - - - -image/svg+xml \ No newline at end of file diff --git a/merepresenta/static/img/merepresenta/f3w.svg b/merepresenta/static/img/merepresenta/f3w.svg deleted file mode 100644 index 7f6a662a..00000000 --- a/merepresenta/static/img/merepresenta/f3w.svg +++ /dev/null @@ -1,125 +0,0 @@ - - - -image/svg+xml \ No newline at end of file diff --git a/merepresenta/static/img/merepresenta/f4.svg b/merepresenta/static/img/merepresenta/f4.svg deleted file mode 100644 index dd9c5375..00000000 --- a/merepresenta/static/img/merepresenta/f4.svg +++ /dev/null @@ -1,120 +0,0 @@ - - - -image/svg+xml \ No newline at end of file diff --git a/merepresenta/static/img/merepresenta/f42.svg b/merepresenta/static/img/merepresenta/f42.svg deleted file mode 100644 index 8f09a529..00000000 --- a/merepresenta/static/img/merepresenta/f42.svg +++ /dev/null @@ -1,120 +0,0 @@ - - - -image/svg+xml \ No newline at end of file diff --git a/merepresenta/static/img/merepresenta/f4w.svg b/merepresenta/static/img/merepresenta/f4w.svg deleted file mode 100644 index 0cf9fc59..00000000 --- a/merepresenta/static/img/merepresenta/f4w.svg +++ /dev/null @@ -1,131 +0,0 @@ - - - -image/svg+xml \ No newline at end of file diff --git a/merepresenta/static/img/merepresenta/face.svg b/merepresenta/static/img/merepresenta/face.svg deleted file mode 100644 index 4920aa96..00000000 --- a/merepresenta/static/img/merepresenta/face.svg +++ /dev/null @@ -1,72 +0,0 @@ - - - -image/svg+xml \ No newline at end of file diff --git a/merepresenta/static/img/merepresenta/face2.svg b/merepresenta/static/img/merepresenta/face2.svg deleted file mode 100644 index a9a15aac..00000000 --- a/merepresenta/static/img/merepresenta/face2.svg +++ /dev/null @@ -1,48 +0,0 @@ - -image/svg+xml \ No newline at end of file diff --git a/merepresenta/static/img/merepresenta/face3.svg b/merepresenta/static/img/merepresenta/face3.svg deleted file mode 100644 index c6933073..00000000 --- a/merepresenta/static/img/merepresenta/face3.svg +++ /dev/null @@ -1,71 +0,0 @@ - -image/svg+xml \ No newline at end of file diff --git a/merepresenta/static/img/merepresenta/lgbt-brasil.png b/merepresenta/static/img/merepresenta/lgbt-brasil.png deleted file mode 100644 index 656661c8..00000000 Binary files a/merepresenta/static/img/merepresenta/lgbt-brasil.png and /dev/null differ diff --git a/merepresenta/static/img/merepresenta/logo_2018.svg b/merepresenta/static/img/merepresenta/logo_2018.svg deleted file mode 100644 index 36948230..00000000 --- a/merepresenta/static/img/merepresenta/logo_2018.svg +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/merepresenta/static/img/merepresenta/logo_cfemea-2.png b/merepresenta/static/img/merepresenta/logo_cfemea-2.png deleted file mode 100644 index 785a3fec..00000000 Binary files a/merepresenta/static/img/merepresenta/logo_cfemea-2.png and /dev/null differ diff --git a/merepresenta/static/img/merepresenta/merep_landing_image.svg b/merepresenta/static/img/merepresenta/merep_landing_image.svg deleted file mode 100644 index ab76d768..00000000 --- a/merepresenta/static/img/merepresenta/merep_landing_image.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/merepresenta/static/img/merepresenta/merep_landing_image2.svg b/merepresenta/static/img/merepresenta/merep_landing_image2.svg deleted file mode 100644 index 45df1a5d..00000000 --- a/merepresenta/static/img/merepresenta/merep_landing_image2.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/merepresenta/static/img/merepresenta/pautas-landing/pauta-img-1.jpg b/merepresenta/static/img/merepresenta/pautas-landing/pauta-img-1.jpg deleted file mode 100644 index 4f09a26e..00000000 Binary files a/merepresenta/static/img/merepresenta/pautas-landing/pauta-img-1.jpg and /dev/null differ diff --git a/merepresenta/static/img/merepresenta/pautas-landing/pauta-img-2.jpg b/merepresenta/static/img/merepresenta/pautas-landing/pauta-img-2.jpg deleted file mode 100644 index a6b02ab9..00000000 Binary files a/merepresenta/static/img/merepresenta/pautas-landing/pauta-img-2.jpg and /dev/null differ diff --git a/merepresenta/static/img/merepresenta/pautas-landing/pauta-img-3.jpg b/merepresenta/static/img/merepresenta/pautas-landing/pauta-img-3.jpg deleted file mode 100644 index 8c6cb030..00000000 Binary files a/merepresenta/static/img/merepresenta/pautas-landing/pauta-img-3.jpg and /dev/null differ diff --git a/merepresenta/static/img/merepresenta/pautas-landing/pautas1.png b/merepresenta/static/img/merepresenta/pautas-landing/pautas1.png deleted file mode 100644 index 41807767..00000000 Binary files a/merepresenta/static/img/merepresenta/pautas-landing/pautas1.png and /dev/null differ diff --git a/merepresenta/static/img/merepresenta/pautas-landing/pautas2.png b/merepresenta/static/img/merepresenta/pautas-landing/pautas2.png deleted file mode 100644 index 9bea46ac..00000000 Binary files a/merepresenta/static/img/merepresenta/pautas-landing/pautas2.png and /dev/null differ diff --git a/merepresenta/static/img/merepresenta/pautas-landing/pautas3.png b/merepresenta/static/img/merepresenta/pautas-landing/pautas3.png deleted file mode 100644 index 86018b09..00000000 Binary files a/merepresenta/static/img/merepresenta/pautas-landing/pautas3.png and /dev/null differ diff --git a/merepresenta/static/img/merepresenta/rb0.svg b/merepresenta/static/img/merepresenta/rb0.svg deleted file mode 100644 index a0d01569..00000000 --- a/merepresenta/static/img/merepresenta/rb0.svg +++ /dev/null @@ -1,68 +0,0 @@ - - - -image/svg+xml \ No newline at end of file diff --git a/merepresenta/static/img/merepresenta/rb1.svg b/merepresenta/static/img/merepresenta/rb1.svg deleted file mode 100644 index ee9b743f..00000000 --- a/merepresenta/static/img/merepresenta/rb1.svg +++ /dev/null @@ -1,68 +0,0 @@ - - - -image/svg+xml \ No newline at end of file diff --git a/merepresenta/static/img/merepresenta/rb20.svg b/merepresenta/static/img/merepresenta/rb20.svg deleted file mode 100644 index ced2ad8e..00000000 --- a/merepresenta/static/img/merepresenta/rb20.svg +++ /dev/null @@ -1,54 +0,0 @@ - - - -image/svg+xml \ No newline at end of file diff --git a/merepresenta/static/img/merepresenta/rb20p.svg b/merepresenta/static/img/merepresenta/rb20p.svg deleted file mode 100644 index cbbdecd9..00000000 --- a/merepresenta/static/img/merepresenta/rb20p.svg +++ /dev/null @@ -1,54 +0,0 @@ - - - -image/svg+xml \ No newline at end of file diff --git a/merepresenta/static/img/merepresenta/rb21.svg b/merepresenta/static/img/merepresenta/rb21.svg deleted file mode 100644 index 6e6ef90c..00000000 --- a/merepresenta/static/img/merepresenta/rb21.svg +++ /dev/null @@ -1,63 +0,0 @@ - - - -image/svg+xml \ No newline at end of file diff --git a/merepresenta/static/img/merepresenta/rb21p.svg b/merepresenta/static/img/merepresenta/rb21p.svg deleted file mode 100644 index cd5ab4f1..00000000 --- a/merepresenta/static/img/merepresenta/rb21p.svg +++ /dev/null @@ -1,64 +0,0 @@ - - - -image/svg+xml \ No newline at end of file diff --git a/merepresenta/static/img/merepresenta/sadfacey.svg b/merepresenta/static/img/merepresenta/sadfacey.svg deleted file mode 100644 index c39c46ce..00000000 --- a/merepresenta/static/img/merepresenta/sadfacey.svg +++ /dev/null @@ -1,137 +0,0 @@ - - - -image/svg+xml \ No newline at end of file diff --git a/merepresenta/static/img/merepresenta/ui-icons_444444_256x240.png b/merepresenta/static/img/merepresenta/ui-icons_444444_256x240.png deleted file mode 100644 index 19f664d9..00000000 Binary files a/merepresenta/static/img/merepresenta/ui-icons_444444_256x240.png and /dev/null differ diff --git a/merepresenta/static/img/merepresenta/ui-icons_555555_256x240.png b/merepresenta/static/img/merepresenta/ui-icons_555555_256x240.png deleted file mode 100644 index e965f6d9..00000000 Binary files a/merepresenta/static/img/merepresenta/ui-icons_555555_256x240.png and /dev/null differ diff --git a/merepresenta/static/img/merepresenta/ui-icons_777620_256x240.png b/merepresenta/static/img/merepresenta/ui-icons_777620_256x240.png deleted file mode 100644 index 9785948a..00000000 Binary files a/merepresenta/static/img/merepresenta/ui-icons_777620_256x240.png and /dev/null differ diff --git a/merepresenta/static/img/merepresenta/ui-icons_777777_256x240.png b/merepresenta/static/img/merepresenta/ui-icons_777777_256x240.png deleted file mode 100644 index 323c4564..00000000 Binary files a/merepresenta/static/img/merepresenta/ui-icons_777777_256x240.png and /dev/null differ diff --git a/merepresenta/static/img/merepresenta/ui-icons_cc0000_256x240.png b/merepresenta/static/img/merepresenta/ui-icons_cc0000_256x240.png deleted file mode 100644 index 45ac7787..00000000 Binary files a/merepresenta/static/img/merepresenta/ui-icons_cc0000_256x240.png and /dev/null differ diff --git a/merepresenta/static/img/merepresenta/ui-icons_ffffff_256x240.png b/merepresenta/static/img/merepresenta/ui-icons_ffffff_256x240.png deleted file mode 100644 index fe41d2d0..00000000 Binary files a/merepresenta/static/img/merepresenta/ui-icons_ffffff_256x240.png and /dev/null differ diff --git a/merepresenta/static/img/merepresenta/vote_geral-branco.png b/merepresenta/static/img/merepresenta/vote_geral-branco.png deleted file mode 100644 index b5d2c926..00000000 Binary files a/merepresenta/static/img/merepresenta/vote_geral-branco.png and /dev/null differ diff --git a/merepresenta/static/img/thai85.gif b/merepresenta/static/img/thai85.gif deleted file mode 100644 index 82883d09..00000000 Binary files a/merepresenta/static/img/thai85.gif and /dev/null differ diff --git a/merepresenta/static/img/thumb_merepresenta.jpg b/merepresenta/static/img/thumb_merepresenta.jpg deleted file mode 100644 index 90c22a84..00000000 Binary files a/merepresenta/static/img/thumb_merepresenta.jpg and /dev/null differ diff --git a/merepresenta/static/img/whatsap.png b/merepresenta/static/img/whatsap.png deleted file mode 100644 index 81b448ee..00000000 Binary files a/merepresenta/static/img/whatsap.png and /dev/null differ diff --git a/merepresenta/static/img/zero_candidatos.svg b/merepresenta/static/img/zero_candidatos.svg deleted file mode 100644 index 315bf13f..00000000 --- a/merepresenta/static/img/zero_candidatos.svg +++ /dev/null @@ -1,226 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/merepresenta/static/js/accordion.js b/merepresenta/static/js/accordion.js deleted file mode 100644 index 8e40c77a..00000000 --- a/merepresenta/static/js/accordion.js +++ /dev/null @@ -1,17 +0,0 @@ -$(document).ready(function() { - $(".set > .accordion-header").on("click", function() { - if ($(this).hasClass("active")) { - $(this).removeClass("active"); - $(this) - .siblings(".card-body") - .slideUp(200); - } else { - $(".set > .accordion-header").removeClass("active"); - $(this).addClass("active"); - $(".card-body").slideUp(200); - $(this) - .siblings(".card-body") - .slideDown(200); - } - }); -}); diff --git a/merepresenta/static/js/analytics.js b/merepresenta/static/js/analytics.js deleted file mode 100644 index 4ef37ba8..00000000 --- a/merepresenta/static/js/analytics.js +++ /dev/null @@ -1,7 +0,0 @@ -(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ - (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), - m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) - })(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); - - ga('create', 'UA-124086071-1', 'auto'); - ga('send', 'pageview'); diff --git a/merepresenta/static/js/bootstrap-datepicker.js b/merepresenta/static/js/bootstrap-datepicker.js deleted file mode 100644 index 0fef5109..00000000 --- a/merepresenta/static/js/bootstrap-datepicker.js +++ /dev/null @@ -1,2035 +0,0 @@ -/*! - * Datepicker for Bootstrap v1.8.0 (https://github.com/uxsolutions/bootstrap-datepicker) - * - * Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0) - */ - -(function(factory){ - if (typeof define === 'function' && define.amd) { - define(['jquery'], factory); - } else if (typeof exports === 'object') { - factory(require('jquery')); - } else { - factory(jQuery); - } -}(function($, undefined){ - function UTCDate(){ - return new Date(Date.UTC.apply(Date, arguments)); - } - function UTCToday(){ - var today = new Date(); - return UTCDate(today.getFullYear(), today.getMonth(), today.getDate()); - } - function isUTCEquals(date1, date2) { - return ( - date1.getUTCFullYear() === date2.getUTCFullYear() && - date1.getUTCMonth() === date2.getUTCMonth() && - date1.getUTCDate() === date2.getUTCDate() - ); - } - function alias(method, deprecationMsg){ - return function(){ - if (deprecationMsg !== undefined) { - $.fn.datepicker.deprecated(deprecationMsg); - } - - return this[method].apply(this, arguments); - }; - } - function isValidDate(d) { - return d && !isNaN(d.getTime()); - } - - var DateArray = (function(){ - var extras = { - get: function(i){ - return this.slice(i)[0]; - }, - contains: function(d){ - // Array.indexOf is not cross-browser; - // $.inArray doesn't work with Dates - var val = d && d.valueOf(); - for (var i=0, l=this.length; i < l; i++) - // Use date arithmetic to allow dates with different times to match - if (0 <= this[i].valueOf() - val && this[i].valueOf() - val < 1000*60*60*24) - return i; - return -1; - }, - remove: function(i){ - this.splice(i,1); - }, - replace: function(new_array){ - if (!new_array) - return; - if (!$.isArray(new_array)) - new_array = [new_array]; - this.clear(); - this.push.apply(this, new_array); - }, - clear: function(){ - this.length = 0; - }, - copy: function(){ - var a = new DateArray(); - a.replace(this); - return a; - } - }; - - return function(){ - var a = []; - a.push.apply(a, arguments); - $.extend(a, extras); - return a; - }; - })(); - - - // Picker object - - var Datepicker = function(element, options){ - $.data(element, 'datepicker', this); - this._process_options(options); - - this.dates = new DateArray(); - this.viewDate = this.o.defaultViewDate; - this.focusDate = null; - - this.element = $(element); - this.isInput = this.element.is('input'); - this.inputField = this.isInput ? this.element : this.element.find('input'); - this.component = this.element.hasClass('date') ? this.element.find('.add-on, .input-group-addon, .btn') : false; - if (this.component && this.component.length === 0) - this.component = false; - this.isInline = !this.component && this.element.is('div'); - - this.picker = $(DPGlobal.template); - - // Checking templates and inserting - if (this._check_template(this.o.templates.leftArrow)) { - this.picker.find('.prev').html(this.o.templates.leftArrow); - } - - if (this._check_template(this.o.templates.rightArrow)) { - this.picker.find('.next').html(this.o.templates.rightArrow); - } - - this._buildEvents(); - this._attachEvents(); - - if (this.isInline){ - this.picker.addClass('datepicker-inline').appendTo(this.element); - } - else { - this.picker.addClass('datepicker-dropdown dropdown-menu'); - } - - if (this.o.rtl){ - this.picker.addClass('datepicker-rtl'); - } - - if (this.o.calendarWeeks) { - this.picker.find('.datepicker-days .datepicker-switch, thead .datepicker-title, tfoot .today, tfoot .clear') - .attr('colspan', function(i, val){ - return Number(val) + 1; - }); - } - - this._process_options({ - startDate: this._o.startDate, - endDate: this._o.endDate, - daysOfWeekDisabled: this.o.daysOfWeekDisabled, - daysOfWeekHighlighted: this.o.daysOfWeekHighlighted, - datesDisabled: this.o.datesDisabled - }); - - this._allow_update = false; - this.setViewMode(this.o.startView); - this._allow_update = true; - - this.fillDow(); - this.fillMonths(); - - this.update(); - - if (this.isInline){ - this.show(); - } - }; - - Datepicker.prototype = { - constructor: Datepicker, - - _resolveViewName: function(view){ - $.each(DPGlobal.viewModes, function(i, viewMode){ - if (view === i || $.inArray(view, viewMode.names) !== -1){ - view = i; - return false; - } - }); - - return view; - }, - - _resolveDaysOfWeek: function(daysOfWeek){ - if (!$.isArray(daysOfWeek)) - daysOfWeek = daysOfWeek.split(/[,\s]*/); - return $.map(daysOfWeek, Number); - }, - - _check_template: function(tmp){ - try { - // If empty - if (tmp === undefined || tmp === "") { - return false; - } - // If no html, everything ok - if ((tmp.match(/[<>]/g) || []).length <= 0) { - return true; - } - // Checking if html is fine - var jDom = $(tmp); - return jDom.length > 0; - } - catch (ex) { - return false; - } - }, - - _process_options: function(opts){ - // Store raw options for reference - this._o = $.extend({}, this._o, opts); - // Processed options - var o = this.o = $.extend({}, this._o); - - // Check if "de-DE" style date is available, if not language should - // fallback to 2 letter code eg "de" - var lang = o.language; - if (!dates[lang]){ - lang = lang.split('-')[0]; - if (!dates[lang]) - lang = defaults.language; - } - o.language = lang; - - // Retrieve view index from any aliases - o.startView = this._resolveViewName(o.startView); - o.minViewMode = this._resolveViewName(o.minViewMode); - o.maxViewMode = this._resolveViewName(o.maxViewMode); - - // Check view is between min and max - o.startView = Math.max(this.o.minViewMode, Math.min(this.o.maxViewMode, o.startView)); - - // true, false, or Number > 0 - if (o.multidate !== true){ - o.multidate = Number(o.multidate) || false; - if (o.multidate !== false) - o.multidate = Math.max(0, o.multidate); - } - o.multidateSeparator = String(o.multidateSeparator); - - o.weekStart %= 7; - o.weekEnd = (o.weekStart + 6) % 7; - - var format = DPGlobal.parseFormat(o.format); - if (o.startDate !== -Infinity){ - if (!!o.startDate){ - if (o.startDate instanceof Date) - o.startDate = this._local_to_utc(this._zero_time(o.startDate)); - else - o.startDate = DPGlobal.parseDate(o.startDate, format, o.language, o.assumeNearbyYear); - } - else { - o.startDate = -Infinity; - } - } - if (o.endDate !== Infinity){ - if (!!o.endDate){ - if (o.endDate instanceof Date) - o.endDate = this._local_to_utc(this._zero_time(o.endDate)); - else - o.endDate = DPGlobal.parseDate(o.endDate, format, o.language, o.assumeNearbyYear); - } - else { - o.endDate = Infinity; - } - } - - o.daysOfWeekDisabled = this._resolveDaysOfWeek(o.daysOfWeekDisabled||[]); - o.daysOfWeekHighlighted = this._resolveDaysOfWeek(o.daysOfWeekHighlighted||[]); - - o.datesDisabled = o.datesDisabled||[]; - if (!$.isArray(o.datesDisabled)) { - o.datesDisabled = o.datesDisabled.split(','); - } - o.datesDisabled = $.map(o.datesDisabled, function(d){ - return DPGlobal.parseDate(d, format, o.language, o.assumeNearbyYear); - }); - - var plc = String(o.orientation).toLowerCase().split(/\s+/g), - _plc = o.orientation.toLowerCase(); - plc = $.grep(plc, function(word){ - return /^auto|left|right|top|bottom$/.test(word); - }); - o.orientation = {x: 'auto', y: 'auto'}; - if (!_plc || _plc === 'auto') - ; // no action - else if (plc.length === 1){ - switch (plc[0]){ - case 'top': - case 'bottom': - o.orientation.y = plc[0]; - break; - case 'left': - case 'right': - o.orientation.x = plc[0]; - break; - } - } - else { - _plc = $.grep(plc, function(word){ - return /^left|right$/.test(word); - }); - o.orientation.x = _plc[0] || 'auto'; - - _plc = $.grep(plc, function(word){ - return /^top|bottom$/.test(word); - }); - o.orientation.y = _plc[0] || 'auto'; - } - if (o.defaultViewDate instanceof Date || typeof o.defaultViewDate === 'string') { - o.defaultViewDate = DPGlobal.parseDate(o.defaultViewDate, format, o.language, o.assumeNearbyYear); - } else if (o.defaultViewDate) { - var year = o.defaultViewDate.year || new Date().getFullYear(); - var month = o.defaultViewDate.month || 0; - var day = o.defaultViewDate.day || 1; - o.defaultViewDate = UTCDate(year, month, day); - } else { - o.defaultViewDate = UTCToday(); - } - }, - _events: [], - _secondaryEvents: [], - _applyEvents: function(evs){ - for (var i=0, el, ch, ev; i < evs.length; i++){ - el = evs[i][0]; - if (evs[i].length === 2){ - ch = undefined; - ev = evs[i][1]; - } else if (evs[i].length === 3){ - ch = evs[i][1]; - ev = evs[i][2]; - } - el.on(ev, ch); - } - }, - _unapplyEvents: function(evs){ - for (var i=0, el, ev, ch; i < evs.length; i++){ - el = evs[i][0]; - if (evs[i].length === 2){ - ch = undefined; - ev = evs[i][1]; - } else if (evs[i].length === 3){ - ch = evs[i][1]; - ev = evs[i][2]; - } - el.off(ev, ch); - } - }, - _buildEvents: function(){ - var events = { - keyup: $.proxy(function(e){ - if ($.inArray(e.keyCode, [27, 37, 39, 38, 40, 32, 13, 9]) === -1) - this.update(); - }, this), - keydown: $.proxy(this.keydown, this), - paste: $.proxy(this.paste, this) - }; - - if (this.o.showOnFocus === true) { - events.focus = $.proxy(this.show, this); - } - - if (this.isInput) { // single input - this._events = [ - [this.element, events] - ]; - } - // component: input + button - else if (this.component && this.inputField.length) { - this._events = [ - // For components that are not readonly, allow keyboard nav - [this.inputField, events], - [this.component, { - click: $.proxy(this.show, this) - }] - ]; - } - else { - this._events = [ - [this.element, { - click: $.proxy(this.show, this), - keydown: $.proxy(this.keydown, this) - }] - ]; - } - this._events.push( - // Component: listen for blur on element descendants - [this.element, '*', { - blur: $.proxy(function(e){ - this._focused_from = e.target; - }, this) - }], - // Input: listen for blur on element - [this.element, { - blur: $.proxy(function(e){ - this._focused_from = e.target; - }, this) - }] - ); - - if (this.o.immediateUpdates) { - // Trigger input updates immediately on changed year/month - this._events.push([this.element, { - 'changeYear changeMonth': $.proxy(function(e){ - this.update(e.date); - }, this) - }]); - } - - this._secondaryEvents = [ - [this.picker, { - click: $.proxy(this.click, this) - }], - [this.picker, '.prev, .next', { - click: $.proxy(this.navArrowsClick, this) - }], - [this.picker, '.day:not(.disabled)', { - click: $.proxy(this.dayCellClick, this) - }], - [$(window), { - resize: $.proxy(this.place, this) - }], - [$(document), { - 'mousedown touchstart': $.proxy(function(e){ - // Clicked outside the datepicker, hide it - if (!( - this.element.is(e.target) || - this.element.find(e.target).length || - this.picker.is(e.target) || - this.picker.find(e.target).length || - this.isInline - )){ - this.hide(); - } - }, this) - }] - ]; - }, - _attachEvents: function(){ - this._detachEvents(); - this._applyEvents(this._events); - }, - _detachEvents: function(){ - this._unapplyEvents(this._events); - }, - _attachSecondaryEvents: function(){ - this._detachSecondaryEvents(); - this._applyEvents(this._secondaryEvents); - }, - _detachSecondaryEvents: function(){ - this._unapplyEvents(this._secondaryEvents); - }, - _trigger: function(event, altdate){ - var date = altdate || this.dates.get(-1), - local_date = this._utc_to_local(date); - - this.element.trigger({ - type: event, - date: local_date, - viewMode: this.viewMode, - dates: $.map(this.dates, this._utc_to_local), - format: $.proxy(function(ix, format){ - if (arguments.length === 0){ - ix = this.dates.length - 1; - format = this.o.format; - } else if (typeof ix === 'string'){ - format = ix; - ix = this.dates.length - 1; - } - format = format || this.o.format; - var date = this.dates.get(ix); - return DPGlobal.formatDate(date, format, this.o.language); - }, this) - }); - }, - - show: function(){ - if (this.inputField.prop('disabled') || (this.inputField.prop('readonly') && this.o.enableOnReadonly === false)) - return; - if (!this.isInline) - this.picker.appendTo(this.o.container); - this.place(); - this.picker.show(); - this._attachSecondaryEvents(); - this._trigger('show'); - if ((window.navigator.msMaxTouchPoints || 'ontouchstart' in document) && this.o.disableTouchKeyboard) { - $(this.element).blur(); - } - return this; - }, - - hide: function(){ - if (this.isInline || !this.picker.is(':visible')) - return this; - this.focusDate = null; - this.picker.hide().detach(); - this._detachSecondaryEvents(); - this.setViewMode(this.o.startView); - - if (this.o.forceParse && this.inputField.val()) - this.setValue(); - this._trigger('hide'); - return this; - }, - - destroy: function(){ - this.hide(); - this._detachEvents(); - this._detachSecondaryEvents(); - this.picker.remove(); - delete this.element.data().datepicker; - if (!this.isInput){ - delete this.element.data().date; - } - return this; - }, - - paste: function(e){ - var dateString; - if (e.originalEvent.clipboardData && e.originalEvent.clipboardData.types - && $.inArray('text/plain', e.originalEvent.clipboardData.types) !== -1) { - dateString = e.originalEvent.clipboardData.getData('text/plain'); - } else if (window.clipboardData) { - dateString = window.clipboardData.getData('Text'); - } else { - return; - } - this.setDate(dateString); - this.update(); - e.preventDefault(); - }, - - _utc_to_local: function(utc){ - if (!utc) { - return utc; - } - - var local = new Date(utc.getTime() + (utc.getTimezoneOffset() * 60000)); - - if (local.getTimezoneOffset() !== utc.getTimezoneOffset()) { - local = new Date(utc.getTime() + (local.getTimezoneOffset() * 60000)); - } - - return local; - }, - _local_to_utc: function(local){ - return local && new Date(local.getTime() - (local.getTimezoneOffset()*60000)); - }, - _zero_time: function(local){ - return local && new Date(local.getFullYear(), local.getMonth(), local.getDate()); - }, - _zero_utc_time: function(utc){ - return utc && UTCDate(utc.getUTCFullYear(), utc.getUTCMonth(), utc.getUTCDate()); - }, - - getDates: function(){ - return $.map(this.dates, this._utc_to_local); - }, - - getUTCDates: function(){ - return $.map(this.dates, function(d){ - return new Date(d); - }); - }, - - getDate: function(){ - return this._utc_to_local(this.getUTCDate()); - }, - - getUTCDate: function(){ - var selected_date = this.dates.get(-1); - if (selected_date !== undefined) { - return new Date(selected_date); - } else { - return null; - } - }, - - clearDates: function(){ - this.inputField.val(''); - this.update(); - this._trigger('changeDate'); - - if (this.o.autoclose) { - this.hide(); - } - }, - - setDates: function(){ - var args = $.isArray(arguments[0]) ? arguments[0] : arguments; - this.update.apply(this, args); - this._trigger('changeDate'); - this.setValue(); - return this; - }, - - setUTCDates: function(){ - var args = $.isArray(arguments[0]) ? arguments[0] : arguments; - this.setDates.apply(this, $.map(args, this._utc_to_local)); - return this; - }, - - setDate: alias('setDates'), - setUTCDate: alias('setUTCDates'), - remove: alias('destroy', 'Method `remove` is deprecated and will be removed in version 2.0. Use `destroy` instead'), - - setValue: function(){ - var formatted = this.getFormattedDate(); - this.inputField.val(formatted); - return this; - }, - - getFormattedDate: function(format){ - if (format === undefined) - format = this.o.format; - - var lang = this.o.language; - return $.map(this.dates, function(d){ - return DPGlobal.formatDate(d, format, lang); - }).join(this.o.multidateSeparator); - }, - - getStartDate: function(){ - return this.o.startDate; - }, - - setStartDate: function(startDate){ - this._process_options({startDate: startDate}); - this.update(); - this.updateNavArrows(); - return this; - }, - - getEndDate: function(){ - return this.o.endDate; - }, - - setEndDate: function(endDate){ - this._process_options({endDate: endDate}); - this.update(); - this.updateNavArrows(); - return this; - }, - - setDaysOfWeekDisabled: function(daysOfWeekDisabled){ - this._process_options({daysOfWeekDisabled: daysOfWeekDisabled}); - this.update(); - return this; - }, - - setDaysOfWeekHighlighted: function(daysOfWeekHighlighted){ - this._process_options({daysOfWeekHighlighted: daysOfWeekHighlighted}); - this.update(); - return this; - }, - - setDatesDisabled: function(datesDisabled){ - this._process_options({datesDisabled: datesDisabled}); - this.update(); - return this; - }, - - place: function(){ - if (this.isInline) - return this; - var calendarWidth = this.picker.outerWidth(), - calendarHeight = this.picker.outerHeight(), - visualPadding = 10, - container = $(this.o.container), - windowWidth = container.width(), - scrollTop = this.o.container === 'body' ? $(document).scrollTop() : container.scrollTop(), - appendOffset = container.offset(); - - var parentsZindex = [0]; - this.element.parents().each(function(){ - var itemZIndex = $(this).css('z-index'); - if (itemZIndex !== 'auto' && Number(itemZIndex) !== 0) parentsZindex.push(Number(itemZIndex)); - }); - var zIndex = Math.max.apply(Math, parentsZindex) + this.o.zIndexOffset; - var offset = this.component ? this.component.parent().offset() : this.element.offset(); - var height = this.component ? this.component.outerHeight(true) : this.element.outerHeight(false); - var width = this.component ? this.component.outerWidth(true) : this.element.outerWidth(false); - var left = offset.left - appendOffset.left; - var top = offset.top - appendOffset.top; - - if (this.o.container !== 'body') { - top += scrollTop; - } - - this.picker.removeClass( - 'datepicker-orient-top datepicker-orient-bottom '+ - 'datepicker-orient-right datepicker-orient-left' - ); - - if (this.o.orientation.x !== 'auto'){ - this.picker.addClass('datepicker-orient-' + this.o.orientation.x); - if (this.o.orientation.x === 'right') - left -= calendarWidth - width; - } - // auto x orientation is best-placement: if it crosses a window - // edge, fudge it sideways - else { - if (offset.left < 0) { - // component is outside the window on the left side. Move it into visible range - this.picker.addClass('datepicker-orient-left'); - left -= offset.left - visualPadding; - } else if (left + calendarWidth > windowWidth) { - // the calendar passes the widow right edge. Align it to component right side - this.picker.addClass('datepicker-orient-right'); - left += width - calendarWidth; - } else { - if (this.o.rtl) { - // Default to right - this.picker.addClass('datepicker-orient-right'); - } else { - // Default to left - this.picker.addClass('datepicker-orient-left'); - } - } - } - - // auto y orientation is best-situation: top or bottom, no fudging, - // decision based on which shows more of the calendar - var yorient = this.o.orientation.y, - top_overflow; - if (yorient === 'auto'){ - top_overflow = -scrollTop + top - calendarHeight; - yorient = top_overflow < 0 ? 'bottom' : 'top'; - } - - this.picker.addClass('datepicker-orient-' + yorient); - if (yorient === 'top') - top -= calendarHeight + parseInt(this.picker.css('padding-top')); - else - top += height; - - if (this.o.rtl) { - var right = windowWidth - (left + width); - this.picker.css({ - top: top, - right: right, - zIndex: zIndex - }); - } else { - this.picker.css({ - top: top, - left: left, - zIndex: zIndex - }); - } - return this; - }, - - _allow_update: true, - update: function(){ - if (!this._allow_update) - return this; - - var oldDates = this.dates.copy(), - dates = [], - fromArgs = false; - if (arguments.length){ - $.each(arguments, $.proxy(function(i, date){ - if (date instanceof Date) - date = this._local_to_utc(date); - dates.push(date); - }, this)); - fromArgs = true; - } else { - dates = this.isInput - ? this.element.val() - : this.element.data('date') || this.inputField.val(); - if (dates && this.o.multidate) - dates = dates.split(this.o.multidateSeparator); - else - dates = [dates]; - delete this.element.data().date; - } - - dates = $.map(dates, $.proxy(function(date){ - return DPGlobal.parseDate(date, this.o.format, this.o.language, this.o.assumeNearbyYear); - }, this)); - dates = $.grep(dates, $.proxy(function(date){ - return ( - !this.dateWithinRange(date) || - !date - ); - }, this), true); - this.dates.replace(dates); - - if (this.o.updateViewDate) { - if (this.dates.length) - this.viewDate = new Date(this.dates.get(-1)); - else if (this.viewDate < this.o.startDate) - this.viewDate = new Date(this.o.startDate); - else if (this.viewDate > this.o.endDate) - this.viewDate = new Date(this.o.endDate); - else - this.viewDate = this.o.defaultViewDate; - } - - if (fromArgs){ - // setting date by clicking - this.setValue(); - this.element.change(); - } - else if (this.dates.length){ - // setting date by typing - if (String(oldDates) !== String(this.dates) && fromArgs) { - this._trigger('changeDate'); - this.element.change(); - } - } - if (!this.dates.length && oldDates.length) { - this._trigger('clearDate'); - this.element.change(); - } - - this.fill(); - return this; - }, - - fillDow: function(){ - if (this.o.showWeekDays) { - var dowCnt = this.o.weekStart, - html = ''; - if (this.o.calendarWeeks){ - html += ' '; - } - while (dowCnt < this.o.weekStart + 7){ - html += ''+dates[this.o.language].daysMin[(dowCnt++)%7]+''; - } - html += ''; - this.picker.find('.datepicker-days thead').append(html); - } - }, - - fillMonths: function(){ - var localDate = this._utc_to_local(this.viewDate); - var html = ''; - var focused; - for (var i = 0; i < 12; i++){ - focused = localDate && localDate.getMonth() === i ? ' focused' : ''; - html += '' + dates[this.o.language].monthsShort[i] + ''; - } - this.picker.find('.datepicker-months td').html(html); - }, - - setRange: function(range){ - if (!range || !range.length) - delete this.range; - else - this.range = $.map(range, function(d){ - return d.valueOf(); - }); - this.fill(); - }, - - getClassNames: function(date){ - var cls = [], - year = this.viewDate.getUTCFullYear(), - month = this.viewDate.getUTCMonth(), - today = UTCToday(); - if (date.getUTCFullYear() < year || (date.getUTCFullYear() === year && date.getUTCMonth() < month)){ - cls.push('old'); - } else if (date.getUTCFullYear() > year || (date.getUTCFullYear() === year && date.getUTCMonth() > month)){ - cls.push('new'); - } - if (this.focusDate && date.valueOf() === this.focusDate.valueOf()) - cls.push('focused'); - // Compare internal UTC date with UTC today, not local today - if (this.o.todayHighlight && isUTCEquals(date, today)) { - cls.push('today'); - } - if (this.dates.contains(date) !== -1) - cls.push('active'); - if (!this.dateWithinRange(date)){ - cls.push('disabled'); - } - if (this.dateIsDisabled(date)){ - cls.push('disabled', 'disabled-date'); - } - if ($.inArray(date.getUTCDay(), this.o.daysOfWeekHighlighted) !== -1){ - cls.push('highlighted'); - } - - if (this.range){ - if (date > this.range[0] && date < this.range[this.range.length-1]){ - cls.push('range'); - } - if ($.inArray(date.valueOf(), this.range) !== -1){ - cls.push('selected'); - } - if (date.valueOf() === this.range[0]){ - cls.push('range-start'); - } - if (date.valueOf() === this.range[this.range.length-1]){ - cls.push('range-end'); - } - } - return cls; - }, - - _fill_yearsView: function(selector, cssClass, factor, year, startYear, endYear, beforeFn){ - var html = ''; - var step = factor / 10; - var view = this.picker.find(selector); - var startVal = Math.floor(year / factor) * factor; - var endVal = startVal + step * 9; - var focusedVal = Math.floor(this.viewDate.getFullYear() / step) * step; - var selected = $.map(this.dates, function(d){ - return Math.floor(d.getUTCFullYear() / step) * step; - }); - - var classes, tooltip, before; - for (var currVal = startVal - step; currVal <= endVal + step; currVal += step) { - classes = [cssClass]; - tooltip = null; - - if (currVal === startVal - step) { - classes.push('old'); - } else if (currVal === endVal + step) { - classes.push('new'); - } - if ($.inArray(currVal, selected) !== -1) { - classes.push('active'); - } - if (currVal < startYear || currVal > endYear) { - classes.push('disabled'); - } - if (currVal === focusedVal) { - classes.push('focused'); - } - - if (beforeFn !== $.noop) { - before = beforeFn(new Date(currVal, 0, 1)); - if (before === undefined) { - before = {}; - } else if (typeof before === 'boolean') { - before = {enabled: before}; - } else if (typeof before === 'string') { - before = {classes: before}; - } - if (before.enabled === false) { - classes.push('disabled'); - } - if (before.classes) { - classes = classes.concat(before.classes.split(/\s+/)); - } - if (before.tooltip) { - tooltip = before.tooltip; - } - } - - html += '' + currVal + ''; - } - - view.find('.datepicker-switch').text(startVal + '-' + endVal); - view.find('td').html(html); - }, - - fill: function(){ - var d = new Date(this.viewDate), - year = d.getUTCFullYear(), - month = d.getUTCMonth(), - startYear = this.o.startDate !== -Infinity ? this.o.startDate.getUTCFullYear() : -Infinity, - startMonth = this.o.startDate !== -Infinity ? this.o.startDate.getUTCMonth() : -Infinity, - endYear = this.o.endDate !== Infinity ? this.o.endDate.getUTCFullYear() : Infinity, - endMonth = this.o.endDate !== Infinity ? this.o.endDate.getUTCMonth() : Infinity, - todaytxt = dates[this.o.language].today || dates['en'].today || '', - cleartxt = dates[this.o.language].clear || dates['en'].clear || '', - titleFormat = dates[this.o.language].titleFormat || dates['en'].titleFormat, - tooltip, - before; - if (isNaN(year) || isNaN(month)) - return; - this.picker.find('.datepicker-days .datepicker-switch') - .text(DPGlobal.formatDate(d, titleFormat, this.o.language)); - this.picker.find('tfoot .today') - .text(todaytxt) - .css('display', this.o.todayBtn === true || this.o.todayBtn === 'linked' ? 'table-cell' : 'none'); - this.picker.find('tfoot .clear') - .text(cleartxt) - .css('display', this.o.clearBtn === true ? 'table-cell' : 'none'); - this.picker.find('thead .datepicker-title') - .text(this.o.title) - .css('display', typeof this.o.title === 'string' && this.o.title !== '' ? 'table-cell' : 'none'); - this.updateNavArrows(); - this.fillMonths(); - var prevMonth = UTCDate(year, month, 0), - day = prevMonth.getUTCDate(); - prevMonth.setUTCDate(day - (prevMonth.getUTCDay() - this.o.weekStart + 7)%7); - var nextMonth = new Date(prevMonth); - if (prevMonth.getUTCFullYear() < 100){ - nextMonth.setUTCFullYear(prevMonth.getUTCFullYear()); - } - nextMonth.setUTCDate(nextMonth.getUTCDate() + 42); - nextMonth = nextMonth.valueOf(); - var html = []; - var weekDay, clsName; - while (prevMonth.valueOf() < nextMonth){ - weekDay = prevMonth.getUTCDay(); - if (weekDay === this.o.weekStart){ - html.push(''); - if (this.o.calendarWeeks){ - // ISO 8601: First week contains first thursday. - // ISO also states week starts on Monday, but we can be more abstract here. - var - // Start of current week: based on weekstart/current date - ws = new Date(+prevMonth + (this.o.weekStart - weekDay - 7) % 7 * 864e5), - // Thursday of this week - th = new Date(Number(ws) + (7 + 4 - ws.getUTCDay()) % 7 * 864e5), - // First Thursday of year, year from thursday - yth = new Date(Number(yth = UTCDate(th.getUTCFullYear(), 0, 1)) + (7 + 4 - yth.getUTCDay()) % 7 * 864e5), - // Calendar week: ms between thursdays, div ms per day, div 7 days - calWeek = (th - yth) / 864e5 / 7 + 1; - html.push(''+ calWeek +''); - } - } - clsName = this.getClassNames(prevMonth); - clsName.push('day'); - - var content = prevMonth.getUTCDate(); - - if (this.o.beforeShowDay !== $.noop){ - before = this.o.beforeShowDay(this._utc_to_local(prevMonth)); - if (before === undefined) - before = {}; - else if (typeof before === 'boolean') - before = {enabled: before}; - else if (typeof before === 'string') - before = {classes: before}; - if (before.enabled === false) - clsName.push('disabled'); - if (before.classes) - clsName = clsName.concat(before.classes.split(/\s+/)); - if (before.tooltip) - tooltip = before.tooltip; - if (before.content) - content = before.content; - } - - //Check if uniqueSort exists (supported by jquery >=1.12 and >=2.2) - //Fallback to unique function for older jquery versions - if ($.isFunction($.uniqueSort)) { - clsName = $.uniqueSort(clsName); - } else { - clsName = $.unique(clsName); - } - - html.push('' + content + ''); - tooltip = null; - if (weekDay === this.o.weekEnd){ - html.push(''); - } - prevMonth.setUTCDate(prevMonth.getUTCDate() + 1); - } - this.picker.find('.datepicker-days tbody').html(html.join('')); - - var monthsTitle = dates[this.o.language].monthsTitle || dates['en'].monthsTitle || 'Months'; - var months = this.picker.find('.datepicker-months') - .find('.datepicker-switch') - .text(this.o.maxViewMode < 2 ? monthsTitle : year) - .end() - .find('tbody span').removeClass('active'); - - $.each(this.dates, function(i, d){ - if (d.getUTCFullYear() === year) - months.eq(d.getUTCMonth()).addClass('active'); - }); - - if (year < startYear || year > endYear){ - months.addClass('disabled'); - } - if (year === startYear){ - months.slice(0, startMonth).addClass('disabled'); - } - if (year === endYear){ - months.slice(endMonth+1).addClass('disabled'); - } - - if (this.o.beforeShowMonth !== $.noop){ - var that = this; - $.each(months, function(i, month){ - var moDate = new Date(year, i, 1); - var before = that.o.beforeShowMonth(moDate); - if (before === undefined) - before = {}; - else if (typeof before === 'boolean') - before = {enabled: before}; - else if (typeof before === 'string') - before = {classes: before}; - if (before.enabled === false && !$(month).hasClass('disabled')) - $(month).addClass('disabled'); - if (before.classes) - $(month).addClass(before.classes); - if (before.tooltip) - $(month).prop('title', before.tooltip); - }); - } - - // Generating decade/years picker - this._fill_yearsView( - '.datepicker-years', - 'year', - 10, - year, - startYear, - endYear, - this.o.beforeShowYear - ); - - // Generating century/decades picker - this._fill_yearsView( - '.datepicker-decades', - 'decade', - 100, - year, - startYear, - endYear, - this.o.beforeShowDecade - ); - - // Generating millennium/centuries picker - this._fill_yearsView( - '.datepicker-centuries', - 'century', - 1000, - year, - startYear, - endYear, - this.o.beforeShowCentury - ); - }, - - updateNavArrows: function(){ - if (!this._allow_update) - return; - - var d = new Date(this.viewDate), - year = d.getUTCFullYear(), - month = d.getUTCMonth(), - startYear = this.o.startDate !== -Infinity ? this.o.startDate.getUTCFullYear() : -Infinity, - startMonth = this.o.startDate !== -Infinity ? this.o.startDate.getUTCMonth() : -Infinity, - endYear = this.o.endDate !== Infinity ? this.o.endDate.getUTCFullYear() : Infinity, - endMonth = this.o.endDate !== Infinity ? this.o.endDate.getUTCMonth() : Infinity, - prevIsDisabled, - nextIsDisabled, - factor = 1; - switch (this.viewMode){ - case 4: - factor *= 10; - /* falls through */ - case 3: - factor *= 10; - /* falls through */ - case 2: - factor *= 10; - /* falls through */ - case 1: - prevIsDisabled = Math.floor(year / factor) * factor < startYear; - nextIsDisabled = Math.floor(year / factor) * factor + factor > endYear; - break; - case 0: - prevIsDisabled = year <= startYear && month < startMonth; - nextIsDisabled = year >= endYear && month > endMonth; - break; - } - - this.picker.find('.prev').toggleClass('disabled', prevIsDisabled); - this.picker.find('.next').toggleClass('disabled', nextIsDisabled); - }, - - click: function(e){ - e.preventDefault(); - e.stopPropagation(); - - var target, dir, day, year, month; - target = $(e.target); - - // Clicked on the switch - if (target.hasClass('datepicker-switch') && this.viewMode !== this.o.maxViewMode){ - this.setViewMode(this.viewMode + 1); - } - - // Clicked on today button - if (target.hasClass('today') && !target.hasClass('day')){ - this.setViewMode(0); - this._setDate(UTCToday(), this.o.todayBtn === 'linked' ? null : 'view'); - } - - // Clicked on clear button - if (target.hasClass('clear')){ - this.clearDates(); - } - - if (!target.hasClass('disabled')){ - // Clicked on a month, year, decade, century - if (target.hasClass('month') - || target.hasClass('year') - || target.hasClass('decade') - || target.hasClass('century')) { - this.viewDate.setUTCDate(1); - - day = 1; - if (this.viewMode === 1){ - month = target.parent().find('span').index(target); - year = this.viewDate.getUTCFullYear(); - this.viewDate.setUTCMonth(month); - } else { - month = 0; - year = Number(target.text()); - this.viewDate.setUTCFullYear(year); - } - - this._trigger(DPGlobal.viewModes[this.viewMode - 1].e, this.viewDate); - - if (this.viewMode === this.o.minViewMode){ - this._setDate(UTCDate(year, month, day)); - } else { - this.setViewMode(this.viewMode - 1); - this.fill(); - } - } - } - - if (this.picker.is(':visible') && this._focused_from){ - this._focused_from.focus(); - } - delete this._focused_from; - }, - - dayCellClick: function(e){ - var $target = $(e.currentTarget); - var timestamp = $target.data('date'); - var date = new Date(timestamp); - - if (this.o.updateViewDate) { - if (date.getUTCFullYear() !== this.viewDate.getUTCFullYear()) { - this._trigger('changeYear', this.viewDate); - } - - if (date.getUTCMonth() !== this.viewDate.getUTCMonth()) { - this._trigger('changeMonth', this.viewDate); - } - } - this._setDate(date); - }, - - // Clicked on prev or next - navArrowsClick: function(e){ - var $target = $(e.currentTarget); - var dir = $target.hasClass('prev') ? -1 : 1; - if (this.viewMode !== 0){ - dir *= DPGlobal.viewModes[this.viewMode].navStep * 12; - } - this.viewDate = this.moveMonth(this.viewDate, dir); - this._trigger(DPGlobal.viewModes[this.viewMode].e, this.viewDate); - this.fill(); - }, - - _toggle_multidate: function(date){ - var ix = this.dates.contains(date); - if (!date){ - this.dates.clear(); - } - - if (ix !== -1){ - if (this.o.multidate === true || this.o.multidate > 1 || this.o.toggleActive){ - this.dates.remove(ix); - } - } else if (this.o.multidate === false) { - this.dates.clear(); - this.dates.push(date); - } - else { - this.dates.push(date); - } - - if (typeof this.o.multidate === 'number') - while (this.dates.length > this.o.multidate) - this.dates.remove(0); - }, - - _setDate: function(date, which){ - if (!which || which === 'date') - this._toggle_multidate(date && new Date(date)); - if ((!which && this.o.updateViewDate) || which === 'view') - this.viewDate = date && new Date(date); - - this.fill(); - this.setValue(); - if (!which || which !== 'view') { - this._trigger('changeDate'); - } - this.inputField.trigger('change'); - if (this.o.autoclose && (!which || which === 'date')){ - this.hide(); - } - }, - - moveDay: function(date, dir){ - var newDate = new Date(date); - newDate.setUTCDate(date.getUTCDate() + dir); - - return newDate; - }, - - moveWeek: function(date, dir){ - return this.moveDay(date, dir * 7); - }, - - moveMonth: function(date, dir){ - if (!isValidDate(date)) - return this.o.defaultViewDate; - if (!dir) - return date; - var new_date = new Date(date.valueOf()), - day = new_date.getUTCDate(), - month = new_date.getUTCMonth(), - mag = Math.abs(dir), - new_month, test; - dir = dir > 0 ? 1 : -1; - if (mag === 1){ - test = dir === -1 - // If going back one month, make sure month is not current month - // (eg, Mar 31 -> Feb 31 == Feb 28, not Mar 02) - ? function(){ - return new_date.getUTCMonth() === month; - } - // If going forward one month, make sure month is as expected - // (eg, Jan 31 -> Feb 31 == Feb 28, not Mar 02) - : function(){ - return new_date.getUTCMonth() !== new_month; - }; - new_month = month + dir; - new_date.setUTCMonth(new_month); - // Dec -> Jan (12) or Jan -> Dec (-1) -- limit expected date to 0-11 - new_month = (new_month + 12) % 12; - } - else { - // For magnitudes >1, move one month at a time... - for (var i=0; i < mag; i++) - // ...which might decrease the day (eg, Jan 31 to Feb 28, etc)... - new_date = this.moveMonth(new_date, dir); - // ...then reset the day, keeping it in the new month - new_month = new_date.getUTCMonth(); - new_date.setUTCDate(day); - test = function(){ - return new_month !== new_date.getUTCMonth(); - }; - } - // Common date-resetting loop -- if date is beyond end of month, make it - // end of month - while (test()){ - new_date.setUTCDate(--day); - new_date.setUTCMonth(new_month); - } - return new_date; - }, - - moveYear: function(date, dir){ - return this.moveMonth(date, dir*12); - }, - - moveAvailableDate: function(date, dir, fn){ - do { - date = this[fn](date, dir); - - if (!this.dateWithinRange(date)) - return false; - - fn = 'moveDay'; - } - while (this.dateIsDisabled(date)); - - return date; - }, - - weekOfDateIsDisabled: function(date){ - return $.inArray(date.getUTCDay(), this.o.daysOfWeekDisabled) !== -1; - }, - - dateIsDisabled: function(date){ - return ( - this.weekOfDateIsDisabled(date) || - $.grep(this.o.datesDisabled, function(d){ - return isUTCEquals(date, d); - }).length > 0 - ); - }, - - dateWithinRange: function(date){ - return date >= this.o.startDate && date <= this.o.endDate; - }, - - keydown: function(e){ - if (!this.picker.is(':visible')){ - if (e.keyCode === 40 || e.keyCode === 27) { // allow down to re-show picker - this.show(); - e.stopPropagation(); - } - return; - } - var dateChanged = false, - dir, newViewDate, - focusDate = this.focusDate || this.viewDate; - switch (e.keyCode){ - case 27: // escape - if (this.focusDate){ - this.focusDate = null; - this.viewDate = this.dates.get(-1) || this.viewDate; - this.fill(); - } - else - this.hide(); - e.preventDefault(); - e.stopPropagation(); - break; - case 37: // left - case 38: // up - case 39: // right - case 40: // down - if (!this.o.keyboardNavigation || this.o.daysOfWeekDisabled.length === 7) - break; - dir = e.keyCode === 37 || e.keyCode === 38 ? -1 : 1; - if (this.viewMode === 0) { - if (e.ctrlKey){ - newViewDate = this.moveAvailableDate(focusDate, dir, 'moveYear'); - - if (newViewDate) - this._trigger('changeYear', this.viewDate); - } else if (e.shiftKey){ - newViewDate = this.moveAvailableDate(focusDate, dir, 'moveMonth'); - - if (newViewDate) - this._trigger('changeMonth', this.viewDate); - } else if (e.keyCode === 37 || e.keyCode === 39){ - newViewDate = this.moveAvailableDate(focusDate, dir, 'moveDay'); - } else if (!this.weekOfDateIsDisabled(focusDate)){ - newViewDate = this.moveAvailableDate(focusDate, dir, 'moveWeek'); - } - } else if (this.viewMode === 1) { - if (e.keyCode === 38 || e.keyCode === 40) { - dir = dir * 4; - } - newViewDate = this.moveAvailableDate(focusDate, dir, 'moveMonth'); - } else if (this.viewMode === 2) { - if (e.keyCode === 38 || e.keyCode === 40) { - dir = dir * 4; - } - newViewDate = this.moveAvailableDate(focusDate, dir, 'moveYear'); - } - if (newViewDate){ - this.focusDate = this.viewDate = newViewDate; - this.setValue(); - this.fill(); - e.preventDefault(); - } - break; - case 13: // enter - if (!this.o.forceParse) - break; - focusDate = this.focusDate || this.dates.get(-1) || this.viewDate; - if (this.o.keyboardNavigation) { - this._toggle_multidate(focusDate); - dateChanged = true; - } - this.focusDate = null; - this.viewDate = this.dates.get(-1) || this.viewDate; - this.setValue(); - this.fill(); - if (this.picker.is(':visible')){ - e.preventDefault(); - e.stopPropagation(); - if (this.o.autoclose) - this.hide(); - } - break; - case 9: // tab - this.focusDate = null; - this.viewDate = this.dates.get(-1) || this.viewDate; - this.fill(); - this.hide(); - break; - } - if (dateChanged){ - if (this.dates.length) - this._trigger('changeDate'); - else - this._trigger('clearDate'); - this.inputField.trigger('change'); - } - }, - - setViewMode: function(viewMode){ - this.viewMode = viewMode; - this.picker - .children('div') - .hide() - .filter('.datepicker-' + DPGlobal.viewModes[this.viewMode].clsName) - .show(); - this.updateNavArrows(); - this._trigger('changeViewMode', new Date(this.viewDate)); - } - }; - - var DateRangePicker = function(element, options){ - $.data(element, 'datepicker', this); - this.element = $(element); - this.inputs = $.map(options.inputs, function(i){ - return i.jquery ? i[0] : i; - }); - delete options.inputs; - - this.keepEmptyValues = options.keepEmptyValues; - delete options.keepEmptyValues; - - datepickerPlugin.call($(this.inputs), options) - .on('changeDate', $.proxy(this.dateUpdated, this)); - - this.pickers = $.map(this.inputs, function(i){ - return $.data(i, 'datepicker'); - }); - this.updateDates(); - }; - DateRangePicker.prototype = { - updateDates: function(){ - this.dates = $.map(this.pickers, function(i){ - return i.getUTCDate(); - }); - this.updateRanges(); - }, - updateRanges: function(){ - var range = $.map(this.dates, function(d){ - return d.valueOf(); - }); - $.each(this.pickers, function(i, p){ - p.setRange(range); - }); - }, - clearDates: function(){ - $.each(this.pickers, function(i, p){ - p.clearDates(); - }); - }, - dateUpdated: function(e){ - // `this.updating` is a workaround for preventing infinite recursion - // between `changeDate` triggering and `setUTCDate` calling. Until - // there is a better mechanism. - if (this.updating) - return; - this.updating = true; - - var dp = $.data(e.target, 'datepicker'); - - if (dp === undefined) { - return; - } - - var new_date = dp.getUTCDate(), - keep_empty_values = this.keepEmptyValues, - i = $.inArray(e.target, this.inputs), - j = i - 1, - k = i + 1, - l = this.inputs.length; - if (i === -1) - return; - - $.each(this.pickers, function(i, p){ - if (!p.getUTCDate() && (p === dp || !keep_empty_values)) - p.setUTCDate(new_date); - }); - - if (new_date < this.dates[j]){ - // Date being moved earlier/left - while (j >= 0 && new_date < this.dates[j]){ - this.pickers[j--].setUTCDate(new_date); - } - } else if (new_date > this.dates[k]){ - // Date being moved later/right - while (k < l && new_date > this.dates[k]){ - this.pickers[k++].setUTCDate(new_date); - } - } - this.updateDates(); - - delete this.updating; - }, - destroy: function(){ - $.map(this.pickers, function(p){ p.destroy(); }); - $(this.inputs).off('changeDate', this.dateUpdated); - delete this.element.data().datepicker; - }, - remove: alias('destroy', 'Method `remove` is deprecated and will be removed in version 2.0. Use `destroy` instead') - }; - - function opts_from_el(el, prefix){ - // Derive options from element data-attrs - var data = $(el).data(), - out = {}, inkey, - replace = new RegExp('^' + prefix.toLowerCase() + '([A-Z])'); - prefix = new RegExp('^' + prefix.toLowerCase()); - function re_lower(_,a){ - return a.toLowerCase(); - } - for (var key in data) - if (prefix.test(key)){ - inkey = key.replace(replace, re_lower); - out[inkey] = data[key]; - } - return out; - } - - function opts_from_locale(lang){ - // Derive options from locale plugins - var out = {}; - // Check if "de-DE" style date is available, if not language should - // fallback to 2 letter code eg "de" - if (!dates[lang]){ - lang = lang.split('-')[0]; - if (!dates[lang]) - return; - } - var d = dates[lang]; - $.each(locale_opts, function(i,k){ - if (k in d) - out[k] = d[k]; - }); - return out; - } - - var old = $.fn.datepicker; - var datepickerPlugin = function(option){ - var args = Array.apply(null, arguments); - args.shift(); - var internal_return; - this.each(function(){ - var $this = $(this), - data = $this.data('datepicker'), - options = typeof option === 'object' && option; - if (!data){ - var elopts = opts_from_el(this, 'date'), - // Preliminary otions - xopts = $.extend({}, defaults, elopts, options), - locopts = opts_from_locale(xopts.language), - // Options priority: js args, data-attrs, locales, defaults - opts = $.extend({}, defaults, locopts, elopts, options); - if ($this.hasClass('input-daterange') || opts.inputs){ - $.extend(opts, { - inputs: opts.inputs || $this.find('input').toArray() - }); - data = new DateRangePicker(this, opts); - } - else { - data = new Datepicker(this, opts); - } - $this.data('datepicker', data); - } - if (typeof option === 'string' && typeof data[option] === 'function'){ - internal_return = data[option].apply(data, args); - } - }); - - if ( - internal_return === undefined || - internal_return instanceof Datepicker || - internal_return instanceof DateRangePicker - ) - return this; - - if (this.length > 1) - throw new Error('Using only allowed for the collection of a single element (' + option + ' function)'); - else - return internal_return; - }; - $.fn.datepicker = datepickerPlugin; - - var defaults = $.fn.datepicker.defaults = { - assumeNearbyYear: false, - autoclose: false, - beforeShowDay: $.noop, - beforeShowMonth: $.noop, - beforeShowYear: $.noop, - beforeShowDecade: $.noop, - beforeShowCentury: $.noop, - calendarWeeks: false, - clearBtn: false, - toggleActive: false, - daysOfWeekDisabled: [], - daysOfWeekHighlighted: [], - datesDisabled: [], - endDate: Infinity, - forceParse: true, - format: 'mm/dd/yyyy', - keepEmptyValues: false, - keyboardNavigation: true, - language: 'en', - minViewMode: 0, - maxViewMode: 4, - multidate: false, - multidateSeparator: ',', - orientation: "auto", - rtl: false, - startDate: -Infinity, - startView: 0, - todayBtn: false, - todayHighlight: false, - updateViewDate: true, - weekStart: 0, - disableTouchKeyboard: false, - enableOnReadonly: true, - showOnFocus: true, - zIndexOffset: 10, - container: 'body', - immediateUpdates: false, - title: '', - templates: { - leftArrow: '«', - rightArrow: '»' - }, - showWeekDays: true - }; - var locale_opts = $.fn.datepicker.locale_opts = [ - 'format', - 'rtl', - 'weekStart' - ]; - $.fn.datepicker.Constructor = Datepicker; - var dates = $.fn.datepicker.dates = { - en: { - days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], - daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], - daysMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"], - months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], - monthsShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], - today: "Today", - clear: "Clear", - titleFormat: "MM yyyy" - } - }; - - var DPGlobal = { - viewModes: [ - { - names: ['days', 'month'], - clsName: 'days', - e: 'changeMonth' - }, - { - names: ['months', 'year'], - clsName: 'months', - e: 'changeYear', - navStep: 1 - }, - { - names: ['years', 'decade'], - clsName: 'years', - e: 'changeDecade', - navStep: 10 - }, - { - names: ['decades', 'century'], - clsName: 'decades', - e: 'changeCentury', - navStep: 100 - }, - { - names: ['centuries', 'millennium'], - clsName: 'centuries', - e: 'changeMillennium', - navStep: 1000 - } - ], - validParts: /dd?|DD?|mm?|MM?|yy(?:yy)?/g, - nonpunctuation: /[^ -\/:-@\u5e74\u6708\u65e5\[-`{-~\t\n\r]+/g, - parseFormat: function(format){ - if (typeof format.toValue === 'function' && typeof format.toDisplay === 'function') - return format; - // IE treats \0 as a string end in inputs (truncating the value), - // so it's a bad format delimiter, anyway - var separators = format.replace(this.validParts, '\0').split('\0'), - parts = format.match(this.validParts); - if (!separators || !separators.length || !parts || parts.length === 0){ - throw new Error("Invalid date format."); - } - return {separators: separators, parts: parts}; - }, - parseDate: function(date, format, language, assumeNearby){ - if (!date) - return undefined; - if (date instanceof Date) - return date; - if (typeof format === 'string') - format = DPGlobal.parseFormat(format); - if (format.toValue) - return format.toValue(date, format, language); - var fn_map = { - d: 'moveDay', - m: 'moveMonth', - w: 'moveWeek', - y: 'moveYear' - }, - dateAliases = { - yesterday: '-1d', - today: '+0d', - tomorrow: '+1d' - }, - parts, part, dir, i, fn; - if (date in dateAliases){ - date = dateAliases[date]; - } - if (/^[\-+]\d+[dmwy]([\s,]+[\-+]\d+[dmwy])*$/i.test(date)){ - parts = date.match(/([\-+]\d+)([dmwy])/gi); - date = new Date(); - for (i=0; i < parts.length; i++){ - part = parts[i].match(/([\-+]\d+)([dmwy])/i); - dir = Number(part[1]); - fn = fn_map[part[2].toLowerCase()]; - date = Datepicker.prototype[fn](date, dir); - } - return Datepicker.prototype._zero_utc_time(date); - } - - parts = date && date.match(this.nonpunctuation) || []; - - function applyNearbyYear(year, threshold){ - if (threshold === true) - threshold = 10; - - // if year is 2 digits or less, than the user most likely is trying to get a recent century - if (year < 100){ - year += 2000; - // if the new year is more than threshold years in advance, use last century - if (year > ((new Date()).getFullYear()+threshold)){ - year -= 100; - } - } - - return year; - } - - var parsed = {}, - setters_order = ['yyyy', 'yy', 'M', 'MM', 'm', 'mm', 'd', 'dd'], - setters_map = { - yyyy: function(d,v){ - return d.setUTCFullYear(assumeNearby ? applyNearbyYear(v, assumeNearby) : v); - }, - m: function(d,v){ - if (isNaN(d)) - return d; - v -= 1; - while (v < 0) v += 12; - v %= 12; - d.setUTCMonth(v); - while (d.getUTCMonth() !== v) - d.setUTCDate(d.getUTCDate()-1); - return d; - }, - d: function(d,v){ - return d.setUTCDate(v); - } - }, - val, filtered; - setters_map['yy'] = setters_map['yyyy']; - setters_map['M'] = setters_map['MM'] = setters_map['mm'] = setters_map['m']; - setters_map['dd'] = setters_map['d']; - date = UTCToday(); - var fparts = format.parts.slice(); - // Remove noop parts - if (parts.length !== fparts.length){ - fparts = $(fparts).filter(function(i,p){ - return $.inArray(p, setters_order) !== -1; - }).toArray(); - } - // Process remainder - function match_part(){ - var m = this.slice(0, parts[i].length), - p = parts[i].slice(0, m.length); - return m.toLowerCase() === p.toLowerCase(); - } - if (parts.length === fparts.length){ - var cnt; - for (i=0, cnt = fparts.length; i < cnt; i++){ - val = parseInt(parts[i], 10); - part = fparts[i]; - if (isNaN(val)){ - switch (part){ - case 'MM': - filtered = $(dates[language].months).filter(match_part); - val = $.inArray(filtered[0], dates[language].months) + 1; - break; - case 'M': - filtered = $(dates[language].monthsShort).filter(match_part); - val = $.inArray(filtered[0], dates[language].monthsShort) + 1; - break; - } - } - parsed[part] = val; - } - var _date, s; - for (i=0; i < setters_order.length; i++){ - s = setters_order[i]; - if (s in parsed && !isNaN(parsed[s])){ - _date = new Date(date); - setters_map[s](_date, parsed[s]); - if (!isNaN(_date)) - date = _date; - } - } - } - return date; - }, - formatDate: function(date, format, language){ - if (!date) - return ''; - if (typeof format === 'string') - format = DPGlobal.parseFormat(format); - if (format.toDisplay) - return format.toDisplay(date, format, language); - var val = { - d: date.getUTCDate(), - D: dates[language].daysShort[date.getUTCDay()], - DD: dates[language].days[date.getUTCDay()], - m: date.getUTCMonth() + 1, - M: dates[language].monthsShort[date.getUTCMonth()], - MM: dates[language].months[date.getUTCMonth()], - yy: date.getUTCFullYear().toString().substring(2), - yyyy: date.getUTCFullYear() - }; - val.dd = (val.d < 10 ? '0' : '') + val.d; - val.mm = (val.m < 10 ? '0' : '') + val.m; - date = []; - var seps = $.extend([], format.separators); - for (var i=0, cnt = format.parts.length; i <= cnt; i++){ - if (seps.length) - date.push(seps.shift()); - date.push(val[format.parts[i]]); - } - return date.join(''); - }, - headTemplate: ''+ - ''+ - ''+ - ''+ - ''+ - ''+defaults.templates.leftArrow+''+ - ''+ - ''+defaults.templates.rightArrow+''+ - ''+ - '', - contTemplate: '', - footTemplate: ''+ - ''+ - ''+ - ''+ - ''+ - ''+ - ''+ - '' - }; - DPGlobal.template = '
'+ - '
'+ - ''+ - DPGlobal.headTemplate+ - ''+ - DPGlobal.footTemplate+ - '
'+ - '
'+ - '
'+ - ''+ - DPGlobal.headTemplate+ - DPGlobal.contTemplate+ - DPGlobal.footTemplate+ - '
'+ - '
'+ - '
'+ - ''+ - DPGlobal.headTemplate+ - DPGlobal.contTemplate+ - DPGlobal.footTemplate+ - '
'+ - '
'+ - '
'+ - ''+ - DPGlobal.headTemplate+ - DPGlobal.contTemplate+ - DPGlobal.footTemplate+ - '
'+ - '
'+ - '
'+ - ''+ - DPGlobal.headTemplate+ - DPGlobal.contTemplate+ - DPGlobal.footTemplate+ - '
'+ - '
'+ - '
'; - - $.fn.datepicker.DPGlobal = DPGlobal; - - - /* DATEPICKER NO CONFLICT - * =================== */ - - $.fn.datepicker.noConflict = function(){ - $.fn.datepicker = old; - return this; - }; - - /* DATEPICKER VERSION - * =================== */ - $.fn.datepicker.version = '1.8.0'; - - $.fn.datepicker.deprecated = function(msg){ - var console = window.console; - if (console && console.warn) { - console.warn('DEPRECATED: ' + msg); - } - }; - - - /* DATEPICKER DATA-API - * ================== */ - - $(document).on( - 'focus.datepicker.data-api click.datepicker.data-api', - '[data-provide="datepicker"]', - function(e){ - var $this = $(this); - if ($this.data('datepicker')) - return; - e.preventDefault(); - // component click requires us to explicitly show it - datepickerPlugin.call($this, 'show'); - } - ); - $(function(){ - datepickerPlugin.call($('[data-provide="datepicker-inline"]')); - }); - -})); diff --git a/merepresenta/static/js/bootstrap.min.js b/merepresenta/static/js/bootstrap.min.js deleted file mode 100644 index 00c895f0..00000000 --- a/merepresenta/static/js/bootstrap.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Bootstrap v4.1.3 (https://getbootstrap.com/) - * Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("jquery"),require("popper.js")):"function"==typeof define&&define.amd?define(["exports","jquery","popper.js"],e):e(t.bootstrap={},t.jQuery,t.Popper)}(this,function(t,e,h){"use strict";function i(t,e){for(var n=0;nthis._items.length-1||t<0))if(this._isSliding)P(this._element).one(Q.SLID,function(){return e.to(t)});else{if(n===t)return this.pause(),void this.cycle();var i=ndocument.documentElement.clientHeight;!this._isBodyOverflowing&&t&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!t&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},t._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},t._checkScrollbar=function(){var t=document.body.getBoundingClientRect();this._isBodyOverflowing=t.left+t.right
',trigger:"hover focus",title:"",delay:0,html:!(Ie={AUTO:"auto",TOP:"top",RIGHT:"right",BOTTOM:"bottom",LEFT:"left"}),selector:!(Se={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(number|string)",container:"(string|element|boolean)",fallbackPlacement:"(string|array)",boundary:"(string|element)"}),placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent"},we="out",Ne={HIDE:"hide"+Ee,HIDDEN:"hidden"+Ee,SHOW:(De="show")+Ee,SHOWN:"shown"+Ee,INSERTED:"inserted"+Ee,CLICK:"click"+Ee,FOCUSIN:"focusin"+Ee,FOCUSOUT:"focusout"+Ee,MOUSEENTER:"mouseenter"+Ee,MOUSELEAVE:"mouseleave"+Ee},Oe="fade",ke="show",Pe=".tooltip-inner",je=".arrow",He="hover",Le="focus",Re="click",xe="manual",We=function(){function i(t,e){if("undefined"==typeof h)throw new TypeError("Bootstrap tooltips require Popper.js (https://popper.js.org)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var t=i.prototype;return t.enable=function(){this._isEnabled=!0},t.disable=function(){this._isEnabled=!1},t.toggleEnabled=function(){this._isEnabled=!this._isEnabled},t.toggle=function(t){if(this._isEnabled)if(t){var e=this.constructor.DATA_KEY,n=pe(t.currentTarget).data(e);n||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),pe(t.currentTarget).data(e,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(pe(this.getTipElement()).hasClass(ke))return void this._leave(null,this);this._enter(null,this)}},t.dispose=function(){clearTimeout(this._timeout),pe.removeData(this.element,this.constructor.DATA_KEY),pe(this.element).off(this.constructor.EVENT_KEY),pe(this.element).closest(".modal").off("hide.bs.modal"),this.tip&&pe(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,(this._activeTrigger=null)!==this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},t.show=function(){var e=this;if("none"===pe(this.element).css("display"))throw new Error("Please use show on visible elements");var t=pe.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){pe(this.element).trigger(t);var n=pe.contains(this.element.ownerDocument.documentElement,this.element);if(t.isDefaultPrevented()||!n)return;var i=this.getTipElement(),r=Fn.getUID(this.constructor.NAME);i.setAttribute("id",r),this.element.setAttribute("aria-describedby",r),this.setContent(),this.config.animation&&pe(i).addClass(Oe);var o="function"==typeof this.config.placement?this.config.placement.call(this,i,this.element):this.config.placement,s=this._getAttachment(o);this.addAttachmentClass(s);var a=!1===this.config.container?document.body:pe(document).find(this.config.container);pe(i).data(this.constructor.DATA_KEY,this),pe.contains(this.element.ownerDocument.documentElement,this.tip)||pe(i).appendTo(a),pe(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new h(this.element,i,{placement:s,modifiers:{offset:{offset:this.config.offset},flip:{behavior:this.config.fallbackPlacement},arrow:{element:je},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){e._handlePopperPlacementChange(t)}}),pe(i).addClass(ke),"ontouchstart"in document.documentElement&&pe(document.body).children().on("mouseover",null,pe.noop);var l=function(){e.config.animation&&e._fixTransition();var t=e._hoverState;e._hoverState=null,pe(e.element).trigger(e.constructor.Event.SHOWN),t===we&&e._leave(null,e)};if(pe(this.tip).hasClass(Oe)){var c=Fn.getTransitionDurationFromElement(this.tip);pe(this.tip).one(Fn.TRANSITION_END,l).emulateTransitionEnd(c)}else l()}},t.hide=function(t){var e=this,n=this.getTipElement(),i=pe.Event(this.constructor.Event.HIDE),r=function(){e._hoverState!==De&&n.parentNode&&n.parentNode.removeChild(n),e._cleanTipClass(),e.element.removeAttribute("aria-describedby"),pe(e.element).trigger(e.constructor.Event.HIDDEN),null!==e._popper&&e._popper.destroy(),t&&t()};if(pe(this.element).trigger(i),!i.isDefaultPrevented()){if(pe(n).removeClass(ke),"ontouchstart"in document.documentElement&&pe(document.body).children().off("mouseover",null,pe.noop),this._activeTrigger[Re]=!1,this._activeTrigger[Le]=!1,this._activeTrigger[He]=!1,pe(this.tip).hasClass(Oe)){var o=Fn.getTransitionDurationFromElement(n);pe(n).one(Fn.TRANSITION_END,r).emulateTransitionEnd(o)}else r();this._hoverState=""}},t.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},t.isWithContent=function(){return Boolean(this.getTitle())},t.addAttachmentClass=function(t){pe(this.getTipElement()).addClass(Te+"-"+t)},t.getTipElement=function(){return this.tip=this.tip||pe(this.config.template)[0],this.tip},t.setContent=function(){var t=this.getTipElement();this.setElementContent(pe(t.querySelectorAll(Pe)),this.getTitle()),pe(t).removeClass(Oe+" "+ke)},t.setElementContent=function(t,e){var n=this.config.html;"object"==typeof e&&(e.nodeType||e.jquery)?n?pe(e).parent().is(t)||t.empty().append(e):t.text(pe(e).text()):t[n?"html":"text"](e)},t.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},t._getAttachment=function(t){return Ie[t.toUpperCase()]},t._setListeners=function(){var i=this;this.config.trigger.split(" ").forEach(function(t){if("click"===t)pe(i.element).on(i.constructor.Event.CLICK,i.config.selector,function(t){return i.toggle(t)});else if(t!==xe){var e=t===He?i.constructor.Event.MOUSEENTER:i.constructor.Event.FOCUSIN,n=t===He?i.constructor.Event.MOUSELEAVE:i.constructor.Event.FOCUSOUT;pe(i.element).on(e,i.config.selector,function(t){return i._enter(t)}).on(n,i.config.selector,function(t){return i._leave(t)})}pe(i.element).closest(".modal").on("hide.bs.modal",function(){return i.hide()})}),this.config.selector?this.config=l({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},t._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},t._enter=function(t,e){var n=this.constructor.DATA_KEY;(e=e||pe(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),pe(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusin"===t.type?Le:He]=!0),pe(e.getTipElement()).hasClass(ke)||e._hoverState===De?e._hoverState=De:(clearTimeout(e._timeout),e._hoverState=De,e.config.delay&&e.config.delay.show?e._timeout=setTimeout(function(){e._hoverState===De&&e.show()},e.config.delay.show):e.show())},t._leave=function(t,e){var n=this.constructor.DATA_KEY;(e=e||pe(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),pe(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusout"===t.type?Le:He]=!1),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState=we,e.config.delay&&e.config.delay.hide?e._timeout=setTimeout(function(){e._hoverState===we&&e.hide()},e.config.delay.hide):e.hide())},t._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},t._getConfig=function(t){return"number"==typeof(t=l({},this.constructor.Default,pe(this.element).data(),"object"==typeof t&&t?t:{})).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),Fn.typeCheckConfig(ve,t,this.constructor.DefaultType),t},t._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},t._cleanTipClass=function(){var t=pe(this.getTipElement()),e=t.attr("class").match(be);null!==e&&e.length&&t.removeClass(e.join(""))},t._handlePopperPlacementChange=function(t){var e=t.instance;this.tip=e.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},t._fixTransition=function(){var t=this.getTipElement(),e=this.config.animation;null===t.getAttribute("x-placement")&&(pe(t).removeClass(Oe),this.config.animation=!1,this.hide(),this.show(),this.config.animation=e)},i._jQueryInterface=function(n){return this.each(function(){var t=pe(this).data(ye),e="object"==typeof n&&n;if((t||!/dispose|hide/.test(n))&&(t||(t=new i(this,e),pe(this).data(ye,t)),"string"==typeof n)){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.1.3"}},{key:"Default",get:function(){return Ae}},{key:"NAME",get:function(){return ve}},{key:"DATA_KEY",get:function(){return ye}},{key:"Event",get:function(){return Ne}},{key:"EVENT_KEY",get:function(){return Ee}},{key:"DefaultType",get:function(){return Se}}]),i}(),pe.fn[ve]=We._jQueryInterface,pe.fn[ve].Constructor=We,pe.fn[ve].noConflict=function(){return pe.fn[ve]=Ce,We._jQueryInterface},We),Jn=(qe="popover",Ke="."+(Fe="bs.popover"),Me=(Ue=e).fn[qe],Qe="bs-popover",Be=new RegExp("(^|\\s)"+Qe+"\\S+","g"),Ve=l({},zn.Default,{placement:"right",trigger:"click",content:"",template:''}),Ye=l({},zn.DefaultType,{content:"(string|element|function)"}),ze="fade",Ze=".popover-header",Ge=".popover-body",$e={HIDE:"hide"+Ke,HIDDEN:"hidden"+Ke,SHOW:(Je="show")+Ke,SHOWN:"shown"+Ke,INSERTED:"inserted"+Ke,CLICK:"click"+Ke,FOCUSIN:"focusin"+Ke,FOCUSOUT:"focusout"+Ke,MOUSEENTER:"mouseenter"+Ke,MOUSELEAVE:"mouseleave"+Ke},Xe=function(t){var e,n;function i(){return t.apply(this,arguments)||this}n=t,(e=i).prototype=Object.create(n.prototype),(e.prototype.constructor=e).__proto__=n;var r=i.prototype;return r.isWithContent=function(){return this.getTitle()||this._getContent()},r.addAttachmentClass=function(t){Ue(this.getTipElement()).addClass(Qe+"-"+t)},r.getTipElement=function(){return this.tip=this.tip||Ue(this.config.template)[0],this.tip},r.setContent=function(){var t=Ue(this.getTipElement());this.setElementContent(t.find(Ze),this.getTitle());var e=this._getContent();"function"==typeof e&&(e=e.call(this.element)),this.setElementContent(t.find(Ge),e),t.removeClass(ze+" "+Je)},r._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},r._cleanTipClass=function(){var t=Ue(this.getTipElement()),e=t.attr("class").match(Be);null!==e&&0=this._offsets[r]&&("undefined"==typeof this._offsets[r+1]||t b.label){ - return 1; - } - return 0; -}; - -var partidos_ids = [{"id": 0, "label": "PP"}, - {"id": 1, "label": "PHS"}, - {"id": 2, "label": "PSC"}, - {"id": 3, "label": "PR"}, - {"id": 4, "label": "DC"}, - {"id": 5, "label": "PRTB"}, - {"id": 6, "label": "MDB"}, - {"id": 7, "label": "PSDB"}, - {"id": 8, "label": "PSD"}, - {"id": 9, "label": "PRP"}, - {"id": 10, "label": "PSB"}, - {"id": 11, "label": "PDT"}, - {"id": 12, "label": "DEM"}, - {"id": 13, "label": "SOLIDARIEDADE"}, - {"id": 14, "label": "PODE"}, - {"id": 15, "label": "REDE"}, - {"id": 16, "label": "PSOL"}, - {"id": 17, "label": "PMB"}, - {"id": 18, "label": "PMN"}, - {"id": 19, "label": "PTB"}, - {"id": 20, "label": "PT"}, - {"id": 21, "label": "PRB"}, - {"id": 22, "label": "PSL"}, - {"id": 23, "label": "PPS"}, - {"id": 24, "label": "PV"}, - {"id": 25, "label": "PPL"}, - {"id": 26, "label": "PROS"}, - {"id": 27, "label": "AVANTE"}, - {"id": 28, "label": "PTC"}, - {"id": 29, "label": "PATRI"}, - {"id": 30, "label": "PC do B"}, - {"id": 31, "label": "PSTU"}, - {"id": 32, "label": "NOVO"}, - {"id": 33, "label": "PCB"}, - {"id": 34, "label": "PCO"}].sort(comparadorAlfabetico); -var estados_ids = [{'id': "sao-paulo-state-sp", 'label': "SÃO PAULO"}, - {'id': "rio-de-janeiro-state-rj", 'label': "RIO DE JANEIRO"}, - {'id': "acre-state-ac", 'label': "ACRE"}, - {'id': "alagoas-state-al", 'label': "ALAGOAS"}, - {'id': "amazonas-state-am", 'label': "AMAZONAS"}, - {'id': "bahia-state-ba", 'label': "BAHIA"}, - {'id': "distrito-federal-state-df", 'label': "DISTRITO FEDERAL"}, - {'id': "mato-grosso-state-mt", 'label': "MATO GROSSO"}, - {'id': "mato-grosso-do-sul-state-ms", 'label': "MATO GROSSO DO SUL"}, - {'id': "minas-gerais-state-mg", 'label': "MINAS GERAIS"}, - {'id': "pernambuco-state-pe", 'label': "PERNAMBUCO"}, - {'id': "rio-grande-do-norte-state-rn", 'label': "RIO GRANDE DO NORTE"}, - {'id': "rio-grande-do-sul-state-rs", 'label': "RIO GRANDE DO SUL"}, - {'id': "roraima-state-rr", 'label': "RORAIMA"}, - {'id': "santa-catarina-state-sc", 'label': "SANTA CATARINA"}, - {'id': "sergipe-state-se", 'label': "SERGIPE"}, - {'id': "tocantins-state-to", 'label': "TOCANTINS"}, - {'id': "amapa-state-ap-2", 'label': "AMAPÁ"}, - {'id': "ceara-state-ce-2", 'label': "CEARÁ"}, - {'id': "espirito-santo-state-es", 'label': "ESPÍRITO SANTO"}, - {'id': "goias-state-go-2", 'label': "GOIÁS"}, - {'id': "maranhao-state-ma-2", 'label': "MARANHÃO"}, - {'id': "para-state-pa-2", 'label': "PARÁ"}, - {'id': "paraiba-state-pb", 'label': "PARAÍBA"}, - {'id': "parana-state-pr-2", 'label': "PARANÁ"}, - {'id': "piaui-state-pi", 'label': "PIAUÍ"}, - {'id': "rondonia-state-ro", 'label': "RONDÔNIA"}].sort(comparadorAlfabetico); diff --git a/merepresenta/static/js/jquery-2.2.4.min.js b/merepresenta/static/js/jquery-2.2.4.min.js deleted file mode 100644 index 4024b662..00000000 --- a/merepresenta/static/js/jquery-2.2.4.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/*! jQuery v2.2.4 | (c) jQuery Foundation | jquery.org/license */ -!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=a.document,e=c.slice,f=c.concat,g=c.push,h=c.indexOf,i={},j=i.toString,k=i.hasOwnProperty,l={},m="2.2.4",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return e.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:e.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a){return n.each(this,a)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(e.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:g,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){var b=a&&a.toString();return!n.isArray(a)&&b-parseFloat(b)+1>=0},isPlainObject:function(a){var b;if("object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;if(a.constructor&&!k.call(a,"constructor")&&!k.call(a.constructor.prototype||{},"isPrototypeOf"))return!1;for(b in a);return void 0===b||k.call(a,b)},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?i[j.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=d.createElement("script"),b.text=a,d.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(s(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):g.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:h.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,g=0,h=[];if(s(a))for(d=a.length;d>g;g++)e=b(a[g],g,c),null!=e&&h.push(e);else for(g in a)e=b(a[g],g,c),null!=e&&h.push(e);return f.apply([],h)},guid:1,proxy:function(a,b){var c,d,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(d=e.call(arguments,2),f=function(){return a.apply(b||this,d.concat(e.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:l}),"function"==typeof Symbol&&(n.fn[Symbol.iterator]=c[Symbol.iterator]),n.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){i["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=!!a&&"length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ga(),z=ga(),A=ga(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+M+"))|)"+L+"*\\]",O=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+N+")*)|.*)\\)|)",P=new RegExp(L+"+","g"),Q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),R=new RegExp("^"+L+"*,"+L+"*"),S=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),T=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),U=new RegExp(O),V=new RegExp("^"+M+"$"),W={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M+"|[*])"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},X=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,$=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,_=/[+~]/,aa=/'|\\/g,ba=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),ca=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},da=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(ea){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fa(a,b,d,e){var f,h,j,k,l,o,r,s,w=b&&b.ownerDocument,x=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==x&&9!==x&&11!==x)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==x&&(o=$.exec(a)))if(f=o[1]){if(9===x){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(w&&(j=w.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(o[2])return H.apply(d,b.getElementsByTagName(a)),d;if((f=o[3])&&c.getElementsByClassName&&b.getElementsByClassName)return H.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==x)w=b,s=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(aa,"\\$&"):b.setAttribute("id",k=u),r=g(a),h=r.length,l=V.test(k)?"#"+k:"[id='"+k+"']";while(h--)r[h]=l+" "+qa(r[h]);s=r.join(","),w=_.test(a)&&oa(b.parentNode)||b}if(s)try{return H.apply(d,w.querySelectorAll(s)),d}catch(y){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(Q,"$1"),b,d,e)}function ga(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ha(a){return a[u]=!0,a}function ia(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ja(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function ka(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function la(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function na(a){return ha(function(b){return b=+b,ha(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function oa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=fa.support={},f=fa.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fa.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ia(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ia(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Z.test(n.getElementsByClassName),c.getById=ia(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return"undefined"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Z.test(n.querySelectorAll))&&(ia(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ia(function(a){var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Z.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ia(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",O)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Z.test(o.compareDocumentPosition),t=b||Z.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return ka(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?ka(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},fa.matches=function(a,b){return fa(a,null,null,b)},fa.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(T,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fa(b,n,null,[a]).length>0},fa.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fa.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fa.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fa.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fa.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fa.selectors={cacheLength:50,createPseudo:ha,match:W,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ba,ca),a[3]=(a[3]||a[4]||a[5]||"").replace(ba,ca),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fa.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fa.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return W.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&U.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ba,ca).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fa.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(P," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fa.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ha(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ha(function(a){var b=[],c=[],d=h(a.replace(Q,"$1"));return d[u]?ha(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ha(function(a){return function(b){return fa(a,b).length>0}}),contains:ha(function(a){return a=a.replace(ba,ca),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ha(function(a){return V.test(a||"")||fa.error("unsupported lang: "+a),a=a.replace(ba,ca).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Y.test(a.nodeName)},input:function(a){return X.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:na(function(){return[0]}),last:na(function(a,b){return[b-1]}),eq:na(function(a,b,c){return[0>c?c+b:c]}),even:na(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:na(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:na(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:na(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function ra(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j,k=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(j=b[u]||(b[u]={}),i=j[b.uniqueID]||(j[b.uniqueID]={}),(h=i[d])&&h[0]===w&&h[1]===f)return k[2]=h[2];if(i[d]=k,k[2]=a(b,c,g))return!0}}}function sa(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ta(a,b,c){for(var d=0,e=b.length;e>d;d++)fa(a,b[d],c);return c}function ua(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function va(a,b,c,d,e,f){return d&&!d[u]&&(d=va(d)),e&&!e[u]&&(e=va(e,f)),ha(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ta(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ua(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ua(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ua(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function wa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ra(function(a){return a===b},h,!0),l=ra(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[ra(sa(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return va(i>1&&sa(m),i>1&&qa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(Q,"$1"),c,e>i&&wa(a.slice(i,e)),f>e&&wa(a=a.slice(e)),f>e&&qa(a))}m.push(c)}return sa(m)}function xa(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=F.call(i));u=ua(u)}H.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&fa.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ha(f):f}return h=fa.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xa(e,d)),f.selector=a}return f},i=fa.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ba,ca),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=W.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ba,ca),_.test(j[0].type)&&oa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qa(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||_.test(a)&&oa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ia(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ia(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ja("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ia(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ja("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ia(function(a){return null==a.getAttribute("disabled")})||ja(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fa}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.uniqueSort=n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},v=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},w=n.expr.match.needsContext,x=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,y=/^.[^:#\[\.,]*$/;function z(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(y.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return h.call(b,a)>-1!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(z(this,a||[],!1))},not:function(a){return this.pushStack(z(this,a||[],!0))},is:function(a){return!!z(this,"string"==typeof a&&w.test(a)?n(a):a||[],!1).length}});var A,B=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=n.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||A,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:B.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),x.test(e[1])&&n.isPlainObject(b))for(e in b)n.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&f.parentNode&&(this.length=1,this[0]=f),this.context=d,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?void 0!==c.ready?c.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};C.prototype=n.fn,A=n(d);var D=/^(?:parents|prev(?:Until|All))/,E={children:!0,contents:!0,next:!0,prev:!0};n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=w.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?h.call(n(a),this[0]):h.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.uniqueSort(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function F(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return u(a,"parentNode")},parentsUntil:function(a,b,c){return u(a,"parentNode",c)},next:function(a){return F(a,"nextSibling")},prev:function(a){return F(a,"previousSibling")},nextAll:function(a){return u(a,"nextSibling")},prevAll:function(a){return u(a,"previousSibling")},nextUntil:function(a,b,c){return u(a,"nextSibling",c)},prevUntil:function(a,b,c){return u(a,"previousSibling",c)},siblings:function(a){return v((a.parentNode||{}).firstChild,a)},children:function(a){return v(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(E[a]||n.uniqueSort(e),D.test(a)&&e.reverse()),this.pushStack(e)}});var G=/\S+/g;function H(a){var b={};return n.each(a.match(G)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?H(a):n.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?n.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().progress(c.notify).done(c.resolve).fail(c.reject):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=e.call(arguments),d=c.length,f=1!==d||a&&n.isFunction(a.promise)?d:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?e.call(arguments):d,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(d>1)for(i=new Array(d),j=new Array(d),k=new Array(d);d>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().progress(h(b,j,i)).done(h(b,k,c)).fail(g.reject):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(d,[n]),n.fn.triggerHandler&&(n(d).triggerHandler("ready"),n(d).off("ready"))))}});function J(){d.removeEventListener("DOMContentLoaded",J),a.removeEventListener("load",J),n.ready()}n.ready.promise=function(b){return I||(I=n.Deferred(),"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(n.ready):(d.addEventListener("DOMContentLoaded",J),a.addEventListener("load",J))),I.promise(b)},n.ready.promise();var K=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)K(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},L=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function M(){this.expando=n.expando+M.uid++}M.uid=1,M.prototype={register:function(a,b){var c=b||{};return a.nodeType?a[this.expando]=c:Object.defineProperty(a,this.expando,{value:c,writable:!0,configurable:!0}),a[this.expando]},cache:function(a){if(!L(a))return{};var b=a[this.expando];return b||(b={},L(a)&&(a.nodeType?a[this.expando]=b:Object.defineProperty(a,this.expando,{value:b,configurable:!0}))),b},set:function(a,b,c){var d,e=this.cache(a);if("string"==typeof b)e[b]=c;else for(d in b)e[d]=b[d];return e},get:function(a,b){return void 0===b?this.cache(a):a[this.expando]&&a[this.expando][b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=a[this.expando];if(void 0!==f){if(void 0===b)this.register(a);else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in f?d=[b,e]:(d=e,d=d in f?[d]:d.match(G)||[])),c=d.length;while(c--)delete f[d[c]]}(void 0===b||n.isEmptyObject(f))&&(a.nodeType?a[this.expando]=void 0:delete a[this.expando])}},hasData:function(a){var b=a[this.expando];return void 0!==b&&!n.isEmptyObject(b)}};var N=new M,O=new M,P=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Q=/[A-Z]/g;function R(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(Q,"-$&").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:P.test(c)?n.parseJSON(c):c; -}catch(e){}O.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return O.hasData(a)||N.hasData(a)},data:function(a,b,c){return O.access(a,b,c)},removeData:function(a,b){O.remove(a,b)},_data:function(a,b,c){return N.access(a,b,c)},_removeData:function(a,b){N.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=O.get(f),1===f.nodeType&&!N.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),R(f,d,e[d])));N.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){O.set(this,a)}):K(this,function(b){var c,d;if(f&&void 0===b){if(c=O.get(f,a)||O.get(f,a.replace(Q,"-$&").toLowerCase()),void 0!==c)return c;if(d=n.camelCase(a),c=O.get(f,d),void 0!==c)return c;if(c=R(f,d,void 0),void 0!==c)return c}else d=n.camelCase(a),this.each(function(){var c=O.get(this,d);O.set(this,d,b),a.indexOf("-")>-1&&void 0!==c&&O.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){O.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=N.get(a,b),c&&(!d||n.isArray(c)?d=N.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return N.get(a,c)||N.access(a,c,{empty:n.Callbacks("once memory").add(function(){N.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length",""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};$.optgroup=$.option,$.tbody=$.tfoot=$.colgroup=$.caption=$.thead,$.th=$.td;function _(a,b){var c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function aa(a,b){for(var c=0,d=a.length;d>c;c++)N.set(a[c],"globalEval",!b||N.get(b[c],"globalEval"))}var ba=/<|&#?\w+;/;function ca(a,b,c,d,e){for(var f,g,h,i,j,k,l=b.createDocumentFragment(),m=[],o=0,p=a.length;p>o;o++)if(f=a[o],f||0===f)if("object"===n.type(f))n.merge(m,f.nodeType?[f]:f);else if(ba.test(f)){g=g||l.appendChild(b.createElement("div")),h=(Y.exec(f)||["",""])[1].toLowerCase(),i=$[h]||$._default,g.innerHTML=i[1]+n.htmlPrefilter(f)+i[2],k=i[0];while(k--)g=g.lastChild;n.merge(m,g.childNodes),g=l.firstChild,g.textContent=""}else m.push(b.createTextNode(f));l.textContent="",o=0;while(f=m[o++])if(d&&n.inArray(f,d)>-1)e&&e.push(f);else if(j=n.contains(f.ownerDocument,f),g=_(l.appendChild(f),"script"),j&&aa(g),c){k=0;while(f=g[k++])Z.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),l.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="",l.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var da=/^key/,ea=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,fa=/^([^.]*)(?:\.(.+)|)/;function ga(){return!0}function ha(){return!1}function ia(){try{return d.activeElement}catch(a){}}function ja(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)ja(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=ha;else if(!e)return a;return 1===f&&(g=e,e=function(a){return n().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=n.guid++)),a.each(function(){n.event.add(this,b,e,d,c)})}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=N.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return"undefined"!=typeof n&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(G)||[""],j=b.length;while(j--)h=fa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=N.hasData(a)&&N.get(a);if(r&&(i=r.events)){b=(b||"").match(G)||[""],j=b.length;while(j--)if(h=fa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&N.remove(a,"handle events")}},dispatch:function(a){a=n.event.fix(a);var b,c,d,f,g,h=[],i=e.call(arguments),j=(N.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())a.rnamespace&&!a.rnamespace.test(g.namespace)||(a.handleObj=g,a.data=g.data,d=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==d&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!==this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>-1:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]*)\/>/gi,la=/\s*$/g;function pa(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function qa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function ra(a){var b=na.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function sa(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(N.hasData(a)&&(f=N.access(a),g=N.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}O.hasData(a)&&(h=O.access(a),i=n.extend({},h),O.set(b,i))}}function ta(a,b){var c=b.nodeName.toLowerCase();"input"===c&&X.test(a.type)?b.checked=a.checked:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}function ua(a,b,c,d){b=f.apply([],b);var e,g,h,i,j,k,m=0,o=a.length,p=o-1,q=b[0],r=n.isFunction(q);if(r||o>1&&"string"==typeof q&&!l.checkClone&&ma.test(q))return a.each(function(e){var f=a.eq(e);r&&(b[0]=q.call(this,e,f.html())),ua(f,b,c,d)});if(o&&(e=ca(b,a[0].ownerDocument,!1,a,d),g=e.firstChild,1===e.childNodes.length&&(e=g),g||d)){for(h=n.map(_(e,"script"),qa),i=h.length;o>m;m++)j=e,m!==p&&(j=n.clone(j,!0,!0),i&&n.merge(h,_(j,"script"))),c.call(a[m],j,m);if(i)for(k=h[h.length-1].ownerDocument,n.map(h,ra),m=0;i>m;m++)j=h[m],Z.test(j.type||"")&&!N.access(j,"globalEval")&&n.contains(k,j)&&(j.src?n._evalUrl&&n._evalUrl(j.src):n.globalEval(j.textContent.replace(oa,"")))}return a}function va(a,b,c){for(var d,e=b?n.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||n.cleanData(_(d)),d.parentNode&&(c&&n.contains(d.ownerDocument,d)&&aa(_(d,"script")),d.parentNode.removeChild(d));return a}n.extend({htmlPrefilter:function(a){return a.replace(ka,"<$1>")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=_(h),f=_(a),d=0,e=f.length;e>d;d++)ta(f[d],g[d]);if(b)if(c)for(f=f||_(a),g=g||_(h),d=0,e=f.length;e>d;d++)sa(f[d],g[d]);else sa(a,h);return g=_(h,"script"),g.length>0&&aa(g,!i&&_(a,"script")),h},cleanData:function(a){for(var b,c,d,e=n.event.special,f=0;void 0!==(c=a[f]);f++)if(L(c)){if(b=c[N.expando]){if(b.events)for(d in b.events)e[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);c[N.expando]=void 0}c[O.expando]&&(c[O.expando]=void 0)}}}),n.fn.extend({domManip:ua,detach:function(a){return va(this,a,!0)},remove:function(a){return va(this,a)},text:function(a){return K(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return ua(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=pa(this,a);b.appendChild(a)}})},prepend:function(){return ua(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=pa(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return ua(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return ua(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(_(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return K(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!la.test(a)&&!$[(Y.exec(a)||["",""])[1].toLowerCase()]){a=n.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(_(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return ua(this,arguments,function(b){var c=this.parentNode;n.inArray(this,a)<0&&(n.cleanData(_(this)),c&&c.replaceChild(b,this))},a)}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),f=e.length-1,h=0;f>=h;h++)c=h===f?this:this.clone(!0),n(e[h])[b](c),g.apply(d,c.get());return this.pushStack(d)}});var wa,xa={HTML:"block",BODY:"block"};function ya(a,b){var c=n(b.createElement(a)).appendTo(b.body),d=n.css(c[0],"display");return c.detach(),d}function za(a){var b=d,c=xa[a];return c||(c=ya(a,b),"none"!==c&&c||(wa=(wa||n(" - - -

- E aproveite pra conhecer mais nossos posicionamentos. Não encontrou o que procurava? Fala com a gente no contato@merepresenta.org.br ou no inbox do Facebook. -

- - - -
-

Sobre a plataforma

- -
-
-
-
- -
-
- -
-
- O #MeRepresenta é a união de coletivos (pessoas massa fazendo coisas juntas) e instituições (organizações civis massa fazendo mais coisas juntas) que buscam visibilizar as narrativas pró igualdade de raça e gênero e o respeito às LGBT+. O que queremos é aumentar a chance de representatividade desses grupos nos espaços de poder, e viabilizar, a partir de uma linguagem acessível, a aproximação das/os eleitoras/es se às políticas e aos políticos. -
-
-
-
-
-
- -
-
-
-
- Porque mesmo somando 80% da população brasileira, mulheres, negras/os e LGBTs têm pouca ou nenhuma representação política. Essa falta de representantes traz uma série de consequências para essas populações, com políticas públicas inadequadas ou ausentes para suas necessidades de sobrevivência. Acreditamos que existe uma potência eleitoral que, ao se engajar no momento das eleições, pode mudar a cara do legislativo com gente que sente na pele quando os direitos humanos são desrespeitados. -
-
-
-
-
-
- -
-
-
-
- O #MeRepresenta é o resultado da união do Blogueiras Negras, Fundação Cidadania Inteligente, Rede Feminista de Juristas (#DefemDe) e #VoteLGBT. Coletivos que pautam, conjuntamente, participação de mulheres negras na construção da escrita e pesquisa, incidência democrática e impacto social, acesso à justiça e direitos das mulheres e participação ativa da população LGBT na construção política nacional. Participam como aceleradoras o #AgoraÉQueSãoElas e as ONGs Nossas e CFemea. -
-
-
-
-
-
- -
-
-
-
- Dentro do #MeRepresenta as questões são pautadas de forma horizontal, ou seja, geral dá pitaco em tudo o que é de interesse e decisão do coletivo. - O que fazemos é buscar sempre nas decisões sensíveis o consenso entre as instituições gestoras. Em um coletivo de grupos minorizados não faz sentido uma imposição da vontade da maioria. Por isso, as decisões são tomadas sempre em comum acordo, num exercício de empatia política e interseccionalidade. -
-
-
-
-
-
- -
-
-
-
- Então… Foi um longo processo de meses. A gente juntou todas as sugestões que recebemos por inbox e email desde 2016. Ao mesmo tempo foi construindo conversas bilaterais com várias organizações e coletivos. Foram mais de 140 sugestões de 19 entidades da sociedade civil. Por fim, realizamos evento presencial para decidir coletivamente as redações e as classificações das pautas nos temas como você vê no site. -
-
-
-
-
-
- -
-
-
-
- Primeiro, é preciso selecionar quais são os temas importantes pra você. Pode ser de 1 até todos os 9 temas. Na tela seguinte abre uma lista ranqueada com as candidaturas mais em sintonia com suas escolhas pras mais distantes. Lembre-se, é preciso selecionar o estado em que você vota. Procure também alternar os cargos para ter uma busca mais completa. Ao lado, existe uma lista grande de filtros pra você experimentar. Pesquise! -
-
-
-
-
-
- -
-
-
-
- Não somos filiados e não apoiamos partidos ou candidaturas. Escolhemos 10 votações no congresso nacional dos últimos 4 anos para chegar nas notas partidárias. Fizemos uma análise extensa da performance de cada partido. Nos casos de partidos sem representantes eleitos, avaliamos as declarações oficiais em relação à cada uma das matéria. Também avaliamos o repasse de verba para mulheres dentro do partido. Se quiser saber tudo sobre a nossa metodologia, clica aqui. -
-
-
-
-
-
- -
-
-
-
- Porque no Brasil as eleições para Deputada/o Federal, Estaduas e Distrital as coligações contam muito. O nosso voto não vai somente para a candidatura escolhida, ele também compõe o total de votos da coligação que acabam sendo divididos pelas candidaturas que foram mais votadas na coligação. Normalmente, candidaturas com mais recurso e mais apoio partidário. Assim, a gente pode votar numa candidatura super alinhada com a gente e acabar elegendo outra bem diferente e até de outro partido! - -
-
-
-
-
-
- -
-
-
-
- Porque algumas candidaturas não se inscreveram ainda. Nós mandamos email para todas as candidaturas com email válido na lista do TSE. Além disso, buscamos entrar em contato com as outras 13 mil candidaturas sem email válido com a ajuda de centenas de voluntárias/os espalhadas/os por todo o País. Saca nossa plataforma de voluntárias/os! - -
-
-
- -
-
-
- -
-
-
-
- Precisa. As perguntas são as mesmas para todos os cargos pesquisados e buscam traçar um perfil político a partir desses posicionamentos. Entendemos que políticos se candidatam a cargos diferentes em cada eleição, dependendo do contexto. Também trabalham em gabinetes, secretarias, ministérios e coordenações. Conhecer e visibilizar seus posicionamentos agora ajuda eleitoras/es a te procurar no futuro também. -
-
-
-
-
-
- -
-
-
-
- Nossa plataforma é dedicada apenas ao legislativo (Deputadas/os Estaduais, Federais, Distritais e Senadoras/es). O voto nos cargos de presidência e Governador/a já tem muitos espaços de debate, enquanto o voto no legislativo ainda não tem muita visibilidade. A plataforma é uma ferramenta trazer pro centro do debate a função do legislativo e o quanto que essa política afeta a nosso cotidiano e nossas vidas. -
-
-
-
-
-
- -
-
-
-
- Sim! Para completar o cadastro precisa responder a TODAS as perguntas. Com A FAVOR ou CONTRA. -
-
-
-
-
-
- -
-
-
-
- Não pode. É preciso saber como se posicionam nossos representante porque na hora da disputa política, a gente precisa saber em que lado essa/e representante estará. -
-
-
-
-
-
- -
-
-
-
- Não exatamente. É uma plataforma de funcionamento misto: ranking & match. Assim: ao responder às perguntas sobre as pautas, a candidatura acumula pontos no ranking. Ao final das perguntas cada candidaturas escolhe 3 temas prioritários. Quando a/o eleitor/a escolhe os mesmos temas que a/o candidata/o, ela multiplica os pontos ganhados naqueles temas que coincidiram com as prioridades da/o eleitor/a. - - A gente declara nosso viés pró-direitos humanos e, ao mesmo tempo, dá espaço para a priorização dos interesse das/os eleitoras/es. -
-
-
-
-
-
- -
-
-
-
- Não. A gente convida todas as candidaturas e faz um ranking com aquelas que se inscreveram. Proporcionamos filtros de partidos para que a/o eleitor/a possa fazer suas escolhas. Ao mesmo tempo, daremos notas às coligações segundo o desempenho dos partidos nos últimos 4 anos, levando em conta a atuação em votações sensíveis a nossas pautas no legislativo. Assim que estiver pronta a gente sobe a metodologia pro site. -
-
-
-
-
-
- -
-
-
-
- O TSE só começou a contabilizar raça entre as candidaturas em 2014 (!!). Em 2018, será a primeira vez que vamos conseguir comparar os dados raciais nas eleições. Isso é importante pra saber se existe mais ou menos negras/os na política, quantos são eleitas/os. Mas uma coisa que não sabemos é a qualidade desses dados do TSE, muitas vezes preenchidos pelos partidos. Assim, fica difícil saber como a/o candidata/o se auto-declara. Depois das eleições a gente conta o que descobrimos. - - Além disso, o pertencimento racial é um dos critérios para a ordem das candidaturas nos resultados paras as/eleitoras/es. Também são critérios afirmativos gênero e identidade LGBT. -
-
-
-
-
-
- -
-
-
-
- Para poder garantir comparação, escolhemos adotar as mesmas classificações precárias e muitas vezes ofensivas do IBGE. Entretanto, entendemos que existem muitas pessoas no país que têm muito desconforto para se encaixar em apenas uma dessas categorias, pertencendo a mais de um grupo étnico. A população que é ao mesmo tempo negra e indígena é uma delas. -
-
-
-
-
-
- -
-
-
-
- Não existem muitos dados sobre LGBTs no Brasil e isso é um dos maiores problemas dessa comunidade. O país é o campeão de assassinatos por crime de ódio contra LGBTs em todo o mundo e o estado pouco faz, pois não há dados oficiais. Coletar esse dado sobre as candidaturas afirma essas identidades como um valor político, para que eleitoras e eleitores possam filtrar LGBTs entre as candidaturas para escolher seu voto. -
-
-
-
-
-
- -
-
-
-
- Sempre que tiver candidaturas inscritas, proporcionamos filtros de gênero, raça e sexualidade como uma ferramenta para ajudar a/o eleitor/a escolher outros corpos para ocupar os cargos de poder. Acreditamos na importância da representatividade de uma maneira dupla: tanto das pautas quanto dos corpos. Mas só é se quiser. Ninguém é obrigada/o. -
-
-
-
-
-
- -
-
-
-
- Na língua portuguesa, assim como na política institucional, o gênero masculino tem sido usado há séculos como genérico, substituindo e silenciando o que existe de feminino nos conjuntos. Acreditamos que imaginar outras possibilidades é fundamental para construir a mudança. A linguagem também é política. -
-
-
-
-
- - - - -{% endblock everything %} diff --git a/merepresenta/templates/merepresenta/index.html b/merepresenta/templates/merepresenta/index.html deleted file mode 100644 index c0b0341b..00000000 --- a/merepresenta/templates/merepresenta/index.html +++ /dev/null @@ -1,306 +0,0 @@ -{% extends "base.html" %} -{% load staticfiles %} -{% load votainteligente_extras %} - -{% block title %}- Portada{% endblock title %} - -{% block everything %} - -
-
-
-
-

- Encontre candidaturas que te representam! -

- -

- Quer entender quem são as/os candidatas/os que defendem - temas importantes pra você? - Chega mais! -

- -
- - {% if user|is_candidate %} - {% with user.candidacies.first as candidacy %} - {% if candidacy.candidate.candidatequestioncategory_set.exists %} - - {% else %} - - {% endif %} - {% endwith %} - - {% elif user.is_authenticated and user.is_staff %} - - {% else %} - - - {% if config.MEREPRESENTA_CANDIDATES_ALLOWED_TO_LOGIN %} - - {% endif %} - - - {% endif %} -
-
- -
- Ilustração com balões de diálogo escritos Voto e #MeRepresenta -
- -
-
-
- -
-
-
-
- -
-
-

- Conheça o - - #MeRepresenta - -

-

- Somos uma união de coletivos formados por mulheres, pessoas negras e LGBT+ com o objetivo de diminuir a distância entre eleitoras/es e candidatas/os comprometidas/os com os direitos sociais, civis e políticos da população. -Em 2016 conectamos mais de 150 mil pessoas à candidaturas que valorizam - os direitos humanos. E esse ano queremos mais!! -

-

- A nova plataforma #MeRepresenta Eleições 2018 foi elaborada com a participação de diversas organizações da sociedade civil abordando temas importantes para você.

-
-
-
-
- -
-
-
-
-

Entenda as - - pautas - - em debate

-
- -
-
- #Gênero -
-

#Gênero

-
    -
  1. Legalização do aborto
  2. -
  3. Monitoramento da Lei do feminicídio
  4. -
  5. Financiamento público de campanhas de mulheres negras
  6. -
- quero saber mais -
-
-
- -
-
- #LGBTs -
-

#LGBTs

-
    -
  1. O preconceito contra LGBTs deve ser crime
  2. -
  3. Trans e travestis podem usar o banheiro que quiserem
  4. -
  5. Projeto “Escola sem partido”
  6. -
- quero saber mais -
-
-
- -
- Pauta X -
- -
-
- #Raça -
-

#Raça

-
    -
  1. Tornar crime o abate de animais em religiões de matriz africana
  2. -
  3. Cotas raciais nas universidades
  4. -
  5. Prioridade no atendimento de mulheres negras no SUS
  6. -
- quero saber mais -
-
-
- -
-
- #Povos Tradicionais & Meio Ambiente -
-

#Povos Tradicionais & Meio Ambiente

-
    -
  1. Marco temporal na demarcação de terra
  2. -
  3. Cotas para indígenas no Congresso
  4. -
  5. Facilitar o uso de agrotóxicos
  6. -
- quero saber mais -
-
-
- -
- Pauta X -
- -
-
- #Trabalho, Saúde e Educação -
-

#Trabalho, Saúde e Educação

-
    -
  1. Reforma trabalhista
  2. -
  3. Teto de gastos públicos
  4. -
- quero saber mais -
-
-
- -
-
- #Migrantes -
-

#Migrantes

-
    -
  1. Acolhimento de migrantes venezuelanos no Brasil
  2. -
  3. Direito a voto de migrantes
  4. -
- quero saber mais -
-
-
- -
-
- #Drogas -
-

#Drogas

-
    -
  1. Legalização da maconha
  2. -
  3. Internação compulsória para usuários de drogas
  4. -
- quero saber mais -
-
-
- -
-
- - #Corrupção - -
-

#Corrupção

-
    -
  1. Políticos serem donos de emissoras de rádio e TV
  2. -
  3. Transparência nos gastos dos partidos políticos
  4. -
- quero saber mais -
-
-
- -
-
- #Segurança e Direitos Humanos -
-

#Segurança e Direitos Humanos

-
    -
  1. Autos de resistência
  2. -
  3. Redução de maioridade penal
  4. -
- quero saber mais - -
-
-
- -
- Pauta X -
-
-
-
- -
-
-
-
- #MeRepresentaLogo -
- -
-

Faça parte do
- - #MeRepresenta - -

- - -
- -
-
-
- -{% include "_apoiam.html" %} - -{% endblock everything %} diff --git a/merepresenta/templates/merepresenta/pautas.html b/merepresenta/templates/merepresenta/pautas.html deleted file mode 100644 index d65d21a0..00000000 --- a/merepresenta/templates/merepresenta/pautas.html +++ /dev/null @@ -1,329 +0,0 @@ -{% extends "base.html" %} -{% load staticfiles %} -{% load votainteligente_extras %} - -{% block title %}- Sobre{% endblock title %} - -{% block everything %} -
-
- - - - - -
-

Pautas #MeRepresenta

-
- - -
-
-
- - - -
- -
-

Gênero

- -
-

Legalização do aborto

-

- A prática de aborto é crime no Brasil: mulheres e médicos que - praticam aborto ilegal podem ser presos. Uma em cada cinco mulheres - já fez aborto no país e, por ano, cerca de 1 milhão de abortos são - realizados. Metade das mulheres que praticam aborto ilegal acabam - tendo complicações médicas e precisam ser internadas e muitas delas - morrem. O Supremo Tribunal Federal fez recentemente uma audiência - pública sobre o tema, com participação da sociedade civil e de - pesquisadores, e vai decidir se mulheres com gravidez de até 12 - semanas podem abortar (ADPF 442). -

- -

- Saiba mais a respeito com a campanha #NemPresaNemMorta

-
-
-

Monitoramento da Lei do feminicídio

-

- Cerca de 12 mulheres são assassinadas por dia no Brasil. O - feminicídio (assassinato motivado pela vítima ser mulher) atinge - principalmente mulheres negras e de baixa renda. Mesmo depois de três - anos da lei do feminicídio ter sido aprovada no Brasil, os seus - efeitos ainda não podem ser medidos. A falta de dados oficiais - dificulta o combate a este tipo de violência contra mulheres. A - aplicação efetiva da lei do feminicídio depende de seu monitoramento - pelos órgãos públicos, responsáveis pela coleta e divulgação dos - dados. -

-

- Saiba mais a respeito na série de reportagem Violência Anunciada - -

-
-
-

Financiamento público de campanhas de mulheres negras

-

- 27% da população: essa é a porcentagem de mulheres negras no Brasil. - Mas no Congresso Nacional, elas são apenas 2%. Mulheres brancas - também são minoria na política, a diferença é que elas têm 3 vezes - mais chances de ganhar uma eleição do que mulheres negras. Dentro - dos partidos políticos, apenas 2,5% dos recursos são destinados - para candidaturas de mulheres negras. Hoje está no Tribunal - Superior Eleitoral uma consulta pública que exige um investimento - mínimo de dinheiro dos partidos em candidatas negras. -

-

- Saiba mais a respeito com a campanha Mulheres Negras Decidem -

-
-
- -
-

Raça

-
-

Tornar crime o abate de animais em religiões de matriz africana

-

- A Constituição protege a liberdade religiosa e a Lei de Crimes Ambientais proíbe maus tratos contra animais. Abates religiosos são praticados por judeus, muçulmanos e fiéis de religiões afro-brasileiras de um jeito que provoca morte instantânea, com mínimo de dor. Tribunais do Rio Grande do Sul e São Paulo já decidiram que estes casos não são maus tratos. Agora o Supremo Tribunal Federal dará a palavra final sobre o assunto (RE 494601). -

-

- Saiba mais nesse vídeo -

-
-
-

Cotas raciais nas universidades

-

- Apenas 10% das mulheres negras e 7% dos homens negros têm acesso à universidade, mostrando que esse espaço ainda não é democrático e não representa a realidade da população brasileira. O valor médio do salário da população negra é quase metade do valor do salário da população branca (60%). As ações afirmativas, como cotas raciais nas universidades, servem para mudar esse cenário. Em 2012, o Supremo Tribunal Federal entendeu que as cotas raciais são um direito e ajudam a corrigir o histórico de racismo e escravidão no Brasil. -

-

- Saiba mais nesse vídeo -

-
-
-

Prioridade no atendimento de mulheres negras no SUS

-

- Mulheres negras sofrem com preconceito racial no atendimento de saúde no SUS. Em relação a mulheres brancas, recebem menos anestesia no parto, esperam mais tempo por atendimento, têm menos acesso a exames médicos, como mamografia, e 60% das vítimas de mortalidade materna no país são negras. -

-

- Saiba mais na campanha SUS sem Racismo. -

-
-
- -
-

LGBTS

-
-

O preconceito contra LGBTs deve ser crime

-

- O Brasil é um dos países que mais mata LGBTs no mundo, em especial travestis e transexuais. - Mas não há legislação que considere crime o preconceito contra lésbicas, transexuais e travestis, bissexuais, gays. - Propostas para tornar crime o preconceito contra LGBTs estão sendo discutidas no Congresso Nacional (PL 134/2018, PL 515/2017 e 7582/2014). - Veja mais nesse vídeo -

-
-
-

Trans e travestis podem usar o banheiro que quiserem

-

- A população transexual e travesti é frequentemente impedida de usar banheiros de acordo com sua identidade de gênero. - Não existe uma legislação sobre o assunto. - Porém, o Supremo Tribunal Federal iniciou essa discussão em 2015, - dizendo que não permitir o uso de banheiros conforme identidade de gênero feriria a dignidade humana, - mas o julgamento foi suspenso (RE 845779). Veja mais nesse vídeo -

-
-
-

Projeto “Escola sem partido”

-

- “Escola sem partido” é nome dado a uma série de projetos lei que têm sido apresentados nos municípios, estados e também no Congresso Nacional (PL 7180/2014), que querem tirar o ensino sobre raça, classe social, gênero, identidade de gênero e orientação sexual nas escolas. 73% dos estudantes LGBTs já sofreu agressão verbal, 60% se sente inseguro e 36% já sofreu violência física nas escolas. -

-

- Saiba mais a respeito com a campanha Educação faz meu gênero -

-
-
- -
-

Povos tradicionais & Meio Ambiente

- -
-

Marco temporal na demarcação de terra

-

- A demarcação de terras é uma luta histórica dos povos indígenas e quilombolas, por conta de seus vínculos históricos, culturais e ancestrais com o território. Uma série de iniciativas quer impedir o direito à terra que esses povos têm, seja no Congresso Nacional (PEC 215/2000), seja no judiciário. É o caso do “marco temporal”, argumento usado por alguns juízes para limitar o direito à terra apenas para os povos tradicionais que estivessem vivendo nela em 5 de outubro de 1988. Mas isso ignora que esses povos tradicionais foram expulsos e impedidos de retornar a suas terras. -

-

- Saiba mais com a campanha Ruralômetro -

-
-
-

Cotas para indígenas no Congresso

-

- Nos últimos 30 anos de democracia no Brasil, apenas um representante indígena foi eleito para o Congresso Nacional, - apesar dos indígenas serem 0,4% da população brasileira. Para mudar esse cenário, - recursos públicos para campanhas ou cadeiras no Congresso poderiam ser reservados a candidaturas de indígenas. - Saiba mais nesse vídeo -

-
-
-

Facilitar uso de agrotóxico

-

- O Brasil é campeão mundial no consumo de agrotóxicos, mercado que gira bilhões de dólares todos os anos. Mais da metade dos alimentos consumidos pelos brasileiros está contaminado por agrotóxicos e milhares de pessoas são atendidas pelo SUS com sintomas de intoxicação. O tema está sendo discutido no Congresso (PL 6299/2002), para permitir ainda mais o uso de alimentos com agrotóxicos. -

-

- Saiba mais com a campanha #ChegaDeAgrotóxicos -

-
-
- -
-

Trabalho, Saúde e Educação

-
-

Reforma trabalhista

-

- A reforma trabalhista aprovada no atual governo criou algumas formas precárias de contratação, como o contrato intermitente, - enfraqueceu os sindicatos ao retirar a contribuição sindical obrigatória, permitiu o trabalho insalubre da mulher gestante - e retirou o acesso gratuito do trabalhador à justiça. -

-

- Saiba mais nesse vídeo -

-
-
-

Teto de gastos públicos

-

- O governo atual adotou uma política econômica conhecida por “teto de gastos públicos”, para limitar os gastos públicos federais. Essa política é formada por algumas medidas como: congelamento de gastos sociais com políticas para a saúde, educação e seguro desemprego pelos próximos 20 anos. A ONU condenou tais medidas, por afetarem a população mais pobre. Ainda assim, ela foi aprovada no Congresso Nacional pela Emenda Constitucional 95. -

-

- Saiba mais a respeito com a campanha Direitos Valem Mais, Não aos Cortes Sociais -

-
-
- -
-

Segurança e Direitos Humanos

-
-

Autos de resistência

-

- “Auto de resistência” era o nome dado pela polícia ao homicídio de pessoas que ofereceram “resistência à prisão”. Na prática, significava dizer que esses homicídios eram praticados por policiais em legítima defesa. O problema é que esses casos acabam não sendo investigados e, dos que são, 98% são arquivados. Hoje essa expressão foi proibida, mas outras parecidas, como "mortes em decorrência de ação policial", continuam sendo usadas pela polícia. -

-

- Saiba mais a respeito com o documentário Auto de Resistência -

-
-
-

Redução de maioridade penal

-

- Nossa Constituição não permite que menores de 18 anos sejam processados e presos como adultos, - mas permite que esses adolescentes sejam internados em Fundações Casa. - Alguns membros do Congresso Nacional defendem a alteração da - Constituição para reduzir a “maioridade penal” (PEC 171/93 e PEC 33/12), - ou seja, que possam ser presos como adultos. Como não estão conseguindo, - agora tentam outra estratégia: aumentar o tempo que os adolescentes passam internados (PL 7197/02). - Estudos comprovam que a redução da maioridade penal em diferentes países não levou à redução da criminalidade. -

-

- Saiba mais com a campanha 18 Razões para a Não Redução da Maioridade Penal -

-
-
- -
-

Corrupção

-
-

Políticos serem donos de emissoras de rádio e TV

-

- Hoje existem 32 deputados federais e 8 senadores no Congresso Nacional que são donos de emissoras de rádio e TV. Assim eles podem influenciar o que a mídia fala sobre eles. Esses veículos de comunicação são concessões públicas que dependem de autorização do próprio Congresso Nacional, ou seja, dos próprios deputados federais e senadores. Duas ações no Supremo Tribunal Federal questionam se essa situação viola a nossa Constituição (ADPF 246 e ADPF 379). -

-

- Saiba mais a respeito com a iniciativa - Quem controla a mídia no Brasil? -

-
- -
-

Transparência nos gastos dos partidos políticos

-

- Todos os partidos políticos recebem dinheiro público do chamado “Fundo Partidário”. Nas eleições de 2018, pela primeira vez, também receberão 1,7 bilhão de reais de dinheiro público para financiar suas campanhas eleitorais de um “Fundo Especial de Financiamento de Campanha”. As lideranças dos partidos têm liberdade para escolher como gastar esse dinheiro e não existe um controle da sociedade sobre esses gastos. A obrigação dos partidos divulgarem seus balanços financeiros e prestações de contas pode ajudar na fiscalização da utilização desses recursos públicos pela sociedade. -

-

- Saiba mais a respeito com a iniciativa - Unidos Contra a Corrupção -

-
-
- -
-

Drogas

-
-

Legalização da maconha

-

- A maconha não seria mais um mercado ilegal se fossem aprovadas leis dizendo como ela deveria ser produzida e vendida, do mesmo jeito que já acontece com outras drogas, como álcool, tabaco e medicamentos. Isso significa que a maconha poderia ser produzida, vendida e utilizada de acordo com o direito. O mercado da maconha seria fiscalizado e não financiaria mais atividades criminosas. A legalização da maconha está sendo discutida no Congresso Nacional (Projetos de Lei 7.270/2014 e 10.549/2018). -

-

- Saiba mais a respeito com a plataforma Drogas é Coisa de Política - -

-
-
-

Internação compulsória para usuários de drogas

-

- A internação psiquiátrica compulsória ocorre quando uma pessoa é internada contra a sua vontade. Atualmente, ela pode ocorrer por decisão do Judiciário (sem precisar da autorização da família) em casos extremos, quando o paciente não tem mais controle sobre sua condição psicológica e física. Alguns políticos têm tentado combater o uso de drogas com a internação compulsória coletiva de usuários, ou seja, contra sua vontade e sem avaliação da condição psicológica e física de cada um. É o que ocorre atualmente na cidade de São Paulo, na região da Cracolândia. -

-

- Saiba mais nesse vídeo -

-
-
- -
-

Migrantes

-
-

Acolhimento de migrantes venezuelanos no Brasil

-

- A Venezuela está passando por uma grave crise econômica e humanitária. O Brasil faz fronteira com a Venezuela, mas é um dos países da América do Sul que menos recebe migrantes de lá. Em Roraima, o governo restringiu o acesso de venezuelanos à saúde e o judiciário chegou a fechar as fronteiras para a entrada de novos migrantes. Casos de xenofobia (ódio e preconceito por causa da origem da pessoa) também têm acontecido. -

-

- Saiba mais nesse vídeo -

-
-
-

Direito a voto de migrantes

-

- Cerca de 3 milhões de migrantes residem, trabalham e estudam no Brasil. Porém, eles não podem votar, nem se candidatar. Esse cenário pode mudar caso a nossa Constituição seja alterada e garanta o direito à participação dos migrantes na política do país (PEC 25/2012). Diversos países já garantiram esse direito. -

-

- Saiba mais a respeito com a campanha “Aqui Vivo, Aqui Voto" - -

-
-
- -
-
-
-
-
- - -
- -{% block scripts %} - -{% endblock scripts %} - -{% endblock everything %} diff --git a/merepresenta/templates/merepresenta/perguntas.html b/merepresenta/templates/merepresenta/perguntas.html deleted file mode 100644 index 08c2f893..00000000 --- a/merepresenta/templates/merepresenta/perguntas.html +++ /dev/null @@ -1,49 +0,0 @@ -{% extends "base2.html" %} -{% load staticfiles %} -{% load i18n %} -{% load thumbnail %} -{% load votainteligente_extras %} -{% load cache %} -{% load bootstrap3 %} -{% block title %}- 1/2 Naranja - Paso {{wizard.steps.step1}}{% endblock title %} - -{% block navbar %} -{% endblock navbar %} - -{% block content %} - -
-

O que é importante pra você?

-
-

Marque as pautas das quais você não abre mão na hora de escolher sua candidatura:

-
-
- {% csrf_token %} - {{ wizard.management_form }} - {% for x, y in form.fields.proposals.choices %} -
-
- - -
- - {{y}} - -
- {% endfor %} -
- - {{form.area.label}} - -
- {{form.area}} -
-
- - {% if wizard.steps.prev %} - - - {% endif %} - -
-{% endblock content %} diff --git a/merepresenta/templates/merepresenta/questions.html b/merepresenta/templates/merepresenta/questions.html deleted file mode 100644 index 67460343..00000000 --- a/merepresenta/templates/merepresenta/questions.html +++ /dev/null @@ -1,38 +0,0 @@ -{% extends "base2.html" %} -{% load staticfiles %} -{% load i18n %} -{% load thumbnail %} -{% load votainteligente_extras %} -{% load cache %} -{% load bootstrap3 %} -{% block title %}- 1/2 Naranja - Paso {{wizard.steps.step1}}{% endblock title %} - -{% block navbar %} -{% endblock navbar %} - -{% block content %} - -
-

O que é importante pra você?

-
-

Marque as pautas das quais você não abre mão na hora de escolher sua candidatura:

-
-
- {% csrf_token %} - {{ wizard.management_form }} - - {% for field in wizard.form %} -
- {% bootstrap_field field %} - -
- {% endfor %} - - - {% if wizard.steps.prev %} - - - {% endif %} - -
-{% endblock content %} diff --git a/merepresenta/templates/merepresenta/resultado.html b/merepresenta/templates/merepresenta/resultado.html deleted file mode 100644 index a5e5486a..00000000 --- a/merepresenta/templates/merepresenta/resultado.html +++ /dev/null @@ -1,109 +0,0 @@ -{% extends "base2.html" %} -{% load staticfiles %} -{% load i18n %} -{% load thumbnail %} -{% load votainteligente_extras %} -{% load cache %} -{% load bootstrap3 %} -{% block title %}- 1/2 Naranja - Resultado{% endblock title %} - -{% block navbar %} -{% endblock navbar %} - -{% block paso %} -

Resultados

-{% endblock paso %} - -{% block content %} -
-
-

Essas são as candidaturas que mais respeitam os direitos humanos na sua cidade!

-

Aqui estão as candidaturas que escolheram no mínimo as mesmas pautas que você. As candidaturas que apoiam mais pautas e que fazem parte de coligações mais bem avaliadas aparecem primeiro, mas todas que concordam com você aparecem! Aqui você sabe mais sobre a avaliação das coligações e os critérios para ordem de exibição.

-

Agora clique nas candidaturas para conhecer mais sobre a opinião do/a candidato/a e sobre a coligação que receberá seu voto! Na dúvida, escolha uma mulher e ajude a promover a igualdade de gênero na Câmara de Vereadores de sua cidade!

- - - {% if organizations %} -
-

Organizaciones

- {% for o in organizations.all %} -
- {% if o.logo_small %} - {{o.title}} - {% endif %} -
    - {% if o.org_url %} -
  • - {% endif %} - {% if o.facebook %} -
  • - {% endif %} - {% if o.twitter %} -
  • - {% endif %} - {% if o.instagram %} -
  • - {% endif %} - {% if o.rss_url %} -
  • - {% endif %} -
-
-
-
- {% endfor %} -
-
- {% endif %} - - - - {% for election_result in results %} -
-

No {{election_result.election}} seus candidatos são

- {% for candidate_result in election_result.candidates %} - -
- - {% if candidate_result.candidate.image %} - {% thumbnail candidate_result.candidate.image "100x100" crop="center" as im %} - {{candidate_result.candidate.name}} - {% endthumbnail %} - {% else %} - {{candidate_result.candidate.name}} - {% endif %} - - - - {{candidate_result.candidate.name}} - - - - nº {{ forloop.counter }} - - {% comment %} - {% get_personal_data candidate=candidate_result.candidate personal_data='Pacto' as pacto %} - {% if pacto.value %} - {% endcomment %} - - Partido: PPD - - - {{ candidate_result.value|floatformat }}% #MeRepresenta - -
- - - - {% endfor %} -
-
- {% endfor %} - - -
-
- - - -Jogar de novo -{% endblock content %} diff --git a/merepresenta/templates/merepresenta/sobre.html b/merepresenta/templates/merepresenta/sobre.html deleted file mode 100644 index da31c987..00000000 --- a/merepresenta/templates/merepresenta/sobre.html +++ /dev/null @@ -1,194 +0,0 @@ -{% extends "base.html" %} -{% load staticfiles %} -{% load votainteligente_extras %} - -{% block title %}- Sobre{% endblock title %} - -{% block everything %} -
-
- - -
-

Sobre

-
- -
-

Quem somos

-

- O #MeRepresenta é uma ONG formada por coletivos de mulheres, pessoas - negras e LGBT+ que buscam promover igualdade de gênero, luta - antirracista e respeito à diversidade sexual e à identidade de gênero - na política. Somos resultado da união entre Rede Feminista de - Juristas (DeFEMde), #VoteLGBT, Blogueiras Negras e Fundação - Cidadania Inteligente. -

-
-
- - Blogueiras Negras - -
- -
- - Rede Feminista de Juristas - -
- -
- - Cidadania Inteligente - -
- -
- - Vote LGBT - -
-
-

- Lançamos a plataforma #MeRepresenta em 2016 para conectar eleitoras e - eleitores a candidaturas que valorizam os direitos humanos. Desde então, - nosso desafio é, de forma comprometida com a representatividade, diminuir - a distância entre a população e a política brasileira e mostrar que os - direitos da mulher, das pessoas negras e LGBTs são um valor político e - eleitoral inegociável.

-

- A nova plataforma #MeRepresenta para as eleições de 2018 foi elaborada - com a participação diversas organizações da sociedade civil, com apoio - da Saiba+, responsável pelo desenho da plataforma, e financiamento da - Altec. Os escritórios Mattos Filho, Silveira Andrade Advogados, Tini e - Guimarães Advogados e a ONG Casa 1 também apóiam a iniciativa. -

-
- - -
-

Impacto

-

- Nas eleições municipais de 2016, convidamos todas as 460 mil candidaturas - a vereador e vereadora do país a responderem 14 perguntas sobre diversos - temas da agenda de direitos humanos, como descriminalização e legalização - do aborto, desmilitarização da polícia, adoção por famílias LGBTs, - entre outros. -

-

- Em 10 dias, nossa plataforma teve 1 milhão de visualizações - e mais de 150 mil pessoas a usaram para escolher seu voto. 70% era de - mulheres eleitoras, em sua maioria entre 18 e 34 anos. Um sucesso, né? -

-
- -
- Gráfico informando quem utilizou a plataforma em 2016 -
- -
-

- Foram 890 candidatas e candidatos de todos os 35 partidos participando - dessa pesquisa em nossa plataforma, distribuídos em 244 cidades de 24 - estados. Das 10 candidaturas mais visualizadas da plataforma, 4 eram - LGBT. Além disso, 9 eram mulheres, sendo 3 delas negras e uma trans. - O único homem dessa lista era gay. -

-

- Política com a nossa cara, é isso que esses dados mostram! A - plataforma do #MeRepresenta serve para fazer com que a política - seja mais parecida com a gente. Queremos mais mulheres, pessoas - negras e LGBTs na política! -

-
- - -
-

Como funciona

-

- A plataforma do #MeRepresenta conecta eleitoras/es às candidaturas que - se posicionam sobre temas relevantes para a sociedade civil, como segurança, - corrupção, trabalho, saúde, educação, raça, gênero, meio ambiente e povos - tradicionais, etc. Ela foi desenvolvida contendo três grandes eixos: - Candidatas/os, Eleitoras/es e Voluntárias/os. -

-
- - -
- Gif animado -
- -
-

Candidatas/os

-

- A partir do dia 16 de agosto, todas candidaturas autorizadas pelo TSE - ao legislativo podem fazer seu cadastro na plataforma. Finalmente! É - necessário apenas incluir alguns dados pessoais e conectar o perfil da - plataforma com a conta pessoal do Facebook, par, garantir a identidade - da/o candidata/o. -

-

- Após completar seu perfil com informações simples e uma breve bio, a - candidatura deve responder se é a favor ou contra a 22 pautas, construídas - em diálogo com as organizações parceiras, sobre 9 temas: Gênero, Raça, - LGBT, Povos Tradicionais e Meio Ambiente, Segurança e Direitos Humanos, - Corrupção, Trabalho, Saúde, Educação, Drogas e Migrantes. Ao terminar, o - candidato aponta quais seriam os 3 temas prioritários do seu mandato. Os - perfis e respostas poderão ser editados até dia 12 de setembro. -

-
- - -
-

Eleitoras/es

-

- A partir de 19 de setembro, as eleitoras/es começaram a usar - a plataforma e indicar quais os temas mais importantes (entre os nove - apresentados) para definir seu voto. -

-

- Sendo assim, a plataforma apresenta um ranking das candidaturas que - priorizam essas pautas levando em consideração o comprometimento dos - partidos com essas pautas. Fizemos uma avaliação da atuação de todos os - partidos com representação no congresso nacional durante os últimos - 4 anos. Saiba mais sobre essa metodologia aqui. -

-

- Serão priorizadas na ordem de exibição as candidaturas de mulheres, - negras/os, indígenas e LGBTs - grupos que, juntos, compõem 80% da - população, mas que têm pouca ou nenhuma representação na política. -

-
- - -
-

Voluntárias/os

-

- Assim como em 2016, o trabalho das/os voluntárias/os é fundamental - para alcançar o máximo de candidaturas e garantir o sucesso do - #MeRepresenta. Esse grupo de pessoas é responsável por entrar em - contato com as candidaturas via Facebook, encontrar emails diretos - e convidar para o ingresso na plataforma. - Vem pra cá ó! -

-
- - -
- Ilustração de pessoas no congresso gritando #MeRepresenta -
-
-
- -{% endblock everything %} diff --git a/merepresenta/templates/merepresenta/termos.html b/merepresenta/templates/merepresenta/termos.html deleted file mode 100644 index 083c8667..00000000 --- a/merepresenta/templates/merepresenta/termos.html +++ /dev/null @@ -1,354 +0,0 @@ -{% extends "base.html" %} -{% load staticfiles %} -{% load votainteligente_extras %} - -{% block title %}- Sobre{% endblock title %} - -{% block everything %} -
-
- - - - -
-
-

- O #MeRepresenta é utilizado por três tipos de usuárias/os.

-

Aqui, os termos de usos para eleitoras/es.

-

Aqui, o de voluntárias/os.

- -

E, abaixo, o das candidaturas: -

- -

Termos de uso para candidaturas (2018.1)

-

- A UTILIZAÇÃO DA PLATAFORMA #MEREPRESENTA ESTÁ SUJEITA AOS SEGUINTES - TERMOS. SE NÃO CONCORDAR COM AS DISPOSIÇÕES A SEGUIR, POR FAVOR, NÃO - FAÇA SEU CADASTRO. -

-
-

- Leia este documento com atenção para compreender as regras e limitações - que regem o uso da plataforma. -

-

- O #MeRepresenta é uma associação sem fins lucrativos, inscrita sob o - CNPJ 31.144.532/0001-26, na cidade e estado de São Paulo, formada por - coletivos de mulheres, pessoas negras e LGBT+ que buscam promover a - igualdade de gênero, a luta antirracista e o respeito à diversidade - sexual e à identidade de gênero na política. Nossa gestão é coordenada, - em parceria com a Rede Feminista de Juristas (DeFEMde), #VoteLGBT, - Blogueiras Negras e Fundação Cidadania Inteligente. -

-

- A plataforma #MeRepresenta (doravante “a #MeRepresenta”) busca conectar - eleitoras e eleitores a candidaturas que valorizam os direitos humanos. -

- -

- 1. A #MeRepresenta é uma plataforma para realização de propaganda - eleitoral ou pesquisa de intenção de voto? -

- -

- Não. A #MeRepresenta não realiza propaganda eleitoral, limitando-se a - coletar, organizar e divulgar informações, algumas delas já de acesso - público. -

-

- A #MeRepresenta também não realiza qualquer tipo de pesquisa de - intenção de voto. As informações fornecidas pela plataforma não - demonstram intenção de voto de qualquer eleitor. -

- -

- 2. Quais dados serão coletados e publicados? -

-

- A #MeRepresenta valoriza a sua privacidade e o uso adequado dos seus dados pessoais. Portanto, os dados livremente fornecidos por você serão regidos por este documento e limitados aos usos previstos nestes documentos. -

-

- A #MeRepresenta utiliza duas fontes de dados: -

- -

- 2.1. Dados pessoais preenchidos ou fornecidos pela/o candidata/o à plataforma -

-

- Ao finalizar seu cadastro na #MeRepresenta, a/o candidata/o autoriza a formação de um cadastro com informações pessoais. -

-

- A/o candidata/o usuário da #MeRepresenta garante que os dados pessoais fornecidos para a #MeRepresenta são verdadeiros e atuais, bem como garante que irá atualizar seus dados sempre que houver qualquer modificação neles. -

-

- A #MeRepresenta jamais utilizará os dados pessoais solicitados para outras finalidades que não aquelas descritas neste Termo de Uso, salvo em situações em que houver um interesse público preponderante ou um interesse legítimo adequado às expectativas da/o usuária/o. -

-

- Para qualquer outro uso dos dados pessoais preenchidos ou fornecidos pela/o candidata/o, não previsto por este Termo de Uso, a/o candidata/o será consultado previamente, podendo ser contatada/o pela equipe da #MeRepresenta. -

- -

- 2.1.1. E-mail e endereço de página e foto no Facebook -

-

- Os dados pessoais de e-mail, endereço de sua página e foto no Facebook, - serão utilizados para o cadastramento do candidato na plataforma, - adotando-se o e-mail informado como canal principal de comunicação entre - a #MeRepresenta e o candidato. A foto extraída do perfil do Facebook - será utilizada para identificação da/o candidata/o pelos eleitores. O - cadastro via perfil pessoal ou de campanha da candidatura no Facebook - é necessário para garantir a identidade e autoria do cadastro na - plataforma. A #MeRepresenta não se responsabiliza por informações - prestadas por outrem, que não a/o candidata/o, a partir desses perfis. -

- -

- 2.1.2. Gênero, raça e LGBT -

-

- As informações sobre gênero, raça e se a/o candidata/o é LGBT são de - preenchimento opcional e serão utilizadas na plataforma como filtro, - para facilitar o processo de escolha dos eleitores por perfil das - candidaturas, podendo também serem utilizadas para a realização de - estudos e levantamento estatísticos, que não envolvem a intenção de - voto dos usuários. Por exemplo, poderemos cruzar o dado da resposta - da/o candidata/o sobre raça e gênero com os dados preenchidos pelos - partidos na base de dados da Justiça Eleitoral (DivulgaCand) ou obter - uma estimativa do número de candidaturas LGBTs no país. -

-

- Portanto, ao aceitar estes Termos de Uso, a/o candidata/o aceita - expressamente que os dados previstos neste parágrafo, que podem ser - classificados como sensíveis, possam ser utilizados para as finalidades - aqui descritas. Tais dados não serão, em nenhuma hipótese, compartilhados - sem a autorização expressa do seu titular, depois de devidamente - informado dos seus possíveis usos. -

- -

- 2.1.3. Questionário -

-

- Ao se cadastrar, a/o candidata/o também deverá preencher questionário com - informações sobre propostas e posicionamentos políticos. Preenchendo esse - questionário, o candidato concede autorização expressa para a divulgação - de suas respostas na plataforma #MeRepresenta. Essas respostas também - facilitarão o processo de escolha dos eleitores por filtragem do perfil - das candidaturas, podendo também serem utilizadas para a realização de - estudos e levantamento estatísticos, que não envolvem a intenção de voto - dos usuários. Por exemplo, poderemos comparar quais pautas tiveram maior - ou menor adesão entre as candidaturas inscritas na plataforma. -

-

- Portanto, ao aceitar estes Termos de Uso, a/o candidata/o aceita - expressamente que os dados previstos neste parágrafo, que podem ser - classificados como sensíveis, possam ser utilizados para as finalidades - aqui descritas. Tais dados não serão, em nenhuma hipótese, compartilhados - sem a autorização expressa do seu titular, depois de devidamente - informado dos seus possíveis usos. -

- -

- 2.2. Dados extraídos da base pública do Tribunal Superior Eleitoral - (DivulgaCand) -

-

- Os dados pessoais cujo acesso é público serão colhidos das bases de - informações da Justiça Eleitoral e serão disponibilizados na plataforma. -

-

- Por meio deste documento, a/o candidata/o autoriza expressamente que tais - dados de acesso público podem ser utilizados, também, para a realização - de estudos e levantamento estatísticos, que não envolvem a intenção de - voto dos usuários. -

-

- Todos esses dados coletados serão publicados pela #MeRepresenta em dois - momentos: -

- -

- 2.3. Durante as eleições: “Encontre a/o sua/seu candidata/o” -

-

- Durante as eleições, a plataforma #MeRepresenta funciona para aproximar - eleitores de candidaturas favoráveis a temas de direitos humanos. Os - eleitores podem filtrar as informações da plataforma, de acordo com - suas preferências, por gênero, raça, LGBT, partido político/coligação - e posicionamento político manifestados pelas candidaturas à plataforma. -

- -

- Portanto, ao aceitar estes Termos de Uso, a/o candidata/o aceita - expressamente que os dados previstos neste parágrafo, que podem ser - classificados como sensíveis, possam ser utilizados para as finalidades - aqui descritas. Tais dados não serão, em nenhuma hipótese, compartilhados - sem a autorização expressa do seu titular, depois de devidamente - informado dos seus possíveis usos. -

- -

- 2.4. Fora das eleições: “Encontre aliadas/os políticas/os” -

-

- Após as eleições, a #MeRepresenta disponibilizará as informações - coletadas em um repositório de perfil de políticos favoráveis a temas de - direitos humanos, para permitir a formação de alianças/mobilização social - e também o controle social das informações prestadas pelos políticos na - plataforma. A base de dados será disponibilizada em arquivo exportável - para consulta pública. -

- -

- 3. Como é composta a nota atribuída ao Partido Político? -

-

- Além das informações prestadas pela própria candidatura, a #MeRepresenta - disponibilizará para consulta dos usuários uma nota dos partidos políticos - e das coligações partidárias. -

-

- Essa nota é composta por informações extraídas do Congresso Nacional, - como o desempenho de parlamentares dos partidos em votações importantes - para temas de direitos humanos, selecionadas pela #MeRepresenta e - entidades parceiras. -

-

- A metodologia empregada para avaliação dos partidos/coligações estará - disponível para consulta na plataforma. -

- -

- 4. Existe alguma forma de pedir a revisão da nota atribuída aos partidos - e coligações? -

-

- O candidato tem o direito de solicitar a revisão da nota atribuída, - bastando entrar em contato conosco pelo e-mail - contato@merepresenta.org.br. Somente haverá revisão dos valores - atribuídos aos partidos e coligações com a demonstração de equívoco ou - inexatidão das informações coletadas no Congresso Nacional. -

- -

- 5. Existe alguma forma de corrigir as informações dos candidatos na - #MeRepresenta? -

-

- Qualquer correção de dados incompletos, inexatos ou desatualizados de - candidatas/os poderá ser corrigida diretamente pela candidatura, em seu - perfil cadastrado na plataforma, a qualquer momento. As respostas das - candidaturas ao questionário poderão ser alteradas apenas até o dia - 12/09/2018. -

- -

- 6. E se eu não quiser mais ter minhas informações publicadas? -

-

- A/o candidata/o é livre para requerer o pedido de exclusão definitiva de - seus dados da #MeRepresenta na hipótese de desejar sair ou ser excluído - da plataforma, bastando entrar em contato conosco pelo e-mail - contato@merepresenta.org.br, via e-mail oficial cadastrado na plataforma - e confirmando seus dados pessoais. -

-

- O encerramento da conta resultará na destruição de qualquer conteúdo - associado ao seu perfil e na exclusão de todas as informações publicadas - na plataforma. Assim, tenha isso em mente antes de decidir encerrar a sua - conta. -

- -

- 7. A #MeRepresenta se responsabiliza pelo uso das informações da - plataforma por usuários e terceiros? -

-

- Não. A #MeRepresenta, enquanto canal de comunicação, tratamento, - priorização, construção, visualização, distribuição e compilação de - conteúdo não será responsável por qualquer conduta dos seus usuários - ou de terceiros. Caso a #MeRepresenta seja envolvida em disputas e - conflitos relativos à conduta dos usuários, o usuário fica ciente de que - a #MeRepresenta denunciará todas e quaisquer lides, litígios e disputas - no qual for envolvida por conta de conteúdos e condutas submetidos ou - perpetradas por usuários ou terceiros, na medida permitida pela lei, de - modo a não mais ser parte da lide, litígio ou disputa. A #MeRepresenta - também se faculta o direito de chamar ao processo qualquer usuário, em - razão de quaisquer ações originárias de sua conduta e conteúdo submetido. - Faculta-se também o direito de responsabilizar diretamente o usuário - perpetrador da conduta abusiva, valendo-se para isso de todos os recursos - legalmente possíveis, incluindo direito de regresso, dentre outros. - Para tanto, a #MeRepresenta irá valer-se dos dados de registro bem como - quaisquer outros dados técnicos que permitam identificar o usuário, - ficando desde já cientes disso o usuário ou terceiros afetados. -

- -

- 8. Estes Termos nunca serão alterados? -

-

- Esta política de privacidade será atualizada regularmente e o usuário - será notificado pelo e-mail informado no cadastro sobre as atualizações - realizadas. Se não concordar com os novos Termos, o candidato poderá - rejeitar, optando pelo descadastramento e desindexação de suas - informações da plataforma a qualquer momento. -

- -

- 9. A utilização da plataforma #MeRepresenta está sujeita às seguintes - limitações adicionais: -

-

- Você declara, garante e concorda que não contribuirá com qualquer - violação à legislação eleitoral ou uso da plataforma para: -

- -
    -
  • Gerar discriminação
  • -
  • - Associar sua presença na plataforma como se fosse um apoio da - associação sem fins lucrativos #MeRepresenta à sua candidatura. -
  • -
- -

- A #MeRepresenta reserva-se o direito de cancelar o registro na plataforma - a qualquer tempo de qualquer candidata/o, por sua única e exclusiva - discricionariedade, sem qualquer aviso prévio, quando considerar violados - os dispostos deste Termo de Uso. -

- -

10. Informações para exercer seus direitos:

-
    -
  • Contato da #MeRepresenta: contato@merepresenta.org.br
  • -
  • - Jurisdição: Fica eleito o Foro Central da Comarca do Estado de São - Paulo para decidir qualquer disputa decorrente deste Termo de Uso, - desistindo as Partes de qualquer outro, por mais privilegiado que seja - ou venha a ser. Eventuais disputas serão reguladas pela legislação - brasileira. -
  • -
-
- - -
-

Termos simplificados

-
    -
  • Dados preenchidos aqui poderão ser pesquisados durante e após o período eleitoral
  • -
  • Você é responsável pelas afirmações preenchidas
  • -
  • Não fazemos pesquisa de intenção de votos, nem campanha eleitoral
  • -
  • Você pode alterar suas respostas ao questionário até o dia 12/9
  • -
  • Você pode apagar seus dados da plataforma quando quiser
  • -
-
- -
-
- -{% endblock everything %} diff --git a/merepresenta/templates/navbar.html b/merepresenta/templates/navbar.html deleted file mode 100644 index 6c01eb54..00000000 --- a/merepresenta/templates/navbar.html +++ /dev/null @@ -1,76 +0,0 @@ -{% load votainteligente_extras %} -{% load staticfiles %} - - diff --git a/merepresenta/templates/registration/login.html b/merepresenta/templates/registration/login.html deleted file mode 100644 index aa0a84dd..00000000 --- a/merepresenta/templates/registration/login.html +++ /dev/null @@ -1,42 +0,0 @@ -{% extends "registration/registration_base.html" %} -{% load i18n %} -{% load bootstrap3 %} -{% load votainteligente_extras %} -{% load staticfiles %} -{% block title %}- Ingreso/Registro{% endblock %} -{% block extra_css %} - -{% endblock extra_css %} -{% block content %} - - - - -

Ingresa

-
-
- -
- {% include '_social_login_buttons.html' with url=next %} -
-

{% trans 'O regístrate con un usuario y contraseña' %}

- {% user_register %} - - -
-

{% trans 'Ingresa tu usuario y contraseña' %}

- {% basic_login url=next %} -
-
-
-
- - -{% endblock content %} diff --git a/merepresenta/templates/registration/registration_base.html b/merepresenta/templates/registration/registration_base.html deleted file mode 100644 index 60b807d9..00000000 --- a/merepresenta/templates/registration/registration_base.html +++ /dev/null @@ -1,16 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} - -{% block everything %} - -
-
-{% endblock everything %} diff --git a/merepresenta/templates/voluntarios/add_email_to_candidate.html b/merepresenta/templates/voluntarios/add_email_to_candidate.html deleted file mode 100644 index beb4eaa2..00000000 --- a/merepresenta/templates/voluntarios/add_email_to_candidate.html +++ /dev/null @@ -1,294 +0,0 @@ -{% extends "base_voluntarios.html" %} -{% load staticfiles %} -{% load i18n %} -{% load bootstrap4 %} -{% load votainteligente_extras %} - -{% block title %}- Voluntarios{% endblock title %} - -{% block content %} - -
- - -
-
-

Análise de candidatura

-

- Obrigada. Aqui mostramos o que o TSE disse sobre a/o - {{form.candidate}}! - Por favor, siga o passo a passo para completar as informações. -

-
-
- -
- - - - - - - - - - - - - - - - - - - -
NomeNº de UrnaCandidaturaPartidoEstado
{{form.candidate}}{{form.candidate.numero}}{{form.candidate.election.name|title}}{{form.candidate.partido.initials}}{{form.candidate.election.area.name}}
-
-
- - -
-
-
-

1. Primeiro, veja se a/o candidata/o tem página ou perfil de facebook:

- - Buscar no Facebook - -
-
-

Encontrou página ou perfil no Facebook?

- -
-
-

- - Booa! Então copie a mensagem abaixo e cole no inbox da página que - você encontrou no Facebook ;) -

- - Mandei! E agora? -
-
- -
-

em sua busca no facebook, tente também:

-
    -
  • nome + número da/o candidata/o
  • -
  • nome + "deputado" ou "deputado"
  • -
  • nome + "candidata" ou "candidato"
  • -
- -

Como saber se a página pertence mesmo ao candidato:

-
    -
  • Fotos e vídeos com material de campanha
  • -
  • Imagem de capa com informações da eleição
  • -
  • Número da candidatura 123 ou 1234, ou 12345
  • -
  • Tem hashtag de campanha?
  • -
  • Alguns sites mostram as fotos das/os candidatas/os, isso pode ajudar a identificar o Facebook. Fica a dica.
  • -
-
-
- - -
-
-
-

- - O email cadastrado no TSE é genérico ou voltou. Precisamos encontrar outro jeito de falar com a/o candidata/o. -

-
- -
-

- - O email cadastrado no TSE é genérico ou voltou. Precisamos encontrar outro jeito de falar com a/o candidata/o. -

-
- - - -
-

- Você encontrou algum email bom na sua busca? De repente, no site da - candidatura ou na página de Facebook... -

- -
- -
-

Cole aqui o email que você encontrou que a gente manda a mensagem!

-
- -
-
-
- -
- - -
- - -
- - -
- -
-
-
-
-
-
- -
-

- - Sucesso! Muito obrigada! -

- -
-
- -
-

em sua busca no google, tente também:

-
    -
  • nome + "e-mail"
  • -
  • nome + "e-mail" + número da candidata ou candidato
  • -
  • nome + "e-mail" + "deputado" ou "deputado"
  • -
  • nome + "e-mail" + "candidata" ou "candidato"
  • -
-

Exemplos de onde você pode achar esse email

-
    -
  • Site da campanha
  • -
  • Facebook de campanha
  • -
  • Seja criativa/o. A internet tá aqui pra isso. ;)
  • -
-
-
- - - -{% endblock content %} - -{% block scripts %} - - -{% endblock scripts %} diff --git a/merepresenta/templates/voluntarios/index.html b/merepresenta/templates/voluntarios/index.html deleted file mode 100644 index 103e15ed..00000000 --- a/merepresenta/templates/voluntarios/index.html +++ /dev/null @@ -1,70 +0,0 @@ -{% extends "base_voluntarios.html" %} -{% load staticfiles %} -{% load i18n %} -{% load votainteligente_extras %} -{% load el_pagination_tags %} -{% load bootstrap4 %} - -{% block title %}- Voluntarios{% endblock title %} - -{% block content %} -
-
-
-

Bem–vinda/o, voluntária/o!

-

- Aqui você encontra uma lista de candidatas/os que precisamos stalkear até - o fim! Vem com a gente! -

-

Para começar, escolha o estado e clique em pesquisar.

-
- -
-
-
- {% csrf_token %} - {% bootstrap_form update_area_form %} - -
-
-
- -
-
-
- -
-

Candidaturas encontradas

-
- - - - - - - - - - - - - {% paginate 10 candidates %} - - - {% for candidate in candidates %} - - - - - - - - - {% endfor %} - -
NomeNº de UrnaCandidaturaPartidoEstadoPesquisar
{{candidate.name}}{{candidate.numero}}{{candidate.election}}{{candidate.partido.initials}}{{candidate.election.area}}Analisar
-
- {% show_pages %} -
-
-{% endblock content %} diff --git a/merepresenta/templates/voluntarios/login.html b/merepresenta/templates/voluntarios/login.html deleted file mode 100644 index 74a59b8a..00000000 --- a/merepresenta/templates/voluntarios/login.html +++ /dev/null @@ -1,90 +0,0 @@ -{% extends "base.html" %} -{% load staticfiles %} -{% load i18n %} - -{% block title %}- Portada{% endblock title %} - -{% block content %} - - - -{% endblock content %} diff --git a/merepresenta/templates/voluntarios/obrigado.html b/merepresenta/templates/voluntarios/obrigado.html deleted file mode 100644 index d8312a4d..00000000 --- a/merepresenta/templates/voluntarios/obrigado.html +++ /dev/null @@ -1,18 +0,0 @@ -{% extends "base.html" %} -{% load staticfiles %} -{% load i18n %} - -{% block title %}- Portada{% endblock title %} - -{% block content %} -
-

Obrigada!

- Ilustração com voluntárias -

Agradecemos a sua contribuição! Que tal analisar mais um/a candidato/a?

- -
-{% endblock content %} diff --git a/merepresenta/templates/voluntarios/sorry.html b/merepresenta/templates/voluntarios/sorry.html deleted file mode 100644 index 67580a92..00000000 --- a/merepresenta/templates/voluntarios/sorry.html +++ /dev/null @@ -1,12 +0,0 @@ -{% extends "base.html" %} -{% load staticfiles %} -{% load i18n %} - -{% block title %}- Portada{% endblock title %} - -{% block content %} -
-

Obrigado!

- -
-{% endblock content %} \ No newline at end of file diff --git a/merepresenta/templates/voluntarios/update_area_of_volunteer.html b/merepresenta/templates/voluntarios/update_area_of_volunteer.html deleted file mode 100644 index e69de29b..00000000 diff --git a/merepresenta/templates/voluntarios/voluntarios-inativo.html b/merepresenta/templates/voluntarios/voluntarios-inativo.html deleted file mode 100644 index e2516f42..00000000 --- a/merepresenta/templates/voluntarios/voluntarios-inativo.html +++ /dev/null @@ -1,114 +0,0 @@ -{% extends "base.html" %} -{% load staticfiles %} -{% load i18n %} - -{% block title %}- Portada{% endblock title %} - -{% block content %} - -
-
-

- Bem-vinda/o ao - Portal de voluntárias -

-

- Daqui a poucos dias começamos a mapear juntos todas as candidaturas - do Brasil. Passa seu email para gente te chamar! -

- - -
-
-
-
- - -
-
- - -
-
- - -
- -
- -
-
-
-
- -
- -
- Ilustração com voluntárias -
- -
-

Mapear candidaturas? Como assim?

-

- Pela lei, todos os partidos deveriam fornecer os contatos de cada - candidatura para o TSE. Esse e-mail seria público, assim como todos - os dados que estão na tabela oficial que a gente já usa. Maas… não - é bem assim que acontece! -

-

- Muitos dos emails dessa tabela são do escritório do partido ou não são - válidos. Ou seja, nunca chega na pessoa! Esse é um exemplo de e-mail que - a gente encontra: email@email.com.br. Pode isso, TSE? -

-
- -
-

E aí, como faz pra falar com esses seres, então?

-

- Em 2016 tivemos ajuda de centenas de voluntárias/os em 7 cidades em - um esforço de achar os emails certos e chamar as candidaturas pelo - Facebook. Funcionou super! Tivemos muito mais candidatas/os - inscritas/os nessas cidades. Inbox bombando ;D -

-

- Pensando em otimizar o esforço coletivo, desenvolvemos para 2018 - um fluxo só para essa pesquisa. Tá quase pronto! Vamo junto?! -

-
-
- -{% endblock content %} diff --git a/merepresenta/tests/__init__.py b/merepresenta/tests/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/merepresenta/tests/candidatos/__init__.py b/merepresenta/tests/candidatos/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/merepresenta/tests/candidatos/login_and_first_page_view_tests.py b/merepresenta/tests/candidatos/login_and_first_page_view_tests.py deleted file mode 100644 index f1ac969a..00000000 --- a/merepresenta/tests/candidatos/login_and_first_page_view_tests.py +++ /dev/null @@ -1,272 +0,0 @@ -# coding=utf-8 -from django.test import TestCase, override_settings -from merepresenta.models import Candidate, NON_WHITE_KEY, NON_MALE_KEY -from merepresenta.tests.volunteers import VolunteersTestCaseBase -from backend_candidate.models import CandidacyContact, Candidacy -from django.core.urlresolvers import reverse -from django.contrib.auth.models import User -from social_django.models import UserSocialAuth -import mock -from django.views.generic.edit import FormView -from django.core import mail -from merepresenta.models import VolunteerInCandidate, VolunteerGetsCandidateEmailLog, Candidate -from merepresenta.voluntarios.models import VolunteerProfile -from elections.models import PersonalData, Area, Election -from django.conf import settings -import datetime -from merepresenta.candidatos.forms import CPFAndDdnForm, CPFAndDdnForm2 -from django.core import mail - -PASSWORD = 'candidato123' - - -@override_settings(ROOT_URLCONF='merepresenta.stand_alone_urls') -class CandidateLoginView(VolunteersTestCaseBase): - def setUp(self): - super(CandidateLoginView, self).setUp() - session = self.client.session - session['facebook_state'] = '1' - session.save() - - def atest_get_cpf_and_date_view(self): - url = reverse('cpf_and_date_2') - response = self.client.get(url) - self.assertEquals(response.status_code, 200) - self.assertIn('form', response.context) - - - -@override_settings(ROOT_URLCONF='merepresenta.stand_alone_urls') -class CandidateLoginView(VolunteersTestCaseBase): - def setUp(self): - super(CandidateLoginView, self).setUp() - session = self.client.session - session['facebook_state'] = '1' - session.save() - - def test_get_login(self): - url = reverse('candidate_login') - response = self.client.get(url) - self.assertEquals(response.status_code, 200) - - def test_if_user_is_logged_in_but_not_candidate_and_not_volunteer_then_go_to_cpf(self): - url = reverse('candidate_login') - user = User.objects.create_user(username="candidate", password=PASSWORD) - self.client.login(username=user.username, password=PASSWORD) - response = self.client.get(url) - cpf_and_date_url = reverse('cpf_and_date2') - self.assertRedirects(response, cpf_and_date_url) - -TEMPLATES = [ - { - 'BACKEND': 'django.template.backends.django.DjangoTemplates', - 'DIRS': [ - 'merepresenta/templates' - ], - 'APP_DIRS': True, - 'OPTIONS': { - 'context_processors': [ - # Insert your TEMPLATE_CONTEXT_PROCESSORS here or use this - # list if you haven't customized them: - 'constance.context_processors.config', - 'django.contrib.auth.context_processors.auth', - 'django.template.context_processors.debug', - 'django.template.context_processors.i18n', - 'django.template.context_processors.media', - 'django.template.context_processors.static', - 'django.template.context_processors.tz', - 'django.template.context_processors.request', - 'django.contrib.messages.context_processors.messages', - #'django.template.loaders.app_directories.Loader', - ], - }, - }, -] -@override_settings(ROOT_URLCONF='merepresenta.stand_alone_urls', - THEME='merepresenta', - TEMPLATES=TEMPLATES) -class CPFChoosingView2(VolunteersTestCaseBase): - def setUp(self): - super(CPFChoosingView2, self).setUp() - self.d = datetime.datetime(2009, 10, 5, 18, 00) - self.area = Area.objects.create(name="area") - self.election = Election.objects.create(name='ele', area=self.area) - self.candidate = Candidate.objects.create(name='THE candidate', cpf='1234', data_de_nascimento=self.d) - self.election.candidates.add(self.candidate) - session = self.client.session - session['facebook_state'] = '1' - session['facebook_slug'] = self.candidate.slug - session.save() - - def test_form_for_joining_a_user_and_a_candidate(self): - user = User.objects.create(username='HolaSoyCandidato') - data = { - 'nascimento': self.d, - 'cpf': '1234', - } - form = CPFAndDdnForm2(data=data) - self.assertTrue(form.is_valid()) - candidate = form.get_candidate() - self.assertEquals(candidate, self.candidate) - - def test_form_valid(self): - data = { - 'nascimento': self.d, - 'cpf': '12-34', - } - - form = CPFAndDdnForm2(data=data) - self.assertTrue(form.is_valid()) - candidate = form.get_candidate() - self.assertEquals(candidate, self.candidate) - - def test_get_the_view(self): - url = reverse('cpf_and_date2') - response = self.client.get(url) - self.assertEquals(response.status_code, 200) - self.assertIsInstance(response.context['form'], CPFAndDdnForm2) - - def test_trying_to_get_to_cpf_and_data_view_is_not_possible_for_volunteers(self): - user = User.objects.create_user(username="volunteer", password=PASSWORD, is_staff=True) - - url = reverse('cpf_and_date2') - self.client.login(username=user.username, password=PASSWORD) - response = self.client.get(url) - self.assertEquals(response.status_code, 404) - - def test_post_to_the_view_returns_login_for_candidate(self): - url = reverse('cpf_and_date2') - data = { - 'nascimento': self.d.strftime('%d/%m/%Y'), - 'cpf': '1234', - } - response = self.client.post(url, data=data) - self.assertEquals(response.status_code, 200) - self.assertTemplateUsed(response, 'candidatos/login_with_facebook.html') - self.assertEquals(response.context['candidate'], self.candidate) - - @override_settings(SOCIAL_AUTH_FACEBOOK_KEY='1', - SOCIAL_AUTH_FACEBOOK_SECRET='2') - @mock.patch('social_core.backends.base.BaseAuth.request') - def test_complete_with_facebook(self, mock_request): - - url = reverse('candidate_social_complete', kwargs={'backend': 'facebook'}) - url += '?code=2&state=1' - mock_request.return_value.json.return_value = {'access_token': '123'} - with mock.patch('django.contrib.sessions.backends.base.SessionBase.set_expiry', side_effect=[OverflowError, None]): - response = self.client.get(url) - - self.assertEqual(response.status_code, 302) - social_user = UserSocialAuth.objects.get() - created_user = social_user.user - self.assertFalse(created_user.is_staff) - - def test_candidacy_created_redirects(self): - url_complete_profile = reverse('merepresenta_complete_profile', kwargs={'slug': self.election.slug, - 'candidate_slug': self.candidate.slug}) - user = User.objects.create_user(username='HolaSoyCandidato', password=PASSWORD) - candidacy = Candidacy.objects.create(candidate=self.candidate, user=user) - url = reverse('cpf_and_date2') - self.client.login(username=user.username, password=PASSWORD) - response = self.client.get(url) - self.assertRedirects(response, url_complete_profile) - - def test_email_sent_to_volunteer(self): - volunteer = User.objects.create(username="volunteer") - volunteer.email = 'the_one@voluntarias.org.br' - volunteer.save() - VolunteerGetsCandidateEmailLog.objects.create(volunteer=volunteer, candidate=self.candidate) - user = User.objects.create_user(username='HolaSoyCandidato', password=PASSWORD) - candidacy = Candidacy.objects.create(candidate=self.candidate, user=user) - - self.assertTrue(len(mail.outbox)) - the_mail_to_the_volunteer = mail.outbox[0] - self.assertIn(volunteer.email, the_mail_to_the_volunteer.to) - - -@override_settings(ROOT_URLCONF='merepresenta.stand_alone_urls', - THEME='merepresenta', - TEMPLATES=TEMPLATES) -class CPFChoosingView(VolunteersTestCaseBase): - def setUp(self): - super(CPFChoosingView, self).setUp() - - def test_form_for_joining_a_user_and_a_candidate(self): - d = datetime.datetime(2009, 10, 5, 18, 00) - c = Candidate.objects.create(name='THE candidate', cpf='1234', data_de_nascimento=d) - user = User.objects.create(username='HolaSoyCandidato') - data = { - 'nascimento': d, - 'cpf': '1234', - } - form = CPFAndDdnForm(data=data, user=user) - self.assertTrue(form.is_valid()) - candidacy = form.save() - self.assertEquals(candidacy.candidate, c) - self.assertEquals(candidacy.user, user) - - def test_form_invalid(self): - d = datetime.datetime(2009, 10, 5, 18, 00) - c = Candidate.objects.create(name='THE candidate', cpf='1234', data_de_nascimento=d) - user = User.objects.create(username='HolaSoyCandidato') - data = { - 'nascimento': d, - 'cpf': '4321', - } - form = CPFAndDdnForm(data=data, user=user) - self.assertFalse(form.is_valid()) - - d = datetime.datetime(2019, 10, 5, 18, 00) - data = { - 'nascimento': d, - 'cpf': '1234', - } - form = CPFAndDdnForm(data=data, user=user) - self.assertFalse(form.is_valid()) - - def test_get_view(self): - url = reverse('cpf_and_date') - response = self.client.get(url) - self.assertEquals(response.status_code, 302) - volunteer = User.objects.create_user(username="voluntario", password=PASSWORD, is_staff=True) - possible_candidate = User.objects.create_user(username='EuSoCandidato', password=PASSWORD) - - self.client.login(username=volunteer.username, password=PASSWORD) - response = self.client.get(url) - self.assertEquals(response.status_code, 404) - - self.client.logout() - self.client.login(username=possible_candidate.username, password=PASSWORD) - response = self.client.get(url) - self.assertEquals(response.status_code, 200) - form = response.context['form'] - self.assertIsInstance(form, CPFAndDdnForm) - - # If user has another candidate connected then take it directly to the backend_candidate_home view - area = Area.objects.create(name="area") - election = Election.objects.create(name='ele', area=area) - candidate = Candidate.objects.create(name="Candi") - election.candidates.add(candidate) - Candidacy.objects.create(candidate=candidate, user=possible_candidate) - url_complete_profile = reverse('merepresenta_complete_profile', kwargs={'slug': election.slug, 'candidate_slug': candidate.slug}) - response = self.client.get(url) - self.assertRedirects(response, url_complete_profile) - - - def test_post_to_the_view(self): - d = datetime.datetime(2009, 10, 5, 18, 00) - area = Area.objects.create(name="area") - election = Election.objects.create(name='ele', area=area) - c = Candidate.objects.create(name='THE candidate', cpf='1234', data_de_nascimento=d) - election.candidates.add(c) - data = { - 'nascimento': d.strftime('%d/%m/%Y'), - 'cpf': '1234', - } - url = reverse('cpf_and_date') - possible_candidate = User.objects.create_user(username='EuSoCandidato', password=PASSWORD) - self.client.login(username=possible_candidate.username, password=PASSWORD) - - response = self.client.post(url, data=data) - self.assertEquals(response.status_code, 302) - candidacy = Candidacy.objects.get(user=possible_candidate) \ No newline at end of file diff --git a/merepresenta/tests/candidatos/questions_and_answers_being_asked_tests.py b/merepresenta/tests/candidatos/questions_and_answers_being_asked_tests.py deleted file mode 100644 index ab740a68..00000000 --- a/merepresenta/tests/candidatos/questions_and_answers_being_asked_tests.py +++ /dev/null @@ -1,171 +0,0 @@ -# coding=utf-8 -from candidator.models import TakenPosition, Position -from django.test import TestCase, override_settings -from merepresenta.models import Candidate, NON_WHITE_KEY, NON_MALE_KEY -from merepresenta.tests.volunteers import VolunteersTestCaseBase -from backend_candidate.models import CandidacyContact, Candidacy -from django.core.urlresolvers import reverse -from django.contrib.auth.models import User -from social_django.models import UserSocialAuth -import mock -from django.views.generic.edit import FormView -from django.core import mail -from merepresenta.models import (VolunteerInCandidate, - VolunteerGetsCandidateEmailLog, - Candidate, - CandidateQuestionCategory, - QuestionCategory) -from merepresenta.voluntarios.models import VolunteerProfile -from elections.models import PersonalData, Area, Election, Topic -from django.conf import settings -import datetime -from merepresenta.candidatos.forms import (CPFAndDdnForm, - CPFAndDdnForm2, - get_form_class_from_category, - get_form_classes_for_questions_for, - CategoryCandidateForm) -from django import forms -from django.forms.models import ModelMultipleChoiceField - -PASSWORD = 'candidato123' - - -class assertFieldsForTopicMixin(object): - def assertFieldsForTopic(self, dict_, original_topic): - - topic = dict_['answer_for_' + str(original_topic.id)] - self.assertIsInstance(topic, forms.ChoiceField) - self.assertIsInstance(topic.widget, forms.RadioSelect) - - comments = dict_['description_for_' + str(original_topic.id)] - self.assertIsInstance(comments, forms.CharField) - self.assertIsInstance(comments.widget, forms.TextInput) - - -@override_settings(ROOT_URLCONF='merepresenta.stand_alone_urls') -class CompletePautasTestCase(VolunteersTestCaseBase, assertFieldsForTopicMixin): - def setUp(self): - super(CompletePautasTestCase, self).setUp() - QuestionCategory.objects.all().delete() - self.d = datetime.datetime(2009, 10, 5, 18, 00) - self.area = Area.objects.create(name="area") - self.election = Election.objects.create(name='ele', area=self.area) - self.candidate = Candidate.objects.create(name='THE candidate', cpf='1234', data_de_nascimento=self.d) - - def test_get_form_from_category(self): - cat = QuestionCategory.objects.create(name="Pautas LGBT") - topic = Topic.objects.create(label=u"Adoção de crianças por famílias LGBTs", category=cat) - yes = Position.objects.create(topic=topic, label=u"Sou a FAVOR da adoção de crianças por famílias LGBTs") - no = Position.objects.create(topic=topic, label=u"Sou CONTRA a adoção de crianças por famílias LGBTs") - - topic2 = Topic.objects.create(label=u"é A favor?", category=cat) - yes2 = Position.objects.create(topic=topic, label=u"Sou a FAVOR") - no2 = Position.objects.create(topic=topic, label=u"Sou CONTRA") - - form = get_form_class_from_category(category=cat, candidate=self.candidate)() - self.assertTrue(form) - for topic in cat.topics.all(): - self.assertFieldsForTopic(form.fields, topic) - - def test_get_list_of_forms(self): - cat = QuestionCategory.objects.create(name="Pautas LGBT") - topic = Topic.objects.create(label=u"Adoção de crianças por famílias LGBTs", category=cat) - yes = Position.objects.create(topic=topic, label=u"Sou a FAVOR da adoção de crianças por famílias LGBTs") - no = Position.objects.create(topic=topic, label=u"Sou CONTRA a adoção de crianças por famílias LGBTs") - - topic2 = Topic.objects.create(label=u"é A favor?", category=cat) - yes2 = Position.objects.create(topic=topic, label=u"Sou a FAVOR") - no2 = Position.objects.create(topic=topic, label=u"Sou CONTRA") - - cat2 = QuestionCategory.objects.create(name="Pautas LGBT") - topic3 = Topic.objects.create(label=u"Adoção de crianças por famílias LGBTs", category=cat) - yes3 = Position.objects.create(topic=topic, label=u"Sou a FAVOR da adoção de crianças por famílias LGBTs") - no3 = Position.objects.create(topic=topic, label=u"Sou CONTRA a adoção de crianças por famílias LGBTs") - - topic4 = Topic.objects.create(label=u"é A favor?", category=cat) - yes4 = Position.objects.create(topic=topic, label=u"Sou a FAVOR") - no4 = Position.objects.create(topic=topic, label=u"Sou CONTRA") - - form_classes = get_form_classes_for_questions_for(self.candidate) - for form_class in form_classes[:2]: - form = form_class() - self.assertIn(form.category, [cat, cat2]) - - def test_get_the_view_has_wizard(self): - url = reverse('complete_pautas') - response = self.client.get(url) - self.assertRedirects(response, reverse('index')) - voluntario = User.objects.create_user(username='voluntario', password=PASSWORD, is_staff=True) - logged_in = self.client.login(username=voluntario.username, password=PASSWORD) - self.assertTrue(logged_in) - response = self.client.get(url) - self.assertRedirects(response, reverse('index')) - candidato_user = User.objects.create_user(username='candidato', password=PASSWORD) - Candidacy.objects.create(user=candidato_user, candidate=self.candidate) - self.client.login(username=candidato_user.username, password=PASSWORD) - - cat = QuestionCategory.objects.create(name="Pautas LGBT") - topic = Topic.objects.create(label=u"Adoção de crianças por famílias LGBTs", category=cat) - yes = Position.objects.create(topic=topic, label=u"Sou a FAVOR da adoção de crianças por famílias LGBTs") - no = Position.objects.create(topic=topic, label=u"Sou CONTRA a adoção de crianças por famílias LGBTs") - - response = self.client.get(url) - self.assertIn('wizard', response.context) - - def test_last_form(self): - cat1 = QuestionCategory.objects.create(name="Pautas LGBT") - cat2 = QuestionCategory.objects.create(name="Pautas Raciales") - data = { - 'categories': [cat1.id, cat2.id] - } - form = CategoryCandidateForm(candidate=self.candidate, data=data) - self.assertTrue(form.is_valid()) - form.save() - candidate_categories = CandidateQuestionCategory.objects.filter(candidate=self.candidate) - self.assertTrue( candidate_categories.filter(category=cat1)) - self.assertTrue( candidate_categories.filter(category=cat2)) - - def test_posting_to_the_view(self): - url = reverse('complete_pautas') - candidato_user = User.objects.create_user(username='candidato', password=PASSWORD) - Candidacy.objects.create(user=candidato_user, candidate=self.candidate) - self.client.login(username=candidato_user.username, password=PASSWORD) - - cat = QuestionCategory.objects.create(name="Pautas LGBT") - topic = Topic.objects.create(label=u"Adoção de crianças por famílias LGBTs", category=cat) - yes = Position.objects.create(topic=topic, label=u"Sou a FAVOR da adoção de crianças por famílias LGBTs") - no = Position.objects.create(topic=topic, label=u"Sou CONTRA a adoção de crianças por famílias LGBTs") - - cat2 = QuestionCategory.objects.create(name="2222") - topic2 = Topic.objects.create(label=u"2222topic222", category=cat2) - yes2 = Position.objects.create(topic=topic2, label=u"yes22") - no2 = Position.objects.create(topic=topic2, label=u"nao22") - - response = self.client.get(url) - steps = response.context['wizard']['steps'] - - for i in range(steps.count): - form = response.context['wizard']['form'] - fields = form.fields - keys = fields.keys() - data = {} - for key in keys: - field_name = "%d-%s" % (i, key) - if hasattr(fields[key], 'choices') and not isinstance(fields[key], ModelMultipleChoiceField): - choice = fields[key].choices[0] - - data[field_name] = choice[0] - elif isinstance(fields[key], ModelMultipleChoiceField): - ids = [cat.id, cat2.id] - data[field_name] = ids - - data.update({'on_demand_complete_pautas-current_step': unicode(i)}) - response = self.client.post(url, data=data) - - taken_positions = TakenPosition.objects.filter(person=self.candidate) - self.assertTrue(taken_positions.filter(topic=topic)) - tp1 = taken_positions.get(topic=topic) - self.assertIsNotNone(tp1.position) - self.assertTrue(taken_positions.filter(topic=topic2)) - tp2 = taken_positions.get(topic=topic2) - self.assertIsNotNone(tp2.position) \ No newline at end of file diff --git a/merepresenta/tests/candidatos/update_profile_view_tests.py b/merepresenta/tests/candidatos/update_profile_view_tests.py deleted file mode 100644 index 67e3584b..00000000 --- a/merepresenta/tests/candidatos/update_profile_view_tests.py +++ /dev/null @@ -1,188 +0,0 @@ -# coding=utf-8 -from backend_candidate.tests import SoulMateCandidateAnswerTestsBase -from django.test import override_settings, modify_settings -from merepresenta.models import Candidate, LGBTQDescription, CandidateQuestionCategory, QuestionCategory -from merepresenta.forms import PersonalDataForm -from backend_candidate.forms import get_candidate_profile_form_class -from backend_candidate.models import Candidacy -from django.contrib.auth.models import User -from elections.models import PersonalData, Election, Area -from django.template import Template, Context -from django.core.urlresolvers import reverse -from popolo.models import ContactDetail -import datetime - - -PASSWORD = 'pass' - - -@override_settings(THEME='merepresenta') -class FormTestCase(SoulMateCandidateAnswerTestsBase): - - def setUp(self): - super(FormTestCase, self).setUp() - self.feli = User.objects.get(username='feli') - self.feli.set_password(PASSWORD) - self.feli.save() - self.d = datetime.datetime(2009, 10, 5, 18, 00) - self.area = Area.objects.create(name="area") - self.election = Election.objects.create(name='ele', area=self.area) - self.candidate = Candidate.objects.create(name='THE candidate', cpf='1234', data_de_nascimento=self.d) - self.candidacy = Candidacy.objects.create(user=self.feli, - candidate=self.candidate) - self.gay = LGBTQDescription.objects.create(name="Gay") - self.bi = LGBTQDescription.objects.create(name="Bi") - self.data = {'email': 'perrito@chiquitito.cl', - 'gender': 'F', - 'lgbt': True, - 'lgbt_desc': [self.gay.id, self.bi.id], - 'bio': u'Ola sou uma pessoa boa em ruim ao mesmo tempo, complexo como os humanos somos, mas qué é bom e qué é ruim?', - 'candidatura_coletiva': True, - 'races': ['preta', 'parda'], - 'renovacao_politica': 'Novo Brasil'} - - def test_candidate_form(self): - - form_class = PersonalDataForm - form = form_class(candidate=self.candidate, - data=self.data) - self.assertTrue(form.is_valid()) - self.assertIn('email', form.cleaned_data.keys()) - self.assertIn('gender', form.cleaned_data.keys()) - self.assertIn('lgbt', form.cleaned_data.keys()) - self.assertEquals(form.cleaned_data['email'], self.data['email']) - self.assertEquals(form.cleaned_data['gender'], self.data['gender']) - self.assertIn(self.data['races'][0], form.cleaned_data['races']) - form.save() - self.candidate.refresh_from_db() - self.assertEquals(self.candidate.gender, self.data['gender']) - - self.assertEquals(self.candidate.email, self.data['email']) - self.assertEquals(self.candidate.candidatura_coletiva, self.data['candidatura_coletiva']) - self.assertEquals(self.candidate.bio, self.data['bio']) - self.assertEquals(self.candidate.renovacao_politica, self.data['renovacao_politica']) - - - self.assertTrue(self.candidate.preta) - self.assertTrue(self.candidate.parda) - personal_datas = PersonalData.objects.filter(candidate=self.candidate) - - self.assertEquals(len(personal_datas), 0) - - def test_candidate_after(self): - form_class = PersonalDataForm - form = form_class(candidate=self.candidate, - data=self.data) - form.is_valid() - form.save() - ## ONCE - form_class = PersonalDataForm - self.candidate.refresh_from_db() - form = form_class(candidate=self.candidate) - self.assertEquals(form.initial['gender'], self.candidate.gender) - self.assertEquals(form.initial['email'], self.candidate.email) - self.assertEquals(form.initial['lgbt'], self.candidate.lgbt) - self.assertEquals(form.initial['bio'], self.candidate.bio) - self.assertEquals(form.initial['candidatura_coletiva'], self.candidate.candidatura_coletiva) - self.assertEquals(form.initial['renovacao_politica'], self.candidate.renovacao_politica) - self.assertTrue(self.candidate.lgbt_desc.all()) - -TEMPLATES = [ - { - 'BACKEND': 'django.template.backends.django.DjangoTemplates', - 'DIRS': [ - 'merepresenta/templates' - ], - 'APP_DIRS': True, - 'OPTIONS': { - 'context_processors': [ - # Insert your TEMPLATE_CONTEXT_PROCESSORS here or use this - # list if you haven't customized them: - 'constance.context_processors.config', - 'django.contrib.auth.context_processors.auth', - 'django.template.context_processors.debug', - 'django.template.context_processors.i18n', - 'django.template.context_processors.media', - 'django.template.context_processors.static', - 'django.template.context_processors.tz', - 'django.template.context_processors.request', - 'django.contrib.messages.context_processors.messages', - #'django.template.loaders.app_directories.Loader', - ], - }, - }, -] - -@override_settings(ROOT_URLCONF='merepresenta.stand_alone_urls', - THEME='merepresenta', - TEMPLATES=TEMPLATES) -class GetAndPostToTheUpdateProfileView(SoulMateCandidateAnswerTestsBase): - def setUp(self): - super(GetAndPostToTheUpdateProfileView, self).setUp() - self.feli = User.objects.get(username='feli') - self.feli.set_password(PASSWORD) - self.feli.save() - self.d = datetime.datetime(2009, 10, 5, 18, 00) - self.area = Area.objects.create(name="area") - self.election = Election.objects.create(name='ele', area=self.area) - self.candidate = Candidate.objects.create(name='THE candidate', cpf='1234', data_de_nascimento=self.d) - self.candidacy = Candidacy.objects.create(user=self.feli, - candidate=self.candidate) - self.gay = LGBTQDescription.objects.create(name="Gay") - self.bi = LGBTQDescription.objects.create(name="Bi") - self.data = {'email': 'perrito@chiquitito.cl', - 'gender': 'F', - 'lgbt': True, - 'bio': u'Ola sou uma pessoa boa em ruim ao mesmo tempo, complexo como os humanos somos, mas qué é bom e qué é ruim?', - 'candidatura_coletiva': True, - 'races': ['preta', 'parda'], - 'renovacao_politica': 'Novo Brasil'} - - def test_get_the_view(self): - kwargs = {'slug': self.election.slug, 'candidate_slug': self.candidate.slug} - url = reverse('merepresenta_complete_profile', kwargs=kwargs) - response = self.client.get(url) - self.assertEquals(response.status_code, 404) - other_user = User.objects.create_user(username="other_user", password=PASSWORD) - self.client.login(username=other_user.username, password=PASSWORD) - response = self.client.get(url) - self.assertEquals(response.status_code, 404) - - self.client.login(username=self.feli.username, password=PASSWORD) - response = self.client.get(url) - self.assertEquals(response.status_code, 200) - self.assertTrue(response.context['form']) - self.assertEquals(response.context['form'].candidate, self.candidate) - - @override_settings(MEREPRESENTA_CANDIDATES_ALLOWED_TO_UPDATE=False) - def test_if_officially_not_allowed(self): - ''' - If a candidate has answered then it is taken to its profile - ''' - cat = QuestionCategory.objects.create(name="Pautas LGBT") - instance = CandidateQuestionCategory.objects.create(candidate=self.candidate, category=cat) - - kwargs = {'slug': self.election.slug, 'candidate_slug': self.candidate.slug} - url = reverse('merepresenta_complete_profile', kwargs=kwargs) - response = self.client.get(url) - self.assertRedirects(response, self.candidate.get_absolute_url()) - - def test_post_to_the_view(self): - kwargs = {'slug': self.election.slug, 'candidate_slug': self.candidate.slug} - url = reverse('merepresenta_complete_profile', kwargs=kwargs) - self.client.login(username=self.feli.username, password=PASSWORD) - self.assertFalse(self.candidate.gender) - response = self.client.post(url, data=self.data) - self.assertRedirects(response, reverse('complete_pautas')) - self.candidate.refresh_from_db() - self.assertTrue(self.candidate.gender) - - def test_post_to_the_view_and_then_get_it_again(self): - kwargs = {'slug': self.election.slug, 'candidate_slug': self.candidate.slug} - url = reverse('merepresenta_complete_profile', kwargs=kwargs) - self.client.login(username=self.feli.username, password=PASSWORD) - self.client.post(url, data=self.data) - response = self.client.get(url) - form = response.context['form'] - self.assertIn('gender', form.initial) - self.assertIn('email', form.initial) diff --git a/merepresenta/tests/candidatos/views_tests.py b/merepresenta/tests/candidatos/views_tests.py deleted file mode 100644 index ef3a974f..00000000 --- a/merepresenta/tests/candidatos/views_tests.py +++ /dev/null @@ -1,43 +0,0 @@ -# coding=utf-8 -from candidator.models import Position -from backend_candidate.tests import SoulMateCandidateAnswerTestsBase -from django.test import override_settings, modify_settings -from merepresenta.models import Candidate, QuestionCategory -from merepresenta.forms import PersonalDataForm -from backend_candidate.forms import get_candidate_profile_form_class -from backend_candidate.models import Candidacy -from django.contrib.auth.models import User -from elections.models import PersonalData, Election, Area, Topic -from django.template import Template, Context -from django.core.urlresolvers import reverse -from popolo.models import ContactDetail -import datetime - - -@override_settings(ROOT_URLCONF='merepresenta.stand_alone_urls') -class CandidateProfileView(SoulMateCandidateAnswerTestsBase): - def setUp(self): - super(CandidateProfileView, self).setUp() - self.d = datetime.datetime(2009, 10, 5, 18, 00) - self.area = Area.objects.create(name="area") - self.election = Election.objects.create(name='ele', area=self.area) - self.candidate = Candidate.objects.create(name='THE candidate', cpf='1234', data_de_nascimento=self.d) - - def test_get_the_profile(self): - url = reverse('candidate_profile', kwargs={'slug': self.candidate.slug}) - response = self.client.get(url) - self.assertEquals(response.status_code, 200) - self.assertEquals(response.context['candidate'], self.candidate) - self.assertTemplateUsed(response, 'merepresenta/candidate_detail.html') - - def test_getting_the_detail_view_brings_all_the_question_categories(self): - cat = QuestionCategory.objects.create(name="Pautas LGBT") - topic = Topic.objects.create(label=u"Adoção de crianças por famílias LGBTs", category=cat) - yes = Position.objects.create(topic=topic, label=u"Sou a FAVOR da adoção de crianças por famílias LGBTs") - no = Position.objects.create(topic=topic, label=u"Sou CONTRA a adoção de crianças por famílias LGBTs") - - url = reverse('candidate_profile', kwargs={'slug': self.candidate.slug}) - response = self.client.get(url) - self.assertIn(cat, response.context['categories']) - - diff --git a/merepresenta/tests/forms_tests.py b/merepresenta/tests/forms_tests.py deleted file mode 100644 index f59165e2..00000000 --- a/merepresenta/tests/forms_tests.py +++ /dev/null @@ -1,75 +0,0 @@ -# coding=utf-8 -from medianaranja2.tests.adapter_tests import MediaNaranjaAdaptersBase -from merepresenta.forms import MeRepresentaProposalsForm, MeRepresentaQuestionsForm -from elections.models import Area, QuestionCategory -from popular_proposal.models import PopularProposal -from django.conf import settings -from merepresenta.models import MeRepresentaPopularProposal -from django import forms - - -class ProposalsFormsTestCase(MediaNaranjaAdaptersBase): - popular_proposal_class = MeRepresentaPopularProposal - def setUp(self): - super(ProposalsFormsTestCase, self).setUp() - self.setUpProposals() - self.area = Area.objects.create(name=u"children", - classification=settings.FILTERABLE_AREAS_TYPE[0]) - self.election.area = self.area - self.election.save() - - def test_proposals_form_instanciate(self): - argentina = Area.objects.create(name=u'Argentina', id=u'argentina') - proposals = MeRepresentaPopularProposal.objects.filter(id__in=[self.p1.id, self.p2.id, self.p3.id]) - kwargs = {'proposals': proposals} - form = MeRepresentaProposalsForm(**kwargs) - proposals_choices = list(form.fields['proposals'].choices) - possible_labels = {} - for t in proposals_choices: - if type(t) == tuple: - possible_labels[t[0]] = t[1] - self.assertIn(unicode(self.p1), possible_labels[self.p1.id]) - self.assertIn(unicode(self.p2), possible_labels[self.p2.id]) - self.assertIn(unicode(self.p3), possible_labels[self.p3.id]) - areas = form.fields['area'].queryset.all() - for a in areas: - self.assertEquals(a.classification, settings.FILTERABLE_AREAS_TYPE[0]) - -class QuestionsFormTestCase(MediaNaranjaAdaptersBase): - def setUp(self): - super(QuestionsFormTestCase, self).setUp() - QuestionCategory.objects.all().delete() - self.setUpQuestions() - QuestionCategory.objects.all().update(election=None) - - def test_instanciate_form(self): - form = MeRepresentaQuestionsForm() - self.assertEquals(len(form.fields), 4) - self.assertIn(self.topic1.slug, form.fields) - self.assertIsInstance(form.fields[self.topic1.slug], forms.ModelChoiceField) - topic_1_choices = list(form.fields[self.topic1.slug].choices) - self.assertIn((self.position1.id, self.position1.label), topic_1_choices) - self.assertIn((self.position2.id, self.position2.label), topic_1_choices) - self.assertIn(self.topic2.slug, form.fields) - self.assertIsInstance(form.fields[self.topic2.slug], forms.ModelChoiceField) - topic_2_choices = list(form.fields[self.topic2.slug].choices) - self.assertIn((self.position3.id, self.position3.label), topic_2_choices) - self.assertIn((self.position4.id, self.position4.label), topic_2_choices) - areas = form.fields['area'].queryset.all() - self.assertTrue(areas) - for a in areas: - self.assertEquals(a.classification, settings.FILTERABLE_AREAS_TYPE[0]) - - def test_form_valid(self): - a = Area.objects.filter(classification=settings.FILTERABLE_AREAS_TYPE[0]).first() - data = { - self.topic1.slug: self.position1.id, - self.topic2.slug: self.position3.id, - self.topic3.slug: self.position5.id, - 'area': a.id - } - form = MeRepresentaQuestionsForm(data=data) - self.assertTrue(form.is_valid()) - cleaned_data = form.cleaned_data - self.assertEquals(len(cleaned_data['positions']), 3) - self.assertEquals(cleaned_data['area'], a) diff --git a/merepresenta/tests/management_command_tests.py b/merepresenta/tests/management_command_tests.py deleted file mode 100644 index 2b05acdd..00000000 --- a/merepresenta/tests/management_command_tests.py +++ /dev/null @@ -1,67 +0,0 @@ -# coding=utf-8 -from merepresenta.tests.volunteers import VolunteersTestCaseBase -from merepresenta.tse_processor import TSEProcessorMixin -from elections.models import Area -from merepresenta.models import Candidate, Partido, Coaligacao -from django.core.management import call_command -from django.conf import settings -from django.test import override_settings - - -class ImporterTestCase(VolunteersTestCaseBase): - def setUp(self): - super(ImporterTestCase, self).setUp() - self.data = {'partido': {'number': 17, 'name': 'PARTIDO SOCIAL LIBERAL', 'initials': 'PSL'}, - 'coaligacao': {'number': '1', 'name': 'RIO SOLIDoRIO', 'partidos_coaligacao': 'SD / PSL'}, - 'email_repeated': False, - 'candidate': {'race': 'PARDA', 'nome': 'PARA DO SANTO ALEIXO', 'gender': 'MASCULINO', - 'civil_status': 'CASADO(A)', 'number': 1723, 'cpf': 52243184753, 'job': 'APOSENTADO (EXCETO SERVIDOR PoBLICO)', - 'date_of_birth': '21/07/1958', 'nome_completo': 'CARLOS ALBERTO HERMoNIO DE MORAES', - 'mail': 'candidato@partido.com', 'education': 'ENSINO FUNDAMENTAL COMPLETO'}, - 'area': {'election_name': 'DEPUTADO FEDERAL', 'slug': 'RJ', 'area_name': u"Río de Janeiro"} - } - - @override_settings(FILTERABLE_AREAS_TYPE=['state',]) - def test_creates_elements(self): - rj_area = Area.objects.get(identifier='RJ') - - class JustForNowProcessor(TSEProcessorMixin): - pass - processor = JustForNowProcessor() - result = processor.do_something(self.data) - area = result['area'] - self.assertEquals(area.id, rj_area.id) - election = result['election'] - self.assertEquals(election.name, 'DEPUTADO FEDERAL') - self.assertEquals(election.area, area) - coaligacao = result['coaligacao'] - self.assertEquals(coaligacao.name, 'RIO SOLIDoRIO') - self.assertEquals(coaligacao.number, '1') - partido = result['partido'] - self.assertEquals(partido.name, u'PARTIDO SOCIAL LIBERAL') - self.assertEquals(partido.initials, u'PSL') - self.assertEquals(partido.number, 17) - self.assertEquals(partido.coaligacao, coaligacao) - candidato = result['candidate'] - self.assertEquals(candidato.election, election) - self.assertEquals(candidato.name, 'PARA DO SANTO ALEIXO') - self.assertEquals(candidato.cpf, '52243184753') - self.assertEquals(candidato.nome_completo, 'CARLOS ALBERTO HERMoNIO DE MORAES') - self.assertEquals(candidato.numero, 1723) - self.assertEquals(candidato.gender, 'M') - self.assertEquals(candidato.race, 'PARDA') - self.assertEquals(candidato.original_email, 'candidato@partido.com') - self.assertFalse(candidato.email_repeated) - self.assertEquals(candidato.partido, partido) - d = candidato.data_de_nascimento - self.assertEquals(d.year, 1958) - self.assertEquals(d.month, 7) - self.assertEquals(d.day, 21) - - - def test_calling_command(self): - call_command('import_from_tse', './tse_data_importer/fixtures/example_candidates.txt') - candidate = Candidate.objects.get(name=u'EDUARDO SALLES') - self.assertTrue(candidate) - self.assertTrue(candidate.cpf) - self.assertFalse(candidate.email_repeated) \ No newline at end of file diff --git a/merepresenta/tests/model_tests.py b/merepresenta/tests/model_tests.py deleted file mode 100644 index a11d6fff..00000000 --- a/merepresenta/tests/model_tests.py +++ /dev/null @@ -1,341 +0,0 @@ -# coding=utf-8 -from django.test import TestCase -from elections.tests import VotaInteligenteTestCase -from candidator.models import TakenPosition, Position -from popular_proposal.models import PopularProposal, Commitment -from merepresenta.models import (MeRepresentaPopularProposal, - MeRepresentaCommitment, - Candidate, - Coaligacao, - Partido, - VolunteerInCandidate, - CandidateQuestionCategory, - LGBTQDescription, - RightAnswer, - QuestionCategory) -from django.contrib.auth.models import User -from elections.models import Election, Topic, Area -from django.utils import timezone -import datetime -from django.core.urlresolvers import reverse -from merepresenta.voluntarios.models import VolunteerProfile -from backend_candidate.models import Candidacy -from django.test import override_settings - - -class MeRepresentaPopularProposalTestCase(TestCase): - def test_instanciate_a_popular_proposal_as_proxy(self): - proposer = User.objects.create_user(username="proposer") - p1 = MeRepresentaPopularProposal.objects.create(proposer=proposer, - title=u'p1', - clasification='educ', - data={} - ) - self.assertIsInstance(p1, PopularProposal) - - def test_instanciate_commitment_as_proxy(self): - proposer = User.objects.create_user(username="proposer") - p1 = MeRepresentaPopularProposal.objects.create(proposer=proposer, - title=u'p1', - clasification='educ', - data={} - ) - candidate = Candidate.objects.create(name="Candidate 1") - commitment = MeRepresentaCommitment.objects.create(candidate=candidate, - proposal=p1, - detail=u'Yo me comprometo', - commited=True) - - self.assertIsInstance(commitment, Commitment) - -class LGBTDescTestCase(VotaInteligenteTestCase): - def test_instanciate(self): - gay = LGBTQDescription.objects.create(name="Gay") - self.assertTrue(gay) - -class CandidateTestCase(VotaInteligenteTestCase): - def test_instanciate(self): - candidate = Candidate.objects.create(name="Candidate 1", - cpf='1230', - nome_completo=u'Candidato uno', - numero='190000000560', - race="preta", - original_email='perrito@gatito.com', - bio='blablablabla', - lgbt=True, - candidatura_coletiva=True, - renovacao_politica='Partido Perrito', - email_repeated=False) - self.assertTrue(candidate) - self.assertFalse(candidate.is_ghost) - self.assertFalse(candidate.facebook_contacted) - - def test_candidate_can_have_lgbt_descritption(self): - gay = LGBTQDescription.objects.create(name="Gay") - candidate = Candidate.objects.create(name="Candidate 1", - cpf='1230', - nome_completo=u'Candidato uno', - numero='190000000560', - race="preta", - original_email='perrito@gatito.com', - bio='blablablabla', - lgbt=True, - candidatura_coletiva=True, - renovacao_politica='Partido Perrito', - email_repeated=False) - candidate.lgbt_desc.add(gay) - - self.assertTrue(candidate.lgbt_desc.all()) - - def test_get_possible_election_kinds(self): - Election.objects.all().delete() - e = Election.objects.create(name="Chefe da todas as coisas no universo") - candidate = Candidate.objects.create(name="Candidate 1", - cpf='1230', - nome_completo=u'Candidato uno', - numero='190000000560', - race="preta", - original_email='perrito@gatito.com', - bio='blablablabla', - lgbt=True, - candidatura_coletiva=True, - renovacao_politica='Partido Perrito', - email_repeated=False) - outro_can = Candidate.objects.create(name="Candidate 1", - cpf='1231', - nome_completo=u'Candidato uno', - numero='190000000560', - race="preta", - original_email='perrito@gatito.com', - bio='blablablabla', - lgbt=True, - candidatura_coletiva=True, - renovacao_politica='Partido Perrito', - email_repeated=False) - e.candidates.add(candidate) - l = Candidate.get_possible_election_kinds() - self.assertTrue(l) - self.assertEquals(l[l.keys()[0]], e.name) - self.assertEquals(candidate.election_kind, l.keys()[0]) - self.assertFalse(outro_can.election_kind) - - def test_get_deputado_distrital_as_the_estadual(self): - Election.objects.all().delete() - e1 = Election.objects.create(name="Deputada/o Estadual") - e2 = Election.objects.create(name="Deputada/o Distrital") - candidate = Candidate.objects.create(name="Candidate 1", - cpf='1230', - nome_completo=u'Candidato uno', - numero='190000000560', - race="preta", - original_email='perrito@gatito.com', - bio='blablablabla', - lgbt=True, - candidatura_coletiva=True, - renovacao_politica='Partido Perrito', - email_repeated=False) - e1.candidates.add(candidate) - l = Candidate.get_possible_election_kinds() - self.assertEquals(len(l), 1) - self.assertEquals(l[l.keys()[0]], e1.name) - - - @override_settings(ROOT_URLCONF='merepresenta.stand_alone_urls') - def test_candidate_as_json(self): - gay = LGBTQDescription.objects.create(name="Gay") - coaligacao = Coaligacao.objects.create(name=u"Coaligacao a", initials='CA', number='1234') - partido = Partido.objects.create(name=u"Partido de los trabalhadores", initials='PT', number='12345', mark=3, coaligacao=coaligacao) - candidate = Candidate.objects.create(name="Candidate 1", - cpf='1230', - nome_completo=u'Candidato uno', - numero='190000000560', - race="PRETA", - gender='F', - original_email='perrito@gatito.com', - bio='blablablabla', - lgbt=True, - candidatura_coletiva=True, - renovacao_politica='Partido Perrito', - partido=partido, - email_repeated=False) - candidate.lgbt_desc.add(gay) - d = candidate.as_dict() - self.assertIn('name', d.keys()) - self.assertIn('numero', d.keys()) - self.assertIn('race', d.keys()) - self.assertIn('gender', d.keys()) - self.assertIn('lgbt', d.keys()) - self.assertIn('lgbt_desc', d.keys()) - self.assertIn('candidatura_coletiva', d.keys()) - self.assertIn('partido', d.keys()) - self.assertIn('coaligacao', d.keys()) - _filter = d['filter'] - self.assertTrue(_filter['mulher']) - self.assertTrue(_filter['is_lgbt']) - self.assertTrue(_filter['lgbt_' + str(gay.id)]) - self.assertTrue(_filter['partido']) - - - def test_get_emails(self): - user = User.objects.create_user(username='user', password="password", email='user@users.com') - candidate = Candidate.objects.create(name="Candidate 1", - cpf='1230', - nome_completo=u'Candidato uno', - numero='190000000560', - race="preta", - original_email='perrito@gatito.com', - email_repeated=False) - candidacy = Candidacy.objects.create(user=user, candidate=candidate) - self.assertEquals(candidate.emails['TSE'], candidate.original_email) - self.assertEquals(candidate.emails['facebook'], user.email) - - def test_get_races(self): - candidate = Candidate.objects.create(name="Candidate 1", - cpf='1230', - nome_completo=u'Candidato uno', - numero='190000000560', - branca=True, - preta=True, - original_email='perrito@gatito.com', - bio='blablablabla', - lgbt=True, - candidatura_coletiva=True, - renovacao_politica='Partido Perrito', - email_repeated=False) - races = candidate.get_races() - self.assertIn(u'Branca', races) - self.assertIn(u'Preta', races) - - @override_settings(ROOT_URLCONF='merepresenta.stand_alone_urls') - def test_get_absolute_url(self): - candidate = Candidate.objects.create(name="Candidate 1", - cpf='1230', - nome_completo=u'Candidato uno', - numero='190000000560', - race="preta", - original_email='perrito@gatito.com', - email_repeated=False) - expected_url = reverse('candidate_profile', kwargs={'slug': candidate.slug}) - self.assertEquals(candidate.get_absolute_url(), expected_url) - - def test_get_image_from_user(self): - image = self.get_image() - user = User.objects.create_user(username='user', password="password") - user.profile.image = image - user.profile.save() - candidate = Candidate.objects.create(name="Candidate 1", - cpf='1230', - nome_completo=u'Candidato uno', - numero='190000000560', - race="preta", - original_email='perrito@gatito.com', - email_repeated=False) - candidacy = Candidacy.objects.create(user=user, candidate=candidate) - self.assertTrue(candidate.get_image()) - -class CandidateListForVolunteers(TestCase): - def test_list_for_volunteers(self): - ghost = Candidate.objects.create(name="Candidate 1", is_ghost=True, cpf='123') - facebook = Candidate.objects.create(name="Candidate 2", facebook_contacted=True, cpf='456') - - user = User.objects.create_user(username="Candidate3") - logged = Candidate.objects.create(name="Candidate 3", cpf='101112') - Candidacy.objects.create(candidate=logged, user=user) - - with_contact = Candidate.objects.create(name="Candidate with Contact", cpf='789') - with_contact.contacts.create(mail="perrito@gatito.cl") - - candidates = Candidate.for_volunteers.all() - # Assertions - self.assertNotIn(ghost, candidates) - self.assertNotIn(facebook, candidates) - self.assertNotIn(with_contact, candidates) - self.assertNotIn(logged, candidates) - - def test_if_has_a_volunteer_looking_for_more_than_an_hour(self): - volunteer = User.objects.create_user(username='volunteer', is_staff=True) - always_in_list = Candidate.objects.create(name="Always") - checked_twenty_nine_minutes_ago = Candidate.objects.create(name="Checked 29 minutes ago", cpf='29') - checked_thirty_one_minutes_ago = Candidate.objects.create(name="Checked 31 minutes ago", cpf='31') - - minutes = 30 - - thirtyone_minutes_ago = timezone.now() - datetime.timedelta(minutes=minutes + 5) - twentynine_minutes_ago = timezone.now() - datetime.timedelta(minutes=minutes - 1) - - record_31 = VolunteerInCandidate.objects.create(volunteer=volunteer, - candidate=checked_thirty_one_minutes_ago) - VolunteerInCandidate.objects.filter(id=record_31.id).update(created=thirtyone_minutes_ago) - - record_29 = VolunteerInCandidate.objects.create(volunteer=volunteer, - created=twentynine_minutes_ago, - candidate=checked_twenty_nine_minutes_ago) - - VolunteerInCandidate.objects.filter(id=record_29.id).update(created=twentynine_minutes_ago) - - candidates = Candidate.for_volunteers.all() - self.assertIn(always_in_list, candidates) - self.assertIn(checked_thirty_one_minutes_ago, candidates) - self.assertNotIn(checked_twenty_nine_minutes_ago, candidates) - -class CandidateCategoryLink(TestCase): - def test_instanciate(self): - holiday = Candidate.objects.create(name="holiday") - cat = QuestionCategory.objects.create(name="Pautas LGBT") - instance = CandidateQuestionCategory.objects.create(candidate=holiday, category=cat) - self.assertTrue(instance) - self.assertTrue(instance.created) - self.assertTrue(instance.updated) - -class CoaligacaoTestCase(TestCase): - def test_instanciate(self): - coaligacao = Coaligacao.objects.create(name=u"Coaligacao a", initials='CA', number='1234') - self.assertTrue(coaligacao) - - def test_instanciate_with_area(self): - a = Area.objects.create(name='Estado estadual') - coaligacao = Coaligacao.objects.create(name=u"Coaligacao a", initials='CA', number='1234', area=a, classification='deputado-estadual') - self.assertTrue(coaligacao) - - - def test_get_mark_for_coaligacao(self): - coaligacao = Coaligacao.objects.create(name=u"Coaligacao a", initials='CA', number='1234') - Partido.objects.create(name=u"Partido de los trabalhadores", initials='PT', number='12345', mark=3.5, coaligacao=coaligacao) - Partido.objects.create(name=u"Petronila", initials='PeTa', number='1232', mark=4.5, coaligacao=coaligacao) - self.assertEquals(coaligacao.mark, 4.0) - -class PartidoTestCase(TestCase): - def test_instanciate(self): - coaligacao = Coaligacao.objects.create(name=u"Coaligacao a", initials='CA', number='1234') - partido = Partido.objects.create(name=u"Partido de los trabalhadores", initials='PT', number='12345', mark=3, coaligacao=coaligacao) - self.assertTrue(partido) - - def test_candidate_has_partido(self): - partido = Partido.objects.create(name=u"Partido de los trabalhadores", initials='PT', number='12345', mark=3) - candidate = Candidate.objects.create(name="Candidate 1", - cpf='1230', - nome_completo=u'Candidato uno', - numero='190000000560', - race="preta", - original_email='perrito@gatito.com', - partido=partido, - email_repeated=False) - - - self.assertEquals(candidate.partido, partido) - - -class VolunteerProfileTestCase(TestCase): - def test_instanciate(self): - u = User.objects.create_user(username='user', is_staff=True) - i = VolunteerProfile.objects.create(user=u) - self.assertIsNone(i.area) - - -class RightAnswerTestCase(TestCase): - def test_instanciate(self): - topic4 = Topic.objects.create(label=u"Monitoramento da Lei do feminicídio") - yes4 = Position.objects.create(topic=topic4, label=u"Sou a FAVOR") - no4 = Position.objects.create(topic=topic4, label=u"Sou CONTRA") - a = RightAnswer.objects.create(topic=topic4, position=yes4) - self.assertTrue(a) diff --git a/merepresenta/tests/views_tests.py b/merepresenta/tests/views_tests.py deleted file mode 100644 index db8d30de..00000000 --- a/merepresenta/tests/views_tests.py +++ /dev/null @@ -1,204 +0,0 @@ -# coding=utf-8 -from medianaranja2.tests.adapter_tests import MediaNaranjaAdaptersBase -from django.test import TestCase, override_settings -from django.core.urlresolvers import reverse -from merepresenta.forms import MeRepresentaProposalsForm, MeRepresentaQuestionsForm -from django.contrib.sites.models import Site -from popular_proposal.models import (PopularProposalSite) -from merepresenta.models import MeRepresentaPopularProposal, MeRepresentaCommitment, Coaligacao -from elections.models import Area -from django.conf import settings -from unittest import skip -from elections.models import Candidate, Election, QuestionCategory - -@override_settings(ROOT_URLCONF='merepresenta.stand_alone_urls') -class StandAloneSite(TestCase): - def test_get_index(self): - response = self.client.get(reverse('index')) - self.assertEquals(response.status_code, 200) - - -@override_settings(ROOT_URLCONF='merepresenta.stand_alone_urls') -class CandidateDetailView(MediaNaranjaAdaptersBase): - def setUp(self): - super(CandidateDetailView, self).setUp() - self.area = Area.objects.create(name=u"children", - id=u'20', - classification=settings.FILTERABLE_AREAS_TYPE[0]) - self.election = Election.objects.create(name=u'election for children', area=self.area) - self.candidate = Candidate.objects.create(name=u"name") - self.election.candidates.add(self.candidate) - - def test_get_candidate_detail(self): - url = reverse('candidate_detail_view', kwargs={'slug': self.candidate.slug, 'election_slug': self.election.slug}) - response = self.client.get(url) - self.assertEquals(response.status_code, 200) - self.assertTemplateUsed(response, 'base.html') - -@override_settings(ROOT_URLCONF='merepresenta.stand_alone_urls', DEFAULT_AREA='21') -class MeiaLaranjaAdapterTestCase(MediaNaranjaAdaptersBase): - popular_proposal_class = MeRepresentaPopularProposal - commitment_class = MeRepresentaCommitment - def setUp(self): - super(MeiaLaranjaAdapterTestCase, self).setUp() - self.site = Site.objects.create(domain='merepresenta.127.0.0.1.xip.io', name='merepresenta') - self.setUpProposals() - self.area = Area.objects.create(name=u"children", - id=u'20', - classification=settings.FILTERABLE_AREAS_TYPE[0]) - self.mother_of_all_areas = Area.objects.create(name=u"mother", - id=u'21', - classification='country') - self.area.parent = self.mother_of_all_areas - self.area.save() - -@override_settings(ROOT_URLCONF='merepresenta.stand_alone_urls', DEFAULT_AREA='21') -class MeiaLaranjaTestCase(MediaNaranjaAdaptersBase): - popular_proposal_class = MeRepresentaPopularProposal - commitment_class = MeRepresentaCommitment - def setUp(self): - super(MeiaLaranjaTestCase, self).setUp() - self.site = Site.objects.create(domain='merepresenta.127.0.0.1.xip.io', name='merepresenta') - self.setUpProposals() - PopularProposalSite.objects.create(popular_proposal=self.p1, site=self.site) - PopularProposalSite.objects.create(popular_proposal=self.p3, site=self.site) - self.area = Area.objects.create(name=u"children", - id=u'20', - classification=settings.FILTERABLE_AREAS_TYPE[0]) - self.mother_of_all_areas = Area.objects.create(name=u"mother", - id=u'21', - classification='country') - self.area.parent = self.mother_of_all_areas - self.area.save() - - def test_get_questionary(self): - with override_settings(MEREPRESENTA_SITE_ID=self.site.id): - response = self.client.get(reverse('questionary')) - self.assertEquals(response.status_code, 200) - form = response.context['form'] - self.assertIsInstance(form, MeRepresentaProposalsForm) - proposals_qs = form.fields['proposals'].queryset - self.assertIn(self.p1, proposals_qs.all()) - self.assertIn(self.p3, proposals_qs.all()) - self.assertNotIn(self.p2, proposals_qs.all()) - areas_qs = form.fields['area'].queryset - self.assertIn(self.area, areas_qs.all()) - - def test_post_questionary(self): - # MeRepresentaCommitment.objects.create - election = Election.objects.create(name=u'election for children', area=self.area) - candidate = Candidate.objects.create(name=u"name") - election.candidates.add(candidate) - MeRepresentaCommitment.objects.create(proposal=self.p1, candidate=candidate, commited=True) - with override_settings(MEREPRESENTA_SITE_ID=self.site.id): - response = self.client.get(reverse('questionary')) - management_form_current_step_slug = response.context['wizard']['management_form'].prefix + '-current_step' - data = { - management_form_current_step_slug: 0, - '0-proposals': [self.p1.id, self.p3.id], - '0-area': self.area.id - } - response = self.client.post(reverse('questionary'), data=data) - self.assertEquals(response.status_code, 200) - self.assertNotIn('form', response.context.keys()) - self.assertTrue(response.context['results'][0]['candidates'][0]['value']) - - -@override_settings(ROOT_URLCONF='merepresenta.stand_alone_urls', DEFAULT_AREA='21') -class AnotherQuestionaryTestCase(MediaNaranjaAdaptersBase): - def setUp(self): - QuestionCategory.objects.all().delete() - super(AnotherQuestionaryTestCase, self).setUp() - self.site = Site.objects.create(domain='merepresenta.127.0.0.1.xip.io', name='merepresenta') - self.setUpQuestions() - self.area = Area.objects.create(name=u"children", - id=u'20', - classification=settings.FILTERABLE_AREAS_TYPE[0]) - self.mother_of_all_areas = Area.objects.create(name=u"mother", - id=u'21', - classification='country') - self.area.parent = self.mother_of_all_areas - self.area.save() - QuestionCategory.objects.all().update(election=None) - - - def test_get_questionary(self): - response = self.client.get(reverse('questions')) - self.assertEquals(response.status_code, 200) - form = response.context['form'] - self.assertIsInstance(form, MeRepresentaQuestionsForm) - - @skip(u'no está siendo usado') - def test_post_questionary(self): - url = reverse('questions') - response = self.client.get(url) - management_form_current_step_slug = response.context['wizard']['management_form'].prefix + '-current_step' - a = Area.objects.get(name=u"Territory") - a.classification=settings.FILTERABLE_AREAS_TYPE[0] - a.save() - data = { - management_form_current_step_slug: 0, - u"0-" + self.topic1.slug: self.position1.id, - u"0-" + self.topic2.slug: self.position3.id, - u"0-" + self.topic3.slug: self.position5.id, - u"0-area": a.id - } - - response = self.client.post(url, data=data) - self.assertEquals(response.status_code, 200) - self.assertNotIn('form', response.context.keys()) - self.assertTrue(response.context['results'][0]['candidates'][0]['value']) - - -@override_settings(ROOT_URLCONF='merepresenta.stand_alone_urls') -class TemplatesViews(MediaNaranjaAdaptersBase): - def test_get_sobre(self): - url = reverse('sobre') - response = self.client.get(url) - self.assertEquals(response.status_code, 200) - - -@override_settings(ROOT_URLCONF='merepresenta.stand_alone_urls') -class ColigacoesPerAreaViewTestCase(MediaNaranjaAdaptersBase): - def test_get_the_view(self): - a = Area.objects.create(name='Area') - coaligacao = Coaligacao.objects.create(name=u"Coaligacao a", - initials='CA', - number='1234', - area=a, - classification='deputado-estadual') - url = reverse('coligacoes', kwargs={'slug': a.slug}) - response = self.client.get(url) - self.assertEquals(response.status_code, 200) - self.assertEquals(a, response.context['area']) - self.assertIn(coaligacao, response.context['coligacoes']['deputado-estadual']) - - def test_get_the_view_redirected(self): - Area.objects.all().delete() - a = Area.objects.create(name='Area') - coaligacao = Coaligacao.objects.create(name=u"Coaligacao a", - initials='CA', - number='1234', - area=a, - classification='deputado-estadual') - url = reverse('coligacoes_initial') - response = self.client.get(url) - url_redirected = reverse('coligacoes', kwargs={'slug': a.slug}) - self.assertRedirects(response, url_redirected) - - -@override_settings(ROOT_URLCONF='merepresenta.stand_alone_urls') -class EleitorxRedirectView(MediaNaranjaAdaptersBase): - @override_settings(ELEITOR_WORKING=True) - def test_get_the_view_that_corresponds_to_the_elector(self): - url = reverse('match') - response = self.client.get(url) - self.assertEquals(response.status_code, 200) - - @override_settings(ELEITOR_WORKING=False) - def test_redirects(self): - url = reverse('match') - response = self.client.get(url) - voluntario_url = reverse('volunteer_index') - self.assertEquals(response.status_code, 302) - self.assertEquals(response.url, voluntario_url) diff --git a/merepresenta/tests/volunteers/__init__.py b/merepresenta/tests/volunteers/__init__.py deleted file mode 100644 index 314cef1c..00000000 --- a/merepresenta/tests/volunteers/__init__.py +++ /dev/null @@ -1,12 +0,0 @@ -# coding=utf-8 -from elections.tests import VotaInteligenteTestCase as TestCase -from elections.models import PersonalData -from merepresenta.models import Candidate, NON_WHITE_KEY, NON_MALE_KEY - -class VolunteersTestCaseBase(TestCase): - fixtures = ['merep_mini.yaml', 'estados_de_brasil.yaml'] - def set_desprivilegios_on_candidates(self): - Candidate.objects.filter(id__in=[4, 5]).update(gender=NON_MALE_KEY) - c = Candidate.objects.get(id=5) - c.race = NON_WHITE_KEY["possible_values"][0] - c.save() diff --git a/merepresenta/tests/volunteers/candidate_form_tests.py b/merepresenta/tests/volunteers/candidate_form_tests.py deleted file mode 100644 index efd2d16f..00000000 --- a/merepresenta/tests/volunteers/candidate_form_tests.py +++ /dev/null @@ -1,43 +0,0 @@ -# coding=utf-8 -from django.test import TestCase, override_settings -from merepresenta.models import Candidate, VolunteerGetsCandidateEmailLog -from merepresenta.tests.volunteers import VolunteersTestCaseBase -from merepresenta.voluntarios.forms import AddCandidacyContactForm -from django.contrib.auth.models import User - - -PASSWORD="admin123" - - -class CandidateAddCandidacyContactFormTestCase(VolunteersTestCaseBase): - def setUp(self): - super(CandidateAddCandidacyContactFormTestCase, self).setUp() - self.volunteer = User.objects.create_user(username="voluntario", - password=PASSWORD, - is_staff=True) - - def test_validate_form(self): - c = Candidate.objects.get(id=4) - data = { - 'mail': 'perrito@gatito.com' - } - f = AddCandidacyContactForm(candidate=c, - volunteer=self.volunteer, - data=data) - self.assertTrue(f.is_valid()) - contact = f.save() - self.assertEquals(contact.mail, data['mail']) - - def test_there_is_created_a_log(self): - c = Candidate.objects.get(id=4) - data = { - 'mail': 'perrito@gatito.com' - } - f = AddCandidacyContactForm(candidate=c, - volunteer=self.volunteer, - data=data) - contact = f.save() - log = VolunteerGetsCandidateEmailLog.objects.get(contact=contact) - self.assertTrue(log) - self.assertEquals(log.volunteer, self.volunteer) - self.assertEquals(log.candidate, c) \ No newline at end of file diff --git a/merepresenta/tests/volunteers/candidate_ordering_tests.py b/merepresenta/tests/volunteers/candidate_ordering_tests.py deleted file mode 100644 index 00e1f561..00000000 --- a/merepresenta/tests/volunteers/candidate_ordering_tests.py +++ /dev/null @@ -1,66 +0,0 @@ -# coding=utf-8 -from django.test import TestCase, override_settings -from merepresenta.models import Candidate, NON_WHITE_KEY, NON_MALE_KEY -from merepresenta.tests.volunteers import VolunteersTestCaseBase -from elections.models import PersonalData - - -class CandidateOrderingTests(VolunteersTestCaseBase): - def setUp(self): - super(CandidateOrderingTests, self).setUp() - - - def test_women_have_an_extra_value(self): - Candidate.objects.filter(id__in=[4, 5]).update(gender=NON_MALE_KEY) - cs = Candidate.objects.filter(id__in=[4,5]) - self.assertEquals(cs[0].is_women, 1) - self.assertEquals(cs[1].is_women, 1) - - def test_race_is_also_an_extra_value(self): - c = Candidate.objects.get(id=5) - c.race = NON_WHITE_KEY["possible_values"][0] - c.save() - - cs = Candidate.objects.filter(id__in=[c.id]) - self.assertEquals(cs[0].is_non_white, 1) - - def test_email_repeated_is_also_an_extra_value(self): - c = Candidate.objects.get(id=5) - c.email_repeated = True - c.save() - - cs = Candidate.objects.filter(id__in=[c.id]) - self.assertEquals(cs[0].bad_email, 1) - self.assertEquals(Candidate.objects.get(id=5).desprivilegio, 1) - - def test_bad_email_is_also_an_extra_value(self): - c = Candidate.objects.get(id=5) - c.original_email = '' - c.save() - - cs = Candidate.objects.filter(id__in=[c.id]) - self.assertEquals(cs[0].bad_email, 1) - self.assertEquals(Candidate.objects.get(id=5).desprivilegio, 1) - - c.original_email = None - c.save() - cs = Candidate.objects.filter(id__in=[c.id]) - self.assertEquals(cs[0].bad_email, 1) - self.assertEquals(Candidate.objects.get(id=5).desprivilegio, 1) - - def test_it_sums_values(self): - self.set_desprivilegios_on_candidates() - #NO EMAILS DESPRIVILEGIO SUMS UP - - self.assertEquals(Candidate.objects.get(id=5).desprivilegio, 3) - self.assertEquals(Candidate.objects.get(id=4).desprivilegio, 2) - - cs = Candidate.objects.all().order_by('-desprivilegio') - self.assertEquals(int(cs[0].id), 5) - self.assertEquals(int(cs[1].id), 4) - - def test_lgbt_adds_one(self): - Candidate.objects.filter(id=5).update(lgbt=True) - self.assertEquals(Candidate.objects.get(id=5).is_lgbt, 1) - self.assertEquals(Candidate.objects.get(id=5).desprivilegio, 2) - diff --git a/merepresenta/tests/volunteers/filter_tests.py b/merepresenta/tests/volunteers/filter_tests.py deleted file mode 100644 index fcd6e858..00000000 --- a/merepresenta/tests/volunteers/filter_tests.py +++ /dev/null @@ -1,76 +0,0 @@ -# coding=utf-8 -from django.test import TestCase, override_settings -from merepresenta.models import Candidate, NON_WHITE_KEY, NON_MALE_KEY -from merepresenta.tests.volunteers import VolunteersTestCaseBase -from backend_candidate.models import CandidacyContact -from elections.models import PersonalData, Election, Area -from django.core.urlresolvers import reverse -from django.contrib.auth.models import User -from social_django.models import UserSocialAuth -from merepresenta.models import VolunteerInCandidate, VolunteerGetsCandidateEmailLog -from django.core import mail -from merepresenta.voluntarios.filters import CandidateFilter - - -PASSWORD="admin123" -ESTADO_IDENTIFIER = 'TO' - - -@override_settings(FILTERABLE_AREAS_TYPE=['state',]) -class CandidateFilterTests(VolunteersTestCaseBase): - def setUp(self): - super(CandidateFilterTests, self).setUp() - self.volunteer = User.objects.create_user(username="voluntario", - password=PASSWORD, - is_staff=True) - self.area = Area.objects.get(identifier=ESTADO_IDENTIFIER) - self.election = Election.objects.create(name="Deputado Estadual") - self.election.area = self.area - self.election.save() - self.candidate = Candidate.objects.get(id=5) - self.election.candidates.add(self.candidate) - self.candidate2 = Candidate.objects.get(id=4) - - - def test_filter(self): - data = {'elections__area': '',} - _filter = CandidateFilter(data=data) - form = _filter.form - self.assertTrue(form.is_valid()) - qs = _filter.qs - self.assertIn(self.candidate, qs) - self.assertIn(self.candidate2, qs) - - data = {'elections__area': self.area.id} - _filter = CandidateFilter(data=data) - qs = _filter.qs - self.assertIn(self.candidate, qs) - self.assertNotIn(self.candidate2, qs) - - - -@override_settings(ROOT_URLCONF='merepresenta.stand_alone_urls') -class VolunteersIndexViewWithFilterTests(VolunteersTestCaseBase): - def setUp(self): - super(VolunteersIndexViewWithFilterTests, self).setUp() - - def create_ordered_candidates(self): - Candidate.objects.filter(id__in=[4, 5]).update(gender=NON_MALE_KEY) - cs = Candidate.objects.filter(id__in=[4,5]) - self.assertEquals(cs[0].is_women, 1) - self.assertEquals(cs[1].is_women, 1) - c = Candidate.objects.get(id=5) - c.race = NON_WHITE_KEY["possible_values"][0] - c.save() - - def test_get_index(self): - url = reverse('volunteer_index') - - u = User.objects.create_user(username="new_user", password="abc", is_staff=True) - self.client.login(username=u.username, password="abc") - response = self.client.get(url) - - self.create_ordered_candidates() - response = self.client.get(url) - self.assertEquals(response.status_code, 200) - self.assertTrue(response.context['filter']) \ No newline at end of file diff --git a/merepresenta/tests/volunteers/forms_tests.py b/merepresenta/tests/volunteers/forms_tests.py deleted file mode 100644 index 5de0c2b3..00000000 --- a/merepresenta/tests/volunteers/forms_tests.py +++ /dev/null @@ -1,109 +0,0 @@ -# coding=utf-8 -from django.test import TestCase, override_settings -from merepresenta.voluntarios.forms import UpdateAreaForm, VoluntarioCandidateHuntForm -from elections.models import Area -from django.contrib.auth.models import User -from merepresenta.voluntarios.models import VolunteerProfile -from merepresenta.models import Candidate, NON_WHITE_KEY, NON_MALE_KEY, VolunteerGetsCandidateEmailLog -from django.conf import settings -from django.core import mail -from merepresenta.tests.volunteers import VolunteersTestCaseBase - - -class UpdateAreaForVolunteerForm(TestCase): - def setUp(self): - super(UpdateAreaForVolunteerForm, self).setUp() - self.area = Area.objects.create(name='area') - self.volunteer = User.objects.create_user(username='volunteer', is_staff=True) - self.profile = VolunteerProfile.objects.create(user=self.volunteer) - - - def test_instanciate_and_save(self): - data = { - 'area': self.area.id - } - form = UpdateAreaForm(data=data, instance=self.profile) - self.assertTrue(form.is_valid()) - profile = form.save() - - self.assertEquals(profile.area, self.area) - - -class CandidateSearchForm(VolunteersTestCaseBase): - def setUp(self): - super(CandidateSearchForm, self).setUp() - self.area = Area.objects.create(name='area') - self.volunteer = User.objects.create_user(username='volunteer', is_staff=True) - self.profile = VolunteerProfile.objects.create(user=self.volunteer) - c = Candidate.objects.get(id=5) - a = c.election.area - a.classification = settings.FILTERABLE_AREAS_TYPE[0] - a.save() - c.race = NON_WHITE_KEY["possible_values"][0] - c.save() - - def test_instanciate_form(self): - data = {'facebook': True, - 'tse_email': True, - 'other_email': 'perrito@gatito.com'} - c = Candidate.objects.get(id=5) - c.original_email = 'candidaot@tse.com' - c.save() - form = VoluntarioCandidateHuntForm(data=data, candidate=c, volunteer=self.volunteer) - self.assertTrue(form.is_valid()) - self.assertEquals(form.candidate, c) - self.assertEquals(form.volunteer, self.volunteer) - - def test_send_mail_to_tse_contact(self): - data = {'facebook': False, - 'tse_email': True, - 'other_email': None} - c = Candidate.objects.get(id=5) - c.original_email = 'candidaot@tse.com' - c.save() - form = VoluntarioCandidateHuntForm(data=data, candidate=c, volunteer=self.volunteer) - self.assertTrue(form.is_valid()) - form.save() - self.assertTrue(len(mail.outbox)) - mail_to_candidate = mail.outbox[0] - self.assertIn(c.original_email, mail_to_candidate.to) - - def test_send_mail_to_found_contact(self): - data = {'facebook': False, - 'tse_email': False, - 'other_email': 'new_email@google.com'} - c = Candidate.objects.get(id=5) - c.original_email = 'candidaot@tse.com' - c.save() - form = VoluntarioCandidateHuntForm(data=data, candidate=c, volunteer=self.volunteer) - self.assertTrue(form.is_valid()) - form.save() - self.assertTrue(len(mail.outbox)) - mail_to_candidate = mail.outbox[0] - self.assertIn('new_email@google.com', mail_to_candidate.to) - - def test_found_facebook(self): - data = {'facebook': True, - 'tse_email': False, - 'other_email': None} - c = Candidate.objects.get(id=5) - c.original_email = 'candidaot@tse.com' - c.save() - form = VoluntarioCandidateHuntForm(data=data, candidate=c, volunteer=self.volunteer) - self.assertTrue(form.is_valid()) - form.save() - c.refresh_from_db() - self.assertTrue(c.contacts.all()) - - def test_if_nothing_found_then_ghost(self): - data = {'facebook': False, - 'tse_email': False, - 'other_email': None} - c = Candidate.objects.get(id=5) - form = VoluntarioCandidateHuntForm(data=data, candidate=c, volunteer=self.volunteer) - self.assertTrue(form.is_valid()) - form.save() - c.refresh_from_db() - self.assertTrue(c.is_ghost) - log = VolunteerGetsCandidateEmailLog.objects.get(volunteer=self.volunteer, candidate=c) - self.assertTrue(log) \ No newline at end of file diff --git a/merepresenta/tests/volunteers/models_tests.py b/merepresenta/tests/volunteers/models_tests.py deleted file mode 100644 index a94e5125..00000000 --- a/merepresenta/tests/volunteers/models_tests.py +++ /dev/null @@ -1,48 +0,0 @@ -# coding=utf-8 -from django.test import TestCase, override_settings -from merepresenta.models import Candidate, NON_WHITE_KEY, NON_MALE_KEY -from merepresenta.tests.volunteers import VolunteersTestCaseBase -from backend_candidate.models import CandidacyContact -from elections.models import PersonalData -from django.core.urlresolvers import reverse -from django.contrib.auth.models import User -from social_django.models import UserSocialAuth -from merepresenta.models import VolunteerInCandidate, VolunteerGetsCandidateEmailLog -from django.core import mail - - -PASSWORD="admin123" - - -class VolunteerOnlineModelTests(VolunteersTestCaseBase): - def setUp(self): - super(VolunteerOnlineModelTests, self).setUp() - self.volunteer = User.objects.create_user(username="voluntario", - password=PASSWORD, - is_staff=True) - self.candidate = Candidate.objects.get(id=5) - - def test_instanciate(self): - instance = VolunteerInCandidate.objects.create(volunteer=self.volunteer, - candidate=self.candidate) - self.assertTrue(instance.created) - - -class VolunteerGetsEmailLog(VolunteersTestCaseBase): - def setUp(self): - super(VolunteerGetsEmailLog, self).setUp() - self.volunteer = User.objects.create_user(username="voluntario", - password=PASSWORD, - is_staff=True) - self.candidate = Candidate.objects.get(id=5) - - def test_instanciate(self): - candidacy_contact = CandidacyContact.objects.create(mail="perrito@gatito.com", candidate=self.candidate) - log = VolunteerGetsCandidateEmailLog.objects.create(volunteer=self.volunteer, - contact=candidacy_contact, - candidate=self.candidate) - self.assertTrue(log.created) - - self.assertTrue(len(mail.outbox)) - mail_to_candidate = mail.outbox[0] - self.assertIn(candidacy_contact.mail, mail_to_candidate.to) \ No newline at end of file diff --git a/merepresenta/tests/volunteers/views_tests.py b/merepresenta/tests/volunteers/views_tests.py deleted file mode 100644 index bc16674d..00000000 --- a/merepresenta/tests/volunteers/views_tests.py +++ /dev/null @@ -1,333 +0,0 @@ -# coding=utf-8 -from django.test import TestCase, override_settings -from merepresenta.models import Candidate, NON_WHITE_KEY, NON_MALE_KEY -from merepresenta.tests.volunteers import VolunteersTestCaseBase -from backend_candidate.models import CandidacyContact -from elections.models import PersonalData, Area -from django.core.urlresolvers import reverse -from django.contrib.auth.models import User -from social_django.models import UserSocialAuth -import mock -from django.views.generic.edit import FormView -from django.core import mail -from merepresenta.models import VolunteerInCandidate, VolunteerGetsCandidateEmailLog -from merepresenta.voluntarios.models import VolunteerProfile -from elections.models import Election, Area -from merepresenta.voluntarios.forms import VoluntarioCandidateHuntForm -from django.conf import settings - - -PASSWORD="admin123" - -class CandidatesOrderedMixin(object): - def create_ordered_candidates(self): - Candidate.objects.filter(id__in=[4, 5]).update(gender=NON_MALE_KEY) - cs = Candidate.objects.filter(id__in=[4,5]) - self.assertEquals(cs[0].is_women, 1) - self.assertEquals(cs[1].is_women, 1) - c = Candidate.objects.get(id=5) - a = c.election.area - a.classification = settings.FILTERABLE_AREAS_TYPE[0] - a.save() - c.race = NON_WHITE_KEY["possible_values"][0] - c.save() - - -@override_settings(ROOT_URLCONF='merepresenta.stand_alone_urls') -class VolunteersViewsTests(VolunteersTestCaseBase, CandidatesOrderedMixin): - def setUp(self): - super(VolunteersViewsTests, self).setUp() - - - def test_get_index(self): - url = reverse('volunteer_index') - response = self.client.get(url) - self.assertEquals(response.status_code, 302) - - u = User.objects.create_user(username="new_user", password="abc") - self.client.login(username=u.username, password="abc") - response = self.client.get(url) - self.assertNotEqual(response.status_code, 200) - - u.is_staff = True - u.save() - self.create_ordered_candidates() - response = self.client.get(url) - self.assertEquals(response.status_code, 200) - candidates = response.context['candidates'] - self.assertEquals(int(candidates[0].id), 5) - - def test_if_candidate_has_contact_is_not_shown(self): - self.set_desprivilegios_on_candidates() - c = Candidate.objects.get(id=5) - c.contacts.create(mail="perrito@gatito.cl") - - url = reverse('volunteer_index') - u = User.objects.create_user(username="new_user", password="abc", is_staff=True) - self.client.login(username=u.username, password="abc") - response = self.client.get(url) - candidates = response.context['candidates'] - - self.assertNotIn(c, candidates) - - -@override_settings(ROOT_URLCONF='merepresenta.stand_alone_urls') -class LoginView(VolunteersTestCaseBase): - def setUp(self): - super(LoginView, self).setUp() - session = self.client.session - session['facebook_state'] = '1' - session.save() - - def test_get_login(self): - url = reverse('volunteer_login') - response = self.client.get(url) - self.assertEquals(response.status_code, 200) - - def test_if_user_is_not_staff_then_get_404(self): - url = reverse('volunteer_login') - candidate = User.objects.create_user(username="candidato", - password=PASSWORD, - is_staff=False) - self.client.login(username=candidate.username, password=PASSWORD) - response = self.client.get(url) - - self.assertEquals(response.status_code, 404) - - def test_if_im_staff_get_redirected(self): - url = reverse('volunteer_login') - volunteer = User.objects.create_user(username="volunteer", - password=PASSWORD, - is_staff=True) - self.client.login(username=volunteer.username, password=PASSWORD) - response = self.client.get(url) - index_url = reverse('volunteer_index') - self.assertRedirects(response, index_url) - - - @override_settings(SOCIAL_AUTH_FACEBOOK_KEY='1', - SOCIAL_AUTH_FACEBOOK_SECRET='2') - @mock.patch('social_core.backends.base.BaseAuth.request') - def test_complete_with_facebook(self, mock_request): - volunteer_index_url = reverse('volunteer_index') - url = reverse('volunteer_social_complete', kwargs={'backend': 'facebook'}) - url += '?code=2&state=1' - mock_request.return_value.json.return_value = {'access_token': '123'} - with mock.patch('django.contrib.sessions.backends.base.SessionBase.set_expiry', side_effect=[OverflowError, None]): - response = self.client.get(url) - - self.assertEqual(response.status_code, 302) - self.assertEqual(response.url, volunteer_index_url) - social_user = UserSocialAuth.objects.get() - created_user = social_user.user - self.assertTrue(created_user.is_staff) - self.assertTrue(created_user.volunteer_profile) - self.assertIsNone(created_user.volunteer_profile.area) - - -@override_settings(ROOT_URLCONF='merepresenta.stand_alone_urls') -class CandidateAddMailView(VolunteersTestCaseBase): - def setUp(self): - super(CandidateAddMailView, self).setUp() - self.volunteer = User.objects.create_user(username="voluntario", - password=PASSWORD, - is_staff=True) - self.candidate = Candidate.objects.get(id=5) - self.url = reverse('add_mail_to_candidate', kwargs={'id': self.candidate.id}) - - def test_get_the_obrigado_view(self): - url = reverse('obrigado') - response = self.client.get(url) - self.assertEquals(response.status_code, 302) - - user = User.objects.create_user(username="non_volunteer", password=PASSWORD) - self.client.login(username=user.username, password=PASSWORD) - response = self.client.get(url) - self.assertEquals(response.status_code, 302) - - self.client.logout() - self.client.login(username=self.volunteer.username, password=PASSWORD) - response = self.client.get(url) - self.assertEquals(response.status_code, 200) - - - def test_get_the_view(self): - response = self.client.get(self.url) - self.assertEqual(response.status_code, 302) - self.assertIn(reverse('volunteer_login'), response.url) - - user = User.objects.create_user(username="non_volunteer", password=PASSWORD) - self.client.login(username=user.username, password=PASSWORD) - response2 = self.client.get(self.url) - self.assertEqual(response.status_code, 302) - self.assertIn(reverse('volunteer_login'), response.url) - - self.client.logout() - self.client.login(username=self.volunteer.username, password=PASSWORD) - response = self.client.get(self.url) - self.assertEquals(response.status_code, 200) - form = response.context['form'] - self.assertEquals(form.candidate, self.candidate) - self.assertEquals(form.volunteer, self.volunteer) - self.assertIsInstance(form, VoluntarioCandidateHuntForm) - - volunteer_in_candidate_record = VolunteerInCandidate.objects.get(volunteer=self.volunteer) - self.assertEquals(volunteer_in_candidate_record.candidate, self.candidate) - - def test_post_to_the_view(self): - self.client.login(username=self.volunteer.username, password=PASSWORD) - data = { - 'facebook': False, - 'tse_email': False, - 'other_email': 'perrito@gatito.com' - } - response = self.client.post(self.url, data=data) - self.assertRedirects(response, reverse('obrigado')) - self.assertEquals(self.candidate.contacts.count(), 1) - contact = self.candidate.contacts.last() - self.assertEquals(contact.mail, data['other_email']) - # self.assertTrue(len(mail.outbox)) - # mail_to_candidate = mail.outbox[0] - # self.assertIn(contact.mail, mail_to_candidate.to) - - def test_social_begin_facebook(self): - url = reverse('voluntarios_social_begin', kwargs={"backend": 'facebook'}) - - -@override_settings(ROOT_URLCONF='merepresenta.stand_alone_urls') -class CouldNotFindAnything(VolunteersTestCaseBase): - def setUp(self): - super(CouldNotFindAnything, self).setUp() - self.volunteer = User.objects.create_user(username="voluntario", - password=PASSWORD, - is_staff=True) - self.candidate = Candidate.objects.get(id=5) - self.url = reverse('could_not_find_candidate', kwargs={'id': self.candidate.id}) - - def test_get_the_view(self): - response = self.client.get(self.url) - self.assertEqual(response.status_code, 302) - self.assertIn(reverse('volunteer_login'), response.url) - - user = User.objects.create_user(username="non_volunteer", password=PASSWORD) - self.client.login(username=user.username, password=PASSWORD) - response2 = self.client.get(self.url) - self.assertEqual(response.status_code, 302) - self.assertIn(reverse('volunteer_login'), response.url) - - self.client.logout() - self.client.login(username=self.volunteer.username, password=PASSWORD) - response = self.client.get(self.url) - self.assertEquals(response.status_code, 200) - self.candidate.refresh_from_db() - self.assertTrue(self.candidate.is_ghost) - - def test_candidate_marked_as_ghost_is_not_listed(self): - # self.create_ordered_candidates() - self.candidate.is_ghost = True - self.candidate.save() - url = reverse('volunteer_index') - - u = User.objects.create_user(username="new_user", password="abc", is_staff=True) - self.client.login(username=u.username, password="abc") - response = self.client.get(url) - candidates = response.context['candidates'] - self.assertNotIn(self.candidate, candidates) - - -@override_settings(ROOT_URLCONF='merepresenta.stand_alone_urls') -class ContactedThrouFacebook(VolunteersTestCaseBase): - def setUp(self): - super(ContactedThrouFacebook, self).setUp() - self.volunteer = User.objects.create_user(username="voluntario", - password=PASSWORD, - is_staff=True) - self.candidate = Candidate.objects.get(id=5) - self.url = reverse('facebook_contacted', kwargs={'id': self.candidate.id}) - - def test_get_the_view(self): - response = self.client.get(self.url) - self.assertEqual(response.status_code, 302) - self.assertIn(reverse('volunteer_login'), response.url) - - user = User.objects.create_user(username="non_volunteer", password=PASSWORD) - self.client.login(username=user.username, password=PASSWORD) - response2 = self.client.get(self.url) - self.assertEqual(response.status_code, 302) - self.assertIn(reverse('volunteer_login'), response.url) - - self.client.logout() - self.client.login(username=self.volunteer.username, password=PASSWORD) - response = self.client.get(self.url) - self.assertEquals(response.status_code, 200) - self.candidate.refresh_from_db() - self.assertTrue(self.candidate.facebook_contacted) - log = VolunteerGetsCandidateEmailLog.objects.get(candidate=self.candidate, volunteer=self.volunteer) - self.assertTrue(log) - self.assertIsNone(log.contact) - - -@override_settings(ROOT_URLCONF='merepresenta.stand_alone_urls') -class UpdatingAreaOfAVolunteerView(VolunteersTestCaseBase, CandidatesOrderedMixin): - def setUp(self): - super(UpdatingAreaOfAVolunteerView, self).setUp() - self.volunteer = User.objects.create_user(username="voluntario", - password=PASSWORD, - is_staff=True) - - self.url = reverse('update_area_of_volunteer') - self.profile = VolunteerProfile.objects.create(user=self.volunteer) - - def test_get_the_view(self): - response = self.client.get(self.url) - self.assertEqual(response.status_code, 302) - self.assertIn(reverse('volunteer_login'), response.url) - - user = User.objects.create_user(username="non_volunteer", password=PASSWORD) - self.client.login(username=user.username, password=PASSWORD) - response2 = self.client.get(self.url) - self.assertEqual(response.status_code, 302) - self.assertIn(reverse('volunteer_login'), response.url) - - self.client.logout() - self.client.login(username=self.volunteer.username, password=PASSWORD) - response = self.client.get(self.url) - self.assertEquals(response.status_code, 200) - - def test_post_to_the_view(self): - area = Area.objects.create(name="area 51") - data = { - 'area': area.id - } - self.client.login(username=self.volunteer.username, password=PASSWORD) - response = self.client.post(self.url, data=data, follow=True) - self.assertEquals(response.status_code, 200) - - def test_get_index_brings_the_form(self): - url = reverse('volunteer_index') - - self.create_ordered_candidates() - u = User.objects.create_user(username="new_user", password=PASSWORD, is_staff=True) - self.client.login(username=u.username, password=PASSWORD) - response = self.client.get(url) - candidates = response.context['candidates'] - self.assertEquals(int(candidates[0].id), 5) - - self.assertTrue(response.context['update_area_form']) - form = response.context['update_area_form'] - self.assertEquals(form.instance, u.volunteer_profile) - - def test_get_index_if_has_area_selected_then_filters(self): - url = reverse('volunteer_index') - - self.create_ordered_candidates() - u = User.objects.create_user(username="new_user", password=PASSWORD, is_staff=True) - a = Area.objects.create(name='my-area', classification=settings.FILTERABLE_AREAS_TYPE[0]) - VolunteerProfile.objects.create(user=u, area=a) - - - self.client.login(username=u.username, password=PASSWORD) - response = self.client.get(url) - candidates = response.context['candidates'] - candidate_5 = Candidate.objects.get(id=5) - self.assertNotIn(candidate_5, candidates) diff --git a/merepresenta/tse_processor.py b/merepresenta/tse_processor.py deleted file mode 100644 index 2e9f3ca9..00000000 --- a/merepresenta/tse_processor.py +++ /dev/null @@ -1,112 +0,0 @@ -# coding=utf-8 -from elections.models import Area -from merepresenta.models import Partido, Coaligacao, Candidate -from tse_data_importer.csv_reader import CsvReader -from tse_data_importer.importer import RowsReaderAdapter -from django.conf import settings -from datetime import datetime - -def output_logger(self, msg): - print msg - -RACE_MAPPING = { - u'INDÍGENA': u'indigena', - u'BRANCA': u'branca', - u'PRETA': u'preta', - u'PARDA': u'parda', - u'AMARELA': u'amarela' -} - -def try_parsing_date(text): - ### Me lo traje de stackoverflow - ### https://stackoverflow.com/questions/23581128/how-to-format-date-string-via-multiple-formats-in-python - ### Me pareció hacky e ingenioso - ### Incluso el raise es lindo - for fmt in ( "%Y-%m-%d", "%Y/%m/%d", "%d/%m/%Y"): - try: - return datetime.strptime(text, fmt) - except ValueError: - pass - raise ValueError('no valid date format found') - -class TSEProcessorMixin(object): - output_logger_func = output_logger - - def gender_definer(self, gender): - if gender in ['FEMININO', 'FEM.']: - return "F" - if gender in ['MASCULINO', 'MASC.']: - return "M" - return "" - - def process_candidate(self, candidate_dict, election, partido): - gender = self.gender_definer(candidate_dict['gender']) - try: - d = candidate_dict['date_of_birth'] - data_de_nascimento = try_parsing_date(d) - data_de_nascimento = data_de_nascimento.date() - except: - data_de_nascimento = None - cpf = unicode(int(candidate_dict['cpf'])) - if Candidate.objects.filter(cpf=cpf).exists(): - self.output_logger_func("CANDIDATE EXISTENTE DETECTADO CPF:" + cpf + " =====================================>") - return Candidate.objects.get(cpf=cpf) - candidate, created = Candidate.objects.get_or_create(name=candidate_dict['nome'], cpf=cpf) - candidate.nome_completo = candidate_dict['nome_completo'] - candidate.numero = candidate_dict['number'] - candidate.cpf = cpf - candidate.data_de_nascimento = data_de_nascimento - candidate.race = candidate_dict['race'] - if candidate.race in RACE_MAPPING.keys(): - setattr(candidate, RACE_MAPPING[candidate.race], True) - candidate.original_email = candidate_dict['mail'] - candidate.email_repeated = candidate_dict['email_repeated'] - candidate.partido = partido - candidate.gender = gender - candidate.slug = candidate.id - candidate.save() - # candidate, created = Candidate.objects.get_or_create(name=candidate_dict['nome'], - # nome_completo=candidate_dict['nome_completo'], - # numero=candidate_dict['number'], - # cpf=candidate_dict['cpf'], - # data_de_nascimento=data_de_nascimento, - # race=candidate_dict['race'], - # original_email=candidate_dict['mail'], - # email_repeated=candidate_dict['email_repeated'], - # partido = partido, - # gender=gender) - election.candidates.add(candidate) - - return candidate - - def do_something(self, row): - result = {} - if settings.FILTERABLE_AREAS_TYPE: - state_classification = settings.FILTERABLE_AREAS_TYPE[0] - else: - state_classification = 'state' - area, created = Area.objects.get_or_create(identifier=row['area']['slug'], name=row['area']['area_name'], classification=state_classification) - result['area'] = area - election, created = area.elections.get_or_create(name=row['area']['election_name']) - result['election'] = election - name = row['coaligacao'].get('name', '') - if not name: - name = row['coaligacao'].get('number', '') - number = row['coaligacao'].get('number', 0) - - coaligacao, created = Coaligacao.objects.get_or_create(name=name, - number=number) - result['coaligacao'] = coaligacao - partido, created = Partido.objects.get_or_create(name=row['partido']['name'], - initials=row['partido']['initials'], - number=row['partido']['number'], - coaligacao=coaligacao) - result['partido'] = partido - row['candidate']['email_repeated'] = row['email_repeated'] - - result['candidate'] = self.process_candidate(row['candidate'], election, partido) - self.output_logger_func("imported %s de %s" % (result['candidate'].name, area.name)) - return result - -class TSEProcessor(TSEProcessorMixin, CsvReader): - pass \ No newline at end of file diff --git a/merepresenta/urls.py b/merepresenta/urls.py deleted file mode 100644 index 0cd4a611..00000000 --- a/merepresenta/urls.py +++ /dev/null @@ -1,100 +0,0 @@ - -from django.conf.urls import url, include -from django.views.generic.base import TemplateView, RedirectView -from merepresenta.forms import (MeRepresentaMeiaLaranjaWizardForm, - MeRepresentaMeiaLaranjaQuestionsWizardForm) -from elections.views import CandidateDetailView -from elections.models import QuestionCategory -from django.contrib import admin -from backend_candidate.views import CompleteMediaNaranjaView -from backend_candidate.forms import MediaNaranjaElectionForm -from merepresenta.voluntarios.views import (VolunteerIndexView, - VolunteerLoginView, - AddMailToCandidateView, - ObrigadoView, - auth, - CouldNotFindCandidate, - FacebookContacted, - complete) -from merepresenta.match.views import MatchView, MatchResultView, MatchResultAjaxView, MatchSecretView -from merepresenta.views import ColigacoesPerAreaView, ColigacoesInitialRedirect -from django.conf import settings - -class MeRepresentaMeiaLaranjaForm(MediaNaranjaElectionForm): - def __init__(self, *args, **kwargs): - self.categories = QuestionCategory.objects.all() - super(MeRepresentaMeiaLaranjaForm, self).__init__(*args, **kwargs) - -class MeRepresentaMeiaLaranja(CompleteMediaNaranjaView): - def get_form_class(self): - return MeRepresentaMeiaLaranjaForm - -SECRET_URL_MATCH = getattr(settings, 'SECRET_URL_MATCH', 'secret_match' ) - -urlpatterns = [ - url(r'^admin/', include(admin.site.urls)), - url(r'^$', - TemplateView.as_view(template_name="merepresenta/index.html"), - name='index'), - - url(r'^sobre/?$', - TemplateView.as_view(template_name="merepresenta/sobre.html"), - name='sobre'), - url(r'^eleitor/?$', - RedirectView.as_view(url='/eleitora'), - name='eleitor'), - url(r'^eleitores/?$', - RedirectView.as_view(url='/eleitora'), - name='eleitor'), - url(r'^eleitorx/?$', - TemplateView.as_view(template_name='merepresenta/eleitor.html'), - name='eleitorx'), - url(r'^termos/?$', - TemplateView.as_view(template_name="merepresenta/termos.html"), - name='termos'), - url(r'^pautas/?$', - TemplateView.as_view(template_name="merepresenta/pautas.html"), - name='pautas'), - url(r'^coligacoes/?$', - ColigacoesInitialRedirect.as_view(), - name='coligacoes_initial'), - url(r'^coligacoes/(?P[-\w]+)/?$', - ColigacoesPerAreaView.as_view(), - name='coligacoes'), - url(r'^eleitora/?$', - MatchView.as_view(), - name='match'), - url(r'^{secret_url}/?$'.format(secret_url=SECRET_URL_MATCH), - MatchSecretView.as_view(), - name='match_secret'), - url(r'^resultado/?$', - MatchResultView.as_view(), - name='match_result'), - url(r'^match_result_ajax/?$', - MatchResultAjaxView.as_view(), - name='match_result_ajax'), - - - - - url(r'^perguntas/?$', - MeRepresentaMeiaLaranjaWizardForm.as_view(), - name='questionary'), - url(r'^answers/?$', - MeRepresentaMeiaLaranjaQuestionsWizardForm.as_view(), - name='questions'), - url(r'^candidatos/', include('merepresenta.candidatos.urls')), - url(r'^eleccion/(?P[-\w]+)/(?P[-\w]+)/?$', - CandidateDetailView.as_view(template_name='merepresenta/candidate_detail.html'), - name='candidate_detail_view' - ), - url(r'^candidatos/media_naranja/(?P[-\w]+)/(?P[-\w]+)/?$', - MeRepresentaMeiaLaranja.as_view(), - name='complete_12_naranja'), - url(r'^candidatos/?', include('backend_candidate.urls', namespace='backend_candidate')), - url(r'^accounts/?', include('registration.backends.hmac.urls')), - url(r'^voluntarios/', include('merepresenta.voluntarios.urls')), - url(r'^faq/?$', - TemplateView.as_view(template_name="merepresenta/faq.html"), - name='faq'), -] diff --git a/merepresenta/views.py b/merepresenta/views.py deleted file mode 100644 index 8d2d785d..00000000 --- a/merepresenta/views.py +++ /dev/null @@ -1,32 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.shortcuts import render -from django.views.generic.detail import DetailView -from elections.models import Area -from django.utils.text import slugify -from django.views.generic.base import RedirectView -from django.core.urlresolvers import reverse - - -class ColigacoesPerAreaView(DetailView): - template_name = 'merepresenta/coligacoes.html' - context_object_name = 'area' - model = Area - - def get_context_data(self, *args, **kwargs): - context = super(ColigacoesPerAreaView, self).get_context_data(*args, **kwargs) - coligacoes = {} - for c in self.object.coligacoes.all(): - if c.classification not in coligacoes.keys(): - coligacoes[c.classification] = [] - coligacoes[c.classification].append(c) - context['coligacoes'] = coligacoes - context['all_areas'] = Area.objects.all().order_by('name') - return context - - -class ColigacoesInitialRedirect(RedirectView): - def get_redirect_url(self): - a = Area.objects.all().order_by('name').first() - return reverse('coligacoes', kwargs={'slug': a.slug}) diff --git a/merepresenta/voluntarios/README.md b/merepresenta/voluntarios/README.md deleted file mode 100644 index 536da2ae..00000000 --- a/merepresenta/voluntarios/README.md +++ /dev/null @@ -1,13 +0,0 @@ -## VOLUNTEERS PART!!! - -I wrote this as part of #MeRepresenta, this means that we haven't needed volunteers doing research on candidates before - -This is why I kept it here until now - -But as I'm coding it I am becoming aware that this could be a good feature to have in the feature, this is why I'm keeping this in - -an inner module, so when I have more time and the need from another NGO to have the volunteers backend - -I can grab it and move it to another application - -from merepresenta.voluntarios.models import VolunteerProfile \ No newline at end of file diff --git a/merepresenta/voluntarios/__init__.py b/merepresenta/voluntarios/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/merepresenta/voluntarios/filters.py b/merepresenta/voluntarios/filters.py deleted file mode 100644 index 86375719..00000000 --- a/merepresenta/voluntarios/filters.py +++ /dev/null @@ -1,31 +0,0 @@ -# coding=utf-8 -from django_filters import ( - ModelChoiceFilter, - ) -from django_filters.filterset import FilterSet -from merepresenta.models import Candidate -from elections.models import Area -from django.conf import settings - - - -def get_areas_for_filtering(): - if settings.FILTERABLE_AREAS_TYPE: - state_classification = settings.FILTERABLE_AREAS_TYPE[0] - else: - state_classification = 'state' - - return Area.objects.filter(classification=state_classification) - -class CandidateFilter(FilterSet): - elections__area = ModelChoiceFilter(queryset=Area.objects.none()) - - - def __init__(self, *args, **kwargs): - super(CandidateFilter, self).__init__(*args, **kwargs) - self.form.fields['elections__area'].queryset = get_areas_for_filtering() - - - class Meta: - model = Candidate - fields = ['elections__area'] \ No newline at end of file diff --git a/merepresenta/voluntarios/forms.py b/merepresenta/voluntarios/forms.py deleted file mode 100644 index 2bad5ca0..00000000 --- a/merepresenta/voluntarios/forms.py +++ /dev/null @@ -1,73 +0,0 @@ -# coding=utf-8 -from django import forms -from backend_candidate.models import CandidacyContact -from merepresenta.models import VolunteerGetsCandidateEmailLog -from .models import VolunteerProfile -from votai_utils.send_mails import send_mail - - -class VolunteerGetsCandidateEmailLogMixin(object): - def _save_log(self, contact=None): - c = contact or self.contact or None - VolunteerGetsCandidateEmailLog.objects.create(candidate=self.candidate, - volunteer=self.volunteer, - contact=c) - - -class AddCandidacyContactForm(forms.ModelForm, VolunteerGetsCandidateEmailLogMixin): - class Meta: - model = CandidacyContact - fields = ['mail', ] - - def __init__(self, *args, **kwargs): - self.candidate = kwargs.pop('candidate') - self.volunteer = kwargs.pop('volunteer') - super(AddCandidacyContactForm, self).__init__(*args, **kwargs) - - def save(self, commit=True): - self.contact = super(AddCandidacyContactForm, self).save(commit=False) - self.contact.candidate = self.candidate - if commit: - self.contact.save() - self._save_log() - return self.contact - - -class UpdateAreaForm(forms.ModelForm): - class Meta: - model = VolunteerProfile - fields = ['area', ] - labels = {'area': u'Escolha o Estado:'} - - -class VoluntarioCandidateHuntForm(forms.Form, VolunteerGetsCandidateEmailLogMixin): - facebook = forms.BooleanField(required=False, label=u"Sim, encontrei! :)") - tse_email = forms.BooleanField(required=False, label=u"Sim, enviar um e-mail") - other_email = forms.EmailField(required=False, label=u"Cole aqui o email que você encontrou que a gente manda a mensagem!") - - def __init__(self, *args, **kwargs): - self.candidate = kwargs.pop('candidate') - self.volunteer = kwargs.pop('volunteer') - super(VoluntarioCandidateHuntForm, self).__init__(*args, **kwargs) - - def save(self): - mail = self.cleaned_data['other_email'] - context = { - 'candidate': self.candidate.name - } - self.contact = CandidacyContact.objects.create(candidate=self.candidate) - if self.cleaned_data['tse_email']: - self.contact.mail = self.cleaned_data['tse_email'] - - send_mail(context, 'contato_novo_com_candidato', to=[self.candidate.original_email],) - - if self.cleaned_data['other_email']: - self.contact.mail = self.cleaned_data['other_email'] - send_mail(context, 'contato_novo_com_candidato', to=[self.cleaned_data['other_email']],) - - if not self.cleaned_data['tse_email'] and not self.cleaned_data['other_email']: - self.candidate.is_ghost=True - self.candidate.save() - self.contact.save() - VolunteerGetsCandidateEmailLog.objects.get_or_create(volunteer=self.volunteer, candidate=self.candidate) - diff --git a/merepresenta/voluntarios/models.py b/merepresenta/voluntarios/models.py deleted file mode 100644 index 607c5dc5..00000000 --- a/merepresenta/voluntarios/models.py +++ /dev/null @@ -1,14 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models -from django.contrib.auth.models import User -from elections.models import Area - - -class VolunteerProfile(models.Model): - user = models.OneToOneField(User, related_name='volunteer_profile') - area = models.ForeignKey(Area, related_name='volunteers', null=True) - - class Meta: - db_table = "voluntarios_profile" \ No newline at end of file diff --git a/merepresenta/voluntarios/strategy.py b/merepresenta/voluntarios/strategy.py deleted file mode 100644 index 48042506..00000000 --- a/merepresenta/voluntarios/strategy.py +++ /dev/null @@ -1,25 +0,0 @@ -from social_django.strategy import DjangoStrategy -from django.shortcuts import resolve_url -from django.contrib.auth import authenticate -from .models import VolunteerProfile - - -class VolunteerStrategy(DjangoStrategy): - - def get_setting(self, name): - if name in ['NEW_USER_REDIRECT_URL', 'LOGIN_REDIRECT_URL']: - return resolve_url('volunteer_index') - return super(VolunteerStrategy, self).get_setting(name) - - def create_user(self, *args, **kwargs): - user = super(VolunteerStrategy, self).create_user(*args, is_staff=True, **kwargs) - VolunteerProfile.objects.create(user=user) - return user - - def authenticate(self, backend, *args, **kwargs): - kwargs['strategy'] = self - kwargs['storage'] = self.storage - kwargs['backend'] = backend - if 'request' in kwargs: - kwargs.pop('request') - return authenticate(*args, **kwargs) \ No newline at end of file diff --git a/merepresenta/voluntarios/urls.py b/merepresenta/voluntarios/urls.py deleted file mode 100644 index 35e368c6..00000000 --- a/merepresenta/voluntarios/urls.py +++ /dev/null @@ -1,47 +0,0 @@ - -from django.conf.urls import url, include -from merepresenta.voluntarios.views import (VolunteerIndexView, - VolunteerLoginView, - AddMailToCandidateView, - ObrigadoView, - auth, - CouldNotFindCandidate, - FacebookContacted, - UpdateAreaOfVolunteerView, - complete) - -urlpatterns = [ - url(r'^$', - VolunteerIndexView.as_view(), - name='volunteer_index'), - url(r'^login/?$', - VolunteerLoginView.as_view(), - name='volunteer_login'), - url(r'^login/(?P[^/]+)/?$', auth, - name='voluntarios_social_begin'), - url(r'^complete/(?P[^/]+)$', - complete, - name='volunteer_social_complete' - ), - url(r'^adicionar_mail/(?P[^/]+)$', - AddMailToCandidateView.as_view(), - name='add_mail_to_candidate' - ), - url(r'^obrigado/?$', - ObrigadoView.as_view(), - name='obrigado' - ), - url(r'^could_not_find_candidate/(?P[^/]+)$', - CouldNotFindCandidate.as_view(), - name='could_not_find_candidate' - ), - url(r'^facebook_contacted/(?P[^/]+)$', - FacebookContacted.as_view(), - name='facebook_contacted' - ), - url(r'^update_area_of_volunteer$', - UpdateAreaOfVolunteerView.as_view(), - name='update_area_of_volunteer' - ), - -] diff --git a/merepresenta/voluntarios/views.py b/merepresenta/voluntarios/views.py deleted file mode 100644 index aa06b6ef..00000000 --- a/merepresenta/voluntarios/views.py +++ /dev/null @@ -1,165 +0,0 @@ -# -*- coding: utf-8 -*- -from django.views.generic.list import ListView -from merepresenta.models import Candidate, VolunteerInCandidate, VolunteerGetsCandidateEmailLog -from braces.views import StaffuserRequiredMixin -from django.views.generic.base import TemplateView -from django.views import View -from social_core.actions import do_complete, do_auth -from social_django.views import _do_login -from django.views.decorators.cache import never_cache -from django.views.decorators.csrf import csrf_exempt -from social_django.utils import psa, STORAGE, get_strategy -from django.views.generic.edit import FormView -from django.core.urlresolvers import reverse_lazy -from django.shortcuts import get_object_or_404 -from django_filters.views import FilterView -from merepresenta.voluntarios.filters import CandidateFilter -from django.views.generic.edit import UpdateView -from .forms import UpdateAreaForm, VoluntarioCandidateHuntForm, AddCandidacyContactForm -from .models import VolunteerProfile -from django.http import HttpResponseNotFound, HttpResponseRedirect -from django.conf import settings -from django.shortcuts import render - - -class VolunteerIndexView(StaffuserRequiredMixin, FilterView): - model = Candidate - login_url = reverse_lazy(u"volunteer_login") - template_name = "voluntarios/index.html" - context_object_name = 'candidates' - filterset_class = CandidateFilter - - def dispatch(self, *args, **kwargs): - if not settings.MEREPRESENTA_VOLUNTARIOS_ON and not self.request.user.is_staff: - return render(self.request, 'voluntarios/voluntarios-inativo.html', {}) - return super(VolunteerIndexView, self).dispatch(*args, **kwargs) - - def get_context_data(self, *args, **kwargs): - context = super(VolunteerIndexView, self).get_context_data(*args, **kwargs) - profile, created = VolunteerProfile.objects.get_or_create(user=self.request.user) - context['update_area_form'] = UpdateAreaForm(instance=profile) - return context - - def get_queryset(self): - qs = self.model.for_volunteers.exclude(volunteerincandidate__isnull=False) - try: - area = self.request.user.volunteer_profile.area - qs = qs.filter(elections__area=area) - except VolunteerProfile.DoesNotExist: - pass - qs = qs.order_by('-desprivilegio') - - return qs - -# voluntarios_login_template_name = 'voluntarios/voluntarios-inativo.html' -# if settings.MEREPRESENTA_VOLUNTARIOS_ON: -# voluntarios_login_template_name = 'voluntarios/login.html' -class VolunteerLoginView(TemplateView): - template_name = 'voluntarios/login.html' - - def dispatch(self, *args, **kwargs): - if not settings.MEREPRESENTA_VOLUNTARIOS_ON: - context = self.get_context_data() - return render(self.request, 'voluntarios/voluntarios-inativo.html', context) - if self.request.user.is_authenticated: - if not self.request.user.is_staff: - return HttpResponseNotFound() - return HttpResponseRedirect(reverse_lazy('volunteer_index')) - return super(VolunteerLoginView, self).dispatch(*args, **kwargs) - - -def load_strategy(request=None): - return get_strategy('merepresenta.voluntarios.strategy.VolunteerStrategy', STORAGE, request) - -@never_cache -@csrf_exempt -@psa(load_strategy=load_strategy, redirect_uri='volunteer_social_complete') -def complete(request, backend, *args, **kwargs): - return do_complete(request.backend, _do_login, request.user, - redirect_value='next', request=request, - *args, **kwargs) - -@never_cache -@psa('volunteer_social_complete') -def auth(request, backend): - return do_auth(request.backend) - -class AddMailToCandidateView(StaffuserRequiredMixin, FormView): - form_class = VoluntarioCandidateHuntForm - login_url = reverse_lazy(u"volunteer_login") - template_name = 'voluntarios/add_email_to_candidate.html' - - def get_success_url(self): - return reverse_lazy('obrigado') - - def dispatch(self, *args, **kwargs): - if not settings.MEREPRESENTA_VOLUNTARIOS_ON and not self.request.user.is_staff: - return HttpResponseRedirect('/') - _id = kwargs['id'] - self.candidate = get_object_or_404(Candidate, id=_id) - if self.request.user.is_authenticated() and self.request.user.is_staff: - self.record = VolunteerInCandidate.objects.get_or_create(candidate=self.candidate, - volunteer=self.request.user) - return super(AddMailToCandidateView, self).dispatch(*args, **kwargs) - - def get_form_kwargs(self): - kwargs = super(AddMailToCandidateView, self).get_form_kwargs() - - kwargs['candidate'] = self.candidate - kwargs['volunteer'] = self.request.user - return kwargs - - def form_valid(self, form): - form.save() - return super(AddMailToCandidateView, self).form_valid(form) - - - -class ObrigadoView(StaffuserRequiredMixin, TemplateView): - template_name=u'voluntarios/obrigado.html' - - -## Mierda! esta clase no debería depender de StaffuserRequiredMixin ni de TemplateView -## Los mixins dependen sólo de object!!!! Mierda Mierda. -## lo cambio lego -class UpdateOnlyOneFieldMixin(StaffuserRequiredMixin, TemplateView): - login_url = reverse_lazy(u"volunteer_login") - def dispatch(self, *args, **kwargs): - _id = kwargs['id'] - self.candidate = get_object_or_404(Candidate, id=_id) - setattr(self.candidate, self.field, self.resulting_value) - self.candidate.save() - return super(UpdateOnlyOneFieldMixin, self).dispatch(*args, **kwargs) - -class CouldNotFindCandidate(UpdateOnlyOneFieldMixin): - template_name=u'voluntarios/sorry.html' - - field = 'is_ghost' - resulting_value = True - - - -class FacebookContacted(UpdateOnlyOneFieldMixin): - template_name = u'voluntarios/obrigado.html' - field = 'facebook_contacted' - resulting_value = True - - - def get(self, *args, **kwargs): - response = super(FacebookContacted, self).get(*args, **kwargs) - VolunteerGetsCandidateEmailLog.objects.create(candidate=self.candidate, - volunteer=self.request.user) - return response - - -class UpdateAreaOfVolunteerView(StaffuserRequiredMixin, UpdateView): - form_class = UpdateAreaForm - model = VolunteerProfile - login_url = reverse_lazy(u"volunteer_login") - template_name = 'voluntarios/update_area_of_volunteer.html' - - def get_object(self): - return self.request.user.volunteer_profile - - def get_success_url(self): - return reverse_lazy('volunteer_index') diff --git a/merepresenta_example.yaml b/merepresenta_example.yaml deleted file mode 100644 index 45b313d0..00000000 --- a/merepresenta_example.yaml +++ /dev/null @@ -1,2477 +0,0 @@ -- model: sites.site - pk: 1 - fields: {domain: example.com, name: example.com} -- model: sites.site - pk: 2 - fields: {domain: 'merepresenta.127.0.0.1.xip.io:8000', name: '#MeRepresenta'} -- model: auth.permission - pk: 1 - fields: {name: Can add site, content_type: 1, codename: add_site} -- model: auth.permission - pk: 2 - fields: {name: Can change site, content_type: 1, codename: change_site} -- model: auth.permission - pk: 3 - fields: {name: Can delete site, content_type: 1, codename: delete_site} -- model: auth.permission - pk: 4 - fields: {name: Can add group, content_type: 2, codename: add_group} -- model: auth.permission - pk: 5 - fields: {name: Can change group, content_type: 2, codename: change_group} -- model: auth.permission - pk: 6 - fields: {name: Can delete group, content_type: 2, codename: delete_group} -- model: auth.permission - pk: 7 - fields: {name: Can add permission, content_type: 3, codename: add_permission} -- model: auth.permission - pk: 8 - fields: {name: Can change permission, content_type: 3, codename: change_permission} -- model: auth.permission - pk: 9 - fields: {name: Can delete permission, content_type: 3, codename: delete_permission} -- model: auth.permission - pk: 10 - fields: {name: Can add user, content_type: 4, codename: add_user} -- model: auth.permission - pk: 11 - fields: {name: Can change user, content_type: 4, codename: change_user} -- model: auth.permission - pk: 12 - fields: {name: Can delete user, content_type: 4, codename: delete_user} -- model: auth.permission - pk: 13 - fields: {name: Can add content type, content_type: 5, codename: add_contenttype} -- model: auth.permission - pk: 14 - fields: {name: Can change content type, content_type: 5, codename: change_contenttype} -- model: auth.permission - pk: 15 - fields: {name: Can delete content type, content_type: 5, codename: delete_contenttype} -- model: auth.permission - pk: 16 - fields: {name: Can add session, content_type: 6, codename: add_session} -- model: auth.permission - pk: 17 - fields: {name: Can change session, content_type: 6, codename: change_session} -- model: auth.permission - pk: 18 - fields: {name: Can delete session, content_type: 6, codename: delete_session} -- model: auth.permission - pk: 19 - fields: {name: Can add flat page, content_type: 7, codename: add_flatpage} -- model: auth.permission - pk: 20 - fields: {name: Can change flat page, content_type: 7, codename: change_flatpage} -- model: auth.permission - pk: 21 - fields: {name: Can delete flat page, content_type: 7, codename: delete_flatpage} -- model: auth.permission - pk: 22 - fields: {name: Can add constance, content_type: 8, codename: add_constance} -- model: auth.permission - pk: 23 - fields: {name: Can change constance, content_type: 8, codename: change_constance} -- model: auth.permission - pk: 24 - fields: {name: Can delete constance, content_type: 8, codename: delete_constance} -- model: auth.permission - pk: 25 - fields: {name: Can add rule, content_type: 9, codename: add_rule} -- model: auth.permission - pk: 26 - fields: {name: Can change rule, content_type: 9, codename: change_rule} -- model: auth.permission - pk: 27 - fields: {name: Can delete rule, content_type: 9, codename: delete_rule} -- model: auth.permission - pk: 28 - fields: {name: Can add url, content_type: 10, codename: add_url} -- model: auth.permission - pk: 29 - fields: {name: Can change url, content_type: 10, codename: change_url} -- model: auth.permission - pk: 30 - fields: {name: Can delete url, content_type: 10, codename: delete_url} -- model: auth.permission - pk: 31 - fields: {name: Can add image, content_type: 11, codename: add_image} -- model: auth.permission - pk: 32 - fields: {name: Can change image, content_type: 11, codename: change_image} -- model: auth.permission - pk: 33 - fields: {name: Can delete image, content_type: 11, codename: delete_image} -- model: auth.permission - pk: 34 - fields: {name: Can add topic, content_type: 12, codename: add_topic} -- model: auth.permission - pk: 35 - fields: {name: Can change topic, content_type: 12, codename: change_topic} -- model: auth.permission - pk: 36 - fields: {name: Can delete topic, content_type: 12, codename: delete_topic} -- model: auth.permission - pk: 37 - fields: {name: Can add position, content_type: 13, codename: add_position} -- model: auth.permission - pk: 38 - fields: {name: Can change position, content_type: 13, codename: change_position} -- model: auth.permission - pk: 39 - fields: {name: Can delete position, content_type: 13, codename: delete_position} -- model: auth.permission - pk: 40 - fields: {name: Can add category, content_type: 14, codename: add_category} -- model: auth.permission - pk: 41 - fields: {name: Can change category, content_type: 14, codename: change_category} -- model: auth.permission - pk: 42 - fields: {name: Can delete category, content_type: 14, codename: delete_category} -- model: auth.permission - pk: 43 - fields: {name: Can add taken position, content_type: 15, codename: add_takenposition} -- model: auth.permission - pk: 44 - fields: {name: Can change taken position, content_type: 15, codename: change_takenposition} -- model: auth.permission - pk: 45 - fields: {name: Can delete taken position, content_type: 15, codename: delete_takenposition} -- model: auth.permission - pk: 46 - fields: {name: Can add Tagged Item, content_type: 16, codename: add_taggeditem} -- model: auth.permission - pk: 47 - fields: {name: Can change Tagged Item, content_type: 16, codename: change_taggeditem} -- model: auth.permission - pk: 48 - fields: {name: Can delete Tagged Item, content_type: 16, codename: delete_taggeditem} -- model: auth.permission - pk: 49 - fields: {name: Can add Tag, content_type: 17, codename: add_tag} -- model: auth.permission - pk: 50 - fields: {name: Can change Tag, content_type: 17, codename: change_tag} -- model: auth.permission - pk: 51 - fields: {name: Can delete Tag, content_type: 17, codename: delete_tag} -- model: auth.permission - pk: 52 - fields: {name: Can add link, content_type: 18, codename: add_link} -- model: auth.permission - pk: 53 - fields: {name: Can change link, content_type: 18, codename: change_link} -- model: auth.permission - pk: 54 - fields: {name: Can delete link, content_type: 18, codename: delete_link} -- model: auth.permission - pk: 55 - fields: {name: Can add other name, content_type: 19, codename: add_othername} -- model: auth.permission - pk: 56 - fields: {name: Can change other name, content_type: 19, codename: change_othername} -- model: auth.permission - pk: 57 - fields: {name: Can delete other name, content_type: 19, codename: delete_othername} -- model: auth.permission - pk: 58 - fields: {name: Can add organization, content_type: 20, codename: add_organization} -- model: auth.permission - pk: 59 - fields: {name: Can change organization, content_type: 20, codename: change_organization} -- model: auth.permission - pk: 60 - fields: {name: Can delete organization, content_type: 20, codename: delete_organization} -- model: auth.permission - pk: 61 - fields: {name: Can add post, content_type: 21, codename: add_post} -- model: auth.permission - pk: 62 - fields: {name: Can change post, content_type: 21, codename: change_post} -- model: auth.permission - pk: 63 - fields: {name: Can delete post, content_type: 21, codename: delete_post} -- model: auth.permission - pk: 64 - fields: {name: Can add I18N Name, content_type: 22, codename: add_areai18name} -- model: auth.permission - pk: 65 - fields: {name: Can change I18N Name, content_type: 22, codename: change_areai18name} -- model: auth.permission - pk: 66 - fields: {name: Can delete I18N Name, content_type: 22, codename: delete_areai18name} -- model: auth.permission - pk: 67 - fields: {name: Can add contact detail, content_type: 23, codename: add_contactdetail} -- model: auth.permission - pk: 68 - fields: {name: Can change contact detail, content_type: 23, codename: change_contactdetail} -- model: auth.permission - pk: 69 - fields: {name: Can delete contact detail, content_type: 23, codename: delete_contactdetail} -- model: auth.permission - pk: 70 - fields: {name: Can add person, content_type: 24, codename: add_person} -- model: auth.permission - pk: 71 - fields: {name: Can change person, content_type: 24, codename: change_person} -- model: auth.permission - pk: 72 - fields: {name: Can delete person, content_type: 24, codename: delete_person} -- model: auth.permission - pk: 73 - fields: {name: Can add membership, content_type: 25, codename: add_membership} -- model: auth.permission - pk: 74 - fields: {name: Can change membership, content_type: 25, codename: change_membership} -- model: auth.permission - pk: 75 - fields: {name: Can delete membership, content_type: 25, codename: delete_membership} -- model: auth.permission - pk: 76 - fields: {name: Can add language, content_type: 26, codename: add_language} -- model: auth.permission - pk: 77 - fields: {name: Can change language, content_type: 26, codename: change_language} -- model: auth.permission - pk: 78 - fields: {name: Can delete language, content_type: 26, codename: delete_language} -- model: auth.permission - pk: 79 - fields: {name: Can add identifier, content_type: 27, codename: add_identifier} -- model: auth.permission - pk: 80 - fields: {name: Can change identifier, content_type: 27, codename: change_identifier} -- model: auth.permission - pk: 81 - fields: {name: Can delete identifier, content_type: 27, codename: delete_identifier} -- model: auth.permission - pk: 82 - fields: {name: Can add source, content_type: 28, codename: add_source} -- model: auth.permission - pk: 83 - fields: {name: Can change source, content_type: 28, codename: change_source} -- model: auth.permission - pk: 84 - fields: {name: Can delete source, content_type: 28, codename: delete_source} -- model: auth.permission - pk: 85 - fields: {name: Can add area, content_type: 29, codename: add_area} -- model: auth.permission - pk: 86 - fields: {name: Can change area, content_type: 29, codename: change_area} -- model: auth.permission - pk: 87 - fields: {name: Can delete area, content_type: 29, codename: delete_area} -- model: auth.permission - pk: 88 - fields: {name: Can add personal data, content_type: 30, codename: add_personaldata} -- model: auth.permission - pk: 89 - fields: {name: Can change personal data, content_type: 30, codename: change_personaldata} -- model: auth.permission - pk: 90 - fields: {name: Can delete personal data, content_type: 30, codename: delete_personaldata} -- model: auth.permission - pk: 91 - fields: {name: "Can add P\xE1gina est\xE1ticas por candidato", content_type: 31, - codename: add_candidateflatpage} -- model: auth.permission - pk: 92 - fields: {name: "Can change P\xE1gina est\xE1ticas por candidato", content_type: 31, - codename: change_candidateflatpage} -- model: auth.permission - pk: 93 - fields: {name: "Can delete P\xE1gina est\xE1ticas por candidato", content_type: 31, - codename: delete_candidateflatpage} -- model: auth.permission - pk: 94 - fields: {name: "Can add Mi Elecci\xF3n", content_type: 32, codename: add_election} -- model: auth.permission - pk: 95 - fields: {name: "Can change Mi Elecci\xF3n", content_type: 32, codename: change_election} -- model: auth.permission - pk: 96 - fields: {name: "Can delete Mi Elecci\xF3n", content_type: 32, codename: delete_election} -- model: auth.permission - pk: 97 - fields: {name: Can add Candidato, content_type: 33, codename: add_candidate} -- model: auth.permission - pk: 98 - fields: {name: Can change Candidato, content_type: 33, codename: change_candidate} -- model: auth.permission - pk: 99 - fields: {name: Can delete Candidato, content_type: 33, codename: delete_candidate} -- model: auth.permission - pk: 100 - fields: {name: "Can add Categor\xEDa de pregunta", content_type: 34, codename: add_questioncategory} -- model: auth.permission - pk: 101 - fields: {name: "Can change Categor\xEDa de pregunta", content_type: 34, codename: change_questioncategory} -- model: auth.permission - pk: 102 - fields: {name: "Can delete Categor\xEDa de pregunta", content_type: 34, codename: delete_questioncategory} -- model: auth.permission - pk: 103 - fields: {name: Can add association, content_type: 39, codename: add_association} -- model: auth.permission - pk: 104 - fields: {name: Can change association, content_type: 39, codename: change_association} -- model: auth.permission - pk: 105 - fields: {name: Can delete association, content_type: 39, codename: delete_association} -- model: auth.permission - pk: 106 - fields: {name: Can add user social auth, content_type: 40, codename: add_usersocialauth} -- model: auth.permission - pk: 107 - fields: {name: Can change user social auth, content_type: 40, codename: change_usersocialauth} -- model: auth.permission - pk: 108 - fields: {name: Can delete user social auth, content_type: 40, codename: delete_usersocialauth} -- model: auth.permission - pk: 109 - fields: {name: Can add nonce, content_type: 41, codename: add_nonce} -- model: auth.permission - pk: 110 - fields: {name: Can change nonce, content_type: 41, codename: change_nonce} -- model: auth.permission - pk: 111 - fields: {name: Can delete nonce, content_type: 41, codename: delete_nonce} -- model: auth.permission - pk: 112 - fields: {name: Can add code, content_type: 42, codename: add_code} -- model: auth.permission - pk: 113 - fields: {name: Can change code, content_type: 42, codename: change_code} -- model: auth.permission - pk: 114 - fields: {name: Can delete code, content_type: 42, codename: delete_code} -- model: auth.permission - pk: 115 - fields: {name: Can add partial, content_type: 43, codename: add_partial} -- model: auth.permission - pk: 116 - fields: {name: Can change partial, content_type: 43, codename: change_partial} -- model: auth.permission - pk: 117 - fields: {name: Can delete partial, content_type: 43, codename: delete_partial} -- model: auth.permission - pk: 118 - fields: {name: Can add kv store, content_type: 44, codename: add_kvstore} -- model: auth.permission - pk: 119 - fields: {name: Can change kv store, content_type: 44, codename: change_kvstore} -- model: auth.permission - pk: 120 - fields: {name: Can delete kv store, content_type: 44, codename: delete_kvstore} -- model: auth.permission - pk: 121 - fields: {name: Can add log entry, content_type: 45, codename: add_logentry} -- model: auth.permission - pk: 122 - fields: {name: Can change log entry, content_type: 45, codename: change_logentry} -- model: auth.permission - pk: 123 - fields: {name: Can delete log entry, content_type: 45, codename: delete_logentry} -- model: auth.permission - pk: 124 - fields: {name: Can add article, content_type: 46, codename: add_article} -- model: auth.permission - pk: 125 - fields: {name: Can change article, content_type: 46, codename: change_article} -- model: auth.permission - pk: 126 - fields: {name: Can delete article, content_type: 46, codename: delete_article} -- model: auth.permission - pk: 127 - fields: {name: Can add message, content_type: 47, codename: add_message} -- model: auth.permission - pk: 128 - fields: {name: Can change message, content_type: 47, codename: change_message} -- model: auth.permission - pk: 129 - fields: {name: Can delete message, content_type: 47, codename: delete_message} -- model: auth.permission - pk: 130 - fields: {name: Can add subscription, content_type: 48, codename: add_subscription} -- model: auth.permission - pk: 131 - fields: {name: Can change subscription, content_type: 48, codename: change_subscription} -- model: auth.permission - pk: 132 - fields: {name: Can delete subscription, content_type: 48, codename: delete_subscription} -- model: auth.permission - pk: 133 - fields: {name: Can add submission, content_type: 49, codename: add_submission} -- model: auth.permission - pk: 134 - fields: {name: Can change submission, content_type: 49, codename: change_submission} -- model: auth.permission - pk: 135 - fields: {name: Can delete submission, content_type: 49, codename: delete_submission} -- model: auth.permission - pk: 136 - fields: {name: Can add newsletter, content_type: 50, codename: add_newsletter} -- model: auth.permission - pk: 137 - fields: {name: Can change newsletter, content_type: 50, codename: change_newsletter} -- model: auth.permission - pk: 138 - fields: {name: Can delete newsletter, content_type: 50, codename: delete_newsletter} -- model: auth.permission - pk: 139 - fields: {name: Can add attachment, content_type: 51, codename: add_attachment} -- model: auth.permission - pk: 140 - fields: {name: Can change attachment, content_type: 51, codename: change_attachment} -- model: auth.permission - pk: 141 - fields: {name: Can delete attachment, content_type: 51, codename: delete_attachment} -- model: auth.permission - pk: 142 - fields: {name: Can add message confirmation, content_type: 52, codename: add_messageconfirmation} -- model: auth.permission - pk: 143 - fields: {name: Can change message confirmation, content_type: 52, codename: change_messageconfirmation} -- model: auth.permission - pk: 144 - fields: {name: Can delete message confirmation, content_type: 52, codename: delete_messageconfirmation} -- model: auth.permission - pk: 145 - fields: {name: Can add Mensaje de preguntales, content_type: 53, codename: add_message} -- model: auth.permission - pk: 146 - fields: {name: Can change Mensaje de preguntales, content_type: 53, codename: change_message} -- model: auth.permission - pk: 147 - fields: {name: Can delete Mensaje de preguntales, content_type: 53, codename: delete_message} -- model: auth.permission - pk: 148 - fields: {name: Can add message status, content_type: 54, codename: add_messagestatus} -- model: auth.permission - pk: 149 - fields: {name: Can change message status, content_type: 54, codename: change_messagestatus} -- model: auth.permission - pk: 150 - fields: {name: Can delete message status, content_type: 54, codename: delete_messagestatus} -- model: auth.permission - pk: 151 - fields: {name: Can add outbound message, content_type: 55, codename: add_outboundmessage} -- model: auth.permission - pk: 152 - fields: {name: Can change outbound message, content_type: 55, codename: change_outboundmessage} -- model: auth.permission - pk: 153 - fields: {name: Can delete outbound message, content_type: 55, codename: delete_outboundmessage} -- model: auth.permission - pk: 154 - fields: {name: Can add answer, content_type: 56, codename: add_answer} -- model: auth.permission - pk: 155 - fields: {name: Can change answer, content_type: 56, codename: change_answer} -- model: auth.permission - pk: 156 - fields: {name: Can delete answer, content_type: 56, codename: delete_answer} -- model: auth.permission - pk: 157 - fields: {name: Can add Encuentro, content_type: 57, codename: add_kidsgathering} -- model: auth.permission - pk: 158 - fields: {name: Can change Encuentro, content_type: 57, codename: change_kidsgathering} -- model: auth.permission - pk: 159 - fields: {name: Can delete Encuentro, content_type: 57, codename: delete_kidsgathering} -- model: auth.permission - pk: 160 - fields: {name: Can add Medida, content_type: 58, codename: add_kidsproposal} -- model: auth.permission - pk: 161 - fields: {name: Can change Medida, content_type: 58, codename: change_kidsproposal} -- model: auth.permission - pk: 162 - fields: {name: Can delete Medida, content_type: 58, codename: delete_kidsproposal} -- model: auth.permission - pk: 163 - fields: {name: Can add proposal suggestion for incremental, content_type: 59, codename: add_proposalsuggestionforincremental} -- model: auth.permission - pk: 164 - fields: {name: Can change proposal suggestion for incremental, content_type: 59, - codename: change_proposalsuggestionforincremental} -- model: auth.permission - pk: 165 - fields: {name: Can delete proposal suggestion for incremental, content_type: 59, - codename: delete_proposalsuggestionforincremental} -- model: auth.permission - pk: 166 - fields: {name: Can add Filtro de propuestas para candidatos, content_type: 60, codename: add_incrementalscandidatefilter} -- model: auth.permission - pk: 167 - fields: {name: Can change Filtro de propuestas para candidatos, content_type: 60, - codename: change_incrementalscandidatefilter} -- model: auth.permission - pk: 168 - fields: {name: Can delete Filtro de propuestas para candidatos, content_type: 60, - codename: delete_incrementalscandidatefilter} -- model: auth.permission - pk: 169 - fields: {name: Can add candidate incremental, content_type: 61, codename: add_candidateincremental} -- model: auth.permission - pk: 170 - fields: {name: Can change candidate incremental, content_type: 61, codename: change_candidateincremental} -- model: auth.permission - pk: 171 - fields: {name: Can delete candidate incremental, content_type: 61, codename: delete_candidateincremental} -- model: auth.permission - pk: 172 - fields: {name: Can add Apoyo, content_type: 62, codename: add_proposallike} -- model: auth.permission - pk: 173 - fields: {name: Can change Apoyo, content_type: 62, codename: change_proposallike} -- model: auth.permission - pk: 174 - fields: {name: Can delete Apoyo, content_type: 62, codename: delete_proposallike} -- model: auth.permission - pk: 175 - fields: {name: Can add Propuesta Ciudadana, content_type: 63, codename: add_popularproposal} -- model: auth.permission - pk: 176 - fields: {name: Can change Propuesta Ciudadana, content_type: 63, codename: change_popularproposal} -- model: auth.permission - pk: 177 - fields: {name: Can delete Propuesta Ciudadana, content_type: 63, codename: delete_popularproposal} -- model: auth.permission - pk: 178 - fields: {name: Can add proposal temporary data, content_type: 64, codename: add_proposaltemporarydata} -- model: auth.permission - pk: 179 - fields: {name: Can change proposal temporary data, content_type: 64, codename: change_proposaltemporarydata} -- model: auth.permission - pk: 180 - fields: {name: Can delete proposal temporary data, content_type: 64, codename: delete_proposaltemporarydata} -- model: auth.permission - pk: 181 - fields: {name: Can add commitment, content_type: 65, codename: add_commitment} -- model: auth.permission - pk: 182 - fields: {name: Can change commitment, content_type: 65, codename: change_commitment} -- model: auth.permission - pk: 183 - fields: {name: Can delete commitment, content_type: 65, codename: delete_commitment} -- model: auth.permission - pk: 184 - fields: {name: Can add popular proposal site, content_type: 66, codename: add_popularproposalsite} -- model: auth.permission - pk: 185 - fields: {name: Can change popular proposal site, content_type: 66, codename: change_popularproposalsite} -- model: auth.permission - pk: 186 - fields: {name: Can delete popular proposal site, content_type: 66, codename: delete_popularproposalsite} -- model: auth.permission - pk: 187 - fields: {name: Can add profile, content_type: 67, codename: add_profile} -- model: auth.permission - pk: 188 - fields: {name: Can change profile, content_type: 67, codename: change_profile} -- model: auth.permission - pk: 189 - fields: {name: Can delete profile, content_type: 67, codename: delete_profile} -- model: auth.permission - pk: 190 - fields: {name: Can add candidacy contact, content_type: 68, codename: add_candidacycontact} -- model: auth.permission - pk: 191 - fields: {name: Can change candidacy contact, content_type: 68, codename: change_candidacycontact} -- model: auth.permission - pk: 192 - fields: {name: Can delete candidacy contact, content_type: 68, codename: delete_candidacycontact} -- model: auth.permission - pk: 193 - fields: {name: Can add candidacy, content_type: 69, codename: add_candidacy} -- model: auth.permission - pk: 194 - fields: {name: Can change candidacy, content_type: 69, codename: change_candidacy} -- model: auth.permission - pk: 195 - fields: {name: Can delete candidacy, content_type: 69, codename: delete_candidacy} -- model: auth.permission - pk: 196 - fields: {name: Can add extra page, content_type: 70, codename: add_extrapage} -- model: auth.permission - pk: 197 - fields: {name: Can change extra page, content_type: 70, codename: change_extrapage} -- model: auth.permission - pk: 198 - fields: {name: Can delete extra page, content_type: 70, codename: delete_extrapage} -- model: auth.permission - pk: 199 - fields: {name: Can add organization template, content_type: 71, codename: add_organizationtemplate} -- model: auth.permission - pk: 200 - fields: {name: Can change organization template, content_type: 71, codename: change_organizationtemplate} -- model: auth.permission - pk: 201 - fields: {name: Can delete organization template, content_type: 71, codename: delete_organizationtemplate} -- model: auth.permission - pk: 202 - fields: {name: Can add activity, content_type: 72, codename: add_activity} -- model: auth.permission - pk: 203 - fields: {name: Can change activity, content_type: 72, codename: change_activity} -- model: auth.permission - pk: 204 - fields: {name: Can delete activity, content_type: 72, codename: delete_activity} -- model: auth.permission - pk: 205 - fields: {name: Can add shared result, content_type: 73, codename: add_sharedresult} -- model: auth.permission - pk: 206 - fields: {name: Can change shared result, content_type: 73, codename: change_sharedresult} -- model: auth.permission - pk: 207 - fields: {name: Can delete shared result, content_type: 73, codename: delete_sharedresult} -- model: auth.permission - pk: 208 - fields: {name: Can add reading group, content_type: 74, codename: add_readinggroup} -- model: auth.permission - pk: 209 - fields: {name: Can change reading group, content_type: 74, codename: change_readinggroup} -- model: auth.permission - pk: 210 - fields: {name: Can delete reading group, content_type: 74, codename: delete_readinggroup} -- model: auth.permission - pk: 211 - fields: {name: Can add search subscription, content_type: 75, codename: add_searchsubscription} -- model: auth.permission - pk: 212 - fields: {name: Can change search subscription, content_type: 75, codename: change_searchsubscription} -- model: auth.permission - pk: 213 - fields: {name: Can delete search subscription, content_type: 75, codename: delete_searchsubscription} -- model: auth.permission - pk: 214 - fields: {name: Can add commitment notification, content_type: 76, codename: add_commitmentnotification} -- model: auth.permission - pk: 215 - fields: {name: Can change commitment notification, content_type: 76, codename: change_commitmentnotification} -- model: auth.permission - pk: 216 - fields: {name: Can delete commitment notification, content_type: 76, codename: delete_commitmentnotification} -- model: auth.permission - pk: 217 - fields: {name: Can add custom site, content_type: 77, codename: add_customsite} -- model: auth.permission - pk: 218 - fields: {name: Can change custom site, content_type: 77, codename: change_customsite} -- model: auth.permission - pk: 219 - fields: {name: Can delete custom site, content_type: 77, codename: delete_customsite} -- model: auth.permission - pk: 220 - fields: {name: Can add me representa popular proposal, content_type: 63, codename: add_merepresentapopularproposal} -- model: auth.permission - pk: 221 - fields: {name: Can change me representa popular proposal, content_type: 63, codename: change_merepresentapopularproposal} -- model: auth.permission - pk: 222 - fields: {name: Can delete me representa popular proposal, content_type: 63, codename: delete_merepresentapopularproposal} -- model: auth.permission - pk: 223 - fields: {name: Can add me representa commitment, content_type: 65, codename: add_merepresentacommitment} -- model: auth.permission - pk: 224 - fields: {name: Can change me representa commitment, content_type: 65, codename: change_merepresentacommitment} -- model: auth.permission - pk: 225 - fields: {name: Can delete me representa commitment, content_type: 65, codename: delete_merepresentacommitment} -- model: custom_sites.customsite - pk: 1 - fields: {site: 2, urlconf: merepresenta.stand_alone_urls} -- model: popolo.person - pk: c-n1pdeputado-estadual - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:13.210217+00:00', - updated_at: !!timestamp '2018-04-04 20:26:13.213508+00:00', slug: c-n1pdeputado-estadual, - name: C n1pDeputado Estadual, family_name: '', given_name: '', additional_name: '', - honorific_prefix: '', honorific_suffix: '', patronymic_name: '', sort_name: '', - email: null, gender: '', birth_date: '', death_date: '', image: null, summary: '', - biography: '', national_identity: null} -- model: popolo.person - pk: c-n1pdeputado-federal - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:13.256203+00:00', - updated_at: !!timestamp '2018-04-04 20:26:13.257873+00:00', slug: c-n1pdeputado-federal, - name: C n1pDeputado Federal, family_name: '', given_name: '', additional_name: '', - honorific_prefix: '', honorific_suffix: '', patronymic_name: '', sort_name: '', - email: null, gender: '', birth_date: '', death_date: '', image: null, summary: '', - biography: '', national_identity: null} -- model: popolo.person - pk: c-n1psenado-federal - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:13.295941+00:00', - updated_at: !!timestamp '2018-04-04 20:26:13.297688+00:00', slug: c-n1psenado-federal, - name: C n1pSenado Federal, family_name: '', given_name: '', additional_name: '', - honorific_prefix: '', honorific_suffix: '', patronymic_name: '', sort_name: '', - email: null, gender: '', birth_date: '', death_date: '', image: null, summary: '', - biography: '', national_identity: null} -- model: popolo.person - pk: c-n2pdeputado-estadual - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:13.228452+00:00', - updated_at: !!timestamp '2018-04-04 20:26:13.230150+00:00', slug: c-n2pdeputado-estadual, - name: C n2pDeputado Estadual, family_name: '', given_name: '', additional_name: '', - honorific_prefix: '', honorific_suffix: '', patronymic_name: '', sort_name: '', - email: null, gender: '', birth_date: '', death_date: '', image: null, summary: '', - biography: '', national_identity: null} -- model: popolo.person - pk: c-n2pdeputado-federal - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:13.269399+00:00', - updated_at: !!timestamp '2018-04-04 20:26:13.271161+00:00', slug: c-n2pdeputado-federal, - name: C n2pDeputado Federal, family_name: '', given_name: '', additional_name: '', - honorific_prefix: '', honorific_suffix: '', patronymic_name: '', sort_name: '', - email: null, gender: '', birth_date: '', death_date: '', image: null, summary: '', - biography: '', national_identity: null} -- model: popolo.person - pk: c-n2psenado-federal - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:13.309082+00:00', - updated_at: !!timestamp '2018-04-04 20:26:13.310757+00:00', slug: c-n2psenado-federal, - name: C n2pSenado Federal, family_name: '', given_name: '', additional_name: '', - honorific_prefix: '', honorific_suffix: '', patronymic_name: '', sort_name: '', - email: null, gender: '', birth_date: '', death_date: '', image: null, summary: '', - biography: '', national_identity: null} -- model: popolo.person - pk: c-n3pdeputado-estadual - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:13.242269+00:00', - updated_at: !!timestamp '2018-04-04 20:26:13.243927+00:00', slug: c-n3pdeputado-estadual, - name: C n3pDeputado Estadual, family_name: '', given_name: '', additional_name: '', - honorific_prefix: '', honorific_suffix: '', patronymic_name: '', sort_name: '', - email: null, gender: '', birth_date: '', death_date: '', image: null, summary: '', - biography: '', national_identity: null} -- model: popolo.person - pk: c-n3pdeputado-federal - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:13.282841+00:00', - updated_at: !!timestamp '2018-04-04 20:26:13.284545+00:00', slug: c-n3pdeputado-federal, - name: C n3pDeputado Federal, family_name: '', given_name: '', additional_name: '', - honorific_prefix: '', honorific_suffix: '', patronymic_name: '', sort_name: '', - email: null, gender: '', birth_date: '', death_date: '', image: null, summary: '', - biography: '', national_identity: null} -- model: popolo.person - pk: c-n3psenado-federal - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:13.321854+00:00', - updated_at: !!timestamp '2018-04-04 20:26:13.323458+00:00', slug: c-n3psenado-federal, - name: C n3pSenado Federal, family_name: '', given_name: '', additional_name: '', - honorific_prefix: '', honorific_suffix: '', patronymic_name: '', sort_name: '', - email: null, gender: '', birth_date: '', death_date: '', image: null, summary: '', - biography: '', national_identity: null} -- model: popolo.area - pk: acre-state-ac - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:13.052021+00:00', - updated_at: !!timestamp '2018-04-04 20:26:13.052262+00:00', name: Acre, identifier: AC, - classification: state, parent: brasil-country-br, geom: null, inhabitants: null, - slug: acre-state-ac} -- model: popolo.area - pk: alagoas-state-al - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:13.333498+00:00', - updated_at: !!timestamp '2018-04-04 20:26:13.333752+00:00', name: Alagoas, identifier: AL, - classification: state, parent: brasil-country-br, geom: null, inhabitants: null, - slug: alagoas-state-al} -- model: popolo.area - pk: amapa-state-ap - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:13.480610+00:00', - updated_at: !!timestamp '2018-04-04 20:26:13.480938+00:00', name: "Amap\xE1", - identifier: AP, classification: state, parent: brasil-country-br, geom: null, - inhabitants: null, slug: amapa-state-ap} -- model: popolo.area - pk: amazonas-state-am - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:13.632429+00:00', - updated_at: !!timestamp '2018-04-04 20:26:13.632710+00:00', name: Amazonas, identifier: AM, - classification: state, parent: brasil-country-br, geom: null, inhabitants: null, - slug: amazonas-state-am} -- model: popolo.area - pk: bahia-state-ba - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:13.795869+00:00', - updated_at: !!timestamp '2018-04-04 20:26:13.796175+00:00', name: "Bah\xEDa", - identifier: BA, classification: state, parent: brasil-country-br, geom: null, - inhabitants: null, slug: bahia-state-ba} -- model: popolo.area - pk: brasil-country-br - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:13.034291+00:00', - updated_at: !!timestamp '2018-04-04 20:26:13.034944+00:00', name: Brasil, identifier: BR, - classification: country, parent: null, geom: null, inhabitants: null, slug: brasil-country-br} -- model: popolo.area - pk: ceara-state-ce - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:13.979956+00:00', - updated_at: !!timestamp '2018-04-04 20:26:13.980303+00:00', name: "Cear\xE1", - identifier: CE, classification: state, parent: brasil-country-br, geom: null, - inhabitants: null, slug: ceara-state-ce} -- model: popolo.area - pk: distrito-federal-state-df - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:14.144361+00:00', - updated_at: !!timestamp '2018-04-04 20:26:14.144624+00:00', name: Distrito Federal, - identifier: DF, classification: state, parent: brasil-country-br, geom: null, - inhabitants: null, slug: distrito-federal-state-df} -- model: popolo.area - pk: espirito-santo-state-es - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:14.304596+00:00', - updated_at: !!timestamp '2018-04-04 20:26:14.304884+00:00', name: "Esp\xEDrito\ - \ Santo", identifier: ES, classification: state, parent: brasil-country-br, - geom: null, inhabitants: null, slug: espirito-santo-state-es} -- model: popolo.area - pk: goias-state-go - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:14.472704+00:00', - updated_at: !!timestamp '2018-04-04 20:26:14.472938+00:00', name: "Goi\xE1s", - identifier: GO, classification: state, parent: brasil-country-br, geom: null, - inhabitants: null, slug: goias-state-go} -- model: popolo.area - pk: maranhao-state-ma - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:14.654793+00:00', - updated_at: !!timestamp '2018-04-04 20:26:14.655065+00:00', name: "Maranh\xE3o", - identifier: MA, classification: state, parent: brasil-country-br, geom: null, - inhabitants: null, slug: maranhao-state-ma} -- model: popolo.area - pk: mato-grosso-del-sur-state-ms - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:15.044747+00:00', - updated_at: !!timestamp '2018-04-04 20:26:15.045152+00:00', name: Mato Grosso - del Sur, identifier: MS, classification: state, parent: brasil-country-br, geom: null, - inhabitants: null, slug: mato-grosso-del-sur-state-ms} -- model: popolo.area - pk: mato-grosso-state-mt - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:14.845342+00:00', - updated_at: !!timestamp '2018-04-04 20:26:14.845662+00:00', name: Mato Grosso, - identifier: MT, classification: state, parent: brasil-country-br, geom: null, - inhabitants: null, slug: mato-grosso-state-mt} -- model: popolo.area - pk: minas-gerais-state-mg - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:15.231078+00:00', - updated_at: !!timestamp '2018-04-04 20:26:15.231352+00:00', name: Minas Gerais, - identifier: MG, classification: state, parent: brasil-country-br, geom: null, - inhabitants: null, slug: minas-gerais-state-mg} -- model: popolo.area - pk: paraiba-state-pb - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:15.613620+00:00', - updated_at: !!timestamp '2018-04-04 20:26:15.613903+00:00', name: "Para\xEDba", - identifier: PB, classification: state, parent: brasil-country-br, geom: null, - inhabitants: null, slug: paraiba-state-pb} -- model: popolo.area - pk: parana-state-pr - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:15.800839+00:00', - updated_at: !!timestamp '2018-04-04 20:26:15.801111+00:00', name: "Paran\xE1", - identifier: PR, classification: state, parent: brasil-country-br, geom: null, - inhabitants: null, slug: parana-state-pr} -- model: popolo.area - pk: para-state-pa - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:15.414987+00:00', - updated_at: !!timestamp '2018-04-04 20:26:15.415234+00:00', name: "Par\xE1", identifier: PA, - classification: state, parent: brasil-country-br, geom: null, inhabitants: null, - slug: para-state-pa} -- model: popolo.area - pk: pernambuco-state-pe - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:16.011711+00:00', - updated_at: !!timestamp '2018-04-04 20:26:16.012031+00:00', name: Pernambuco, - identifier: PE, classification: state, parent: brasil-country-br, geom: null, - inhabitants: null, slug: pernambuco-state-pe} -- model: popolo.area - pk: piaui-state-pi - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:16.219714+00:00', - updated_at: !!timestamp '2018-04-04 20:26:16.219957+00:00', name: "Piau\xED", - identifier: PI, classification: state, parent: brasil-country-br, geom: null, - inhabitants: null, slug: piaui-state-pi} -- model: popolo.area - pk: rio-de-janeiro-state-rj - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:16.437934+00:00', - updated_at: !!timestamp '2018-04-04 20:26:16.438166+00:00', name: "R\xEDo de Janeiro", - identifier: RJ, classification: state, parent: brasil-country-br, geom: null, - inhabitants: null, slug: rio-de-janeiro-state-rj} -- model: popolo.area - pk: rio-grande-del-norte-state-rn - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:16.656477+00:00', - updated_at: !!timestamp '2018-04-04 20:26:16.656729+00:00', name: "R\xEDo Grande\ - \ del Norte", identifier: RN, classification: state, parent: brasil-country-br, - geom: null, inhabitants: null, slug: rio-grande-del-norte-state-rn} -- model: popolo.area - pk: rio-grande-del-sur-state-rs - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:16.888923+00:00', - updated_at: !!timestamp '2018-04-04 20:26:16.889151+00:00', name: "R\xEDo Grande\ - \ del Sur", identifier: RS, classification: state, parent: brasil-country-br, - geom: null, inhabitants: null, slug: rio-grande-del-sur-state-rs} -- model: popolo.area - pk: rondonia-state-ro - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:17.109041+00:00', - updated_at: !!timestamp '2018-04-04 20:26:17.109348+00:00', name: "Rond\xF4nia", - identifier: RO, classification: state, parent: brasil-country-br, geom: null, - inhabitants: null, slug: rondonia-state-ro} -- model: popolo.area - pk: roraima-state-rr - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:17.343381+00:00', - updated_at: !!timestamp '2018-04-04 20:26:17.343627+00:00', name: Roraima, identifier: RR, - classification: state, parent: brasil-country-br, geom: null, inhabitants: null, - slug: roraima-state-rr} -- model: popolo.area - pk: santa-catarina-state-sc - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:17.575110+00:00', - updated_at: !!timestamp '2018-04-04 20:26:17.575350+00:00', name: Santa Catarina, - identifier: SC, classification: state, parent: brasil-country-br, geom: null, - inhabitants: null, slug: santa-catarina-state-sc} -- model: popolo.area - pk: sao-paulo-state-sp - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:17.810035+00:00', - updated_at: !!timestamp '2018-04-04 20:26:17.810272+00:00', name: "S\xE3o Paulo", - identifier: SP, classification: state, parent: brasil-country-br, geom: null, - inhabitants: null, slug: sao-paulo-state-sp} -- model: popolo.area - pk: sergipe-state-se - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:18.071740+00:00', - updated_at: !!timestamp '2018-04-04 20:26:18.072098+00:00', name: Sergipe, identifier: SE, - classification: state, parent: brasil-country-br, geom: null, inhabitants: null, - slug: sergipe-state-se} -- model: popolo.area - pk: tocantins-state-to - fields: {start_date: null, end_date: null, created_at: !!timestamp '2018-04-04 20:26:18.315737+00:00', - updated_at: !!timestamp '2018-04-04 20:26:18.316029+00:00', name: Tocantins, identifier: TO, - classification: state, parent: brasil-country-br, geom: null, inhabitants: null, - slug: tocantins-state-to} -- model: candidator.topic - pk: 1 - fields: {label: "Ado\xE7\xE3o de crian\xE7as por fam\xEDlias LGBTs.", description: '', - category: 1, slug: adocao-de-criancas-por-familias-lgbts} -- model: candidator.topic - pk: 2 - fields: {label: "Uso de banheiros por pessoas travestis e transexuais de acordo\ - \ com sua identidade de g\xEAnero.", description: '', category: 1, slug: uso-de-banheiros-por-pessoas-travestis-e-transexua} -- model: candidator.topic - pk: 3 - fields: {label: "Cota de 50% para mulheres no Legislativo, garantindo representatividade\ - \ \xE9tnico-racial e respeito \xE0 identidade de g\xEAnero autodeclarada.", - description: '', category: 1, slug: cota-de-50-para-mulheres-no-legislativo-garantindo} -- model: candidator.topic - pk: 4 - fields: {label: "Promo\xE7\xE3o de igualdade de g\xEAnero e ra\xE7a e o respeito\ - \ \xE0s orienta\xE7\xF5es sexuais e identidades de g\xEAnero nas escolas.", - description: '', category: 1, slug: promocao-de-igualdade-de-genero-e-raca-e-o-respeit} -- model: candidator.topic - pk: 5 - fields: {label: "Cotas raciais e a\xE7\xF5es afirmativas para a popula\xE7\xE3o\ - \ negra.", description: '', category: 1, slug: cotas-raciais-e-acoes-afirmativas-para-a-populacao} -- model: candidator.topic - pk: 6 - fields: {label: "Proibi\xE7\xE3o da realiza\xE7\xE3o de cultos e o uso de s\xED\ - mbolos religiosos em reparti\xE7\xF5es p\xFAblicas.", description: '', category: 1, - slug: proibicao-da-realizacao-de-cultos-e-o-uso-de-simbo} -- model: candidator.topic - pk: 7 - fields: {label: "Impedimento de ocupa\xE7\xE3o de cargos p\xFAblicos por homens\ - \ que tenham agredido mulheres.", description: '', category: 1, slug: impedimento-de-ocupacao-de-cargos-publicos-por-hom} -- model: candidator.topic - pk: 8 - fields: {label: "Descriminaliza\xE7\xE3o e legaliza\xE7\xE3o do aborto.", description: '', - category: 1, slug: descriminalizacao-e-legalizacao-do-aborto} -- model: candidator.topic - pk: 9 - fields: {label: "Criminaliza\xE7\xE3o da lesbofobia, homofobia, transfobia e bifobia.", - description: '', category: 1, slug: criminalizacao-da-lesbofobia-homofobia-transfobia-} -- model: candidator.topic - pk: 10 - fields: {label: "Desmilitariza\xE7\xE3o da pol\xEDcia.", description: '', category: 1, - slug: desmilitarizacao-da-policia} -- model: candidator.topic - pk: 11 - fields: {label: "Desapropria\xE7\xE3o de im\xF3veis abandonados para cria\xE7\xE3\ - o de moradias de interesse social.", description: '', category: 1, slug: desapropriacao-de-imoveis-abandonados-para-criacao} -- model: candidator.topic - pk: 12 - fields: {label: "Licenciamento ambiental que proteja popula\xE7\xF5es vulner\xE1\ - veis e \xE1reas atingidas por grandes empreendimentos.", description: '', category: 1, - slug: licenciamento-ambiental-que-proteja-populacoes-vul} -- model: candidator.topic - pk: 13 - fields: {label: "Abertura de maiores espa\xE7os de participa\xE7\xE3o direta da\ - \ popula\xE7\xE3o na defini\xE7\xE3o do or\xE7amento municipal.", description: '', - category: 1, slug: abertura-de-maiores-espacos-de-participacao-direta} -- model: candidator.topic - pk: 14 - fields: {label: "Quebra dos contratos com empresas de mobilidade que n\xE3o t\xEA\ - m auditoria de custos e uma gest\xE3o transparente.", description: '', category: 1, - slug: quebra-dos-contratos-com-empresas-de-mobilidade-qu} -- model: candidator.position - pk: 1 - fields: {label: Sim, topic: 1, description: ''} -- model: candidator.position - pk: 2 - fields: {label: Non, topic: 1, description: ''} -- model: candidator.position - pk: 3 - fields: {label: Sim, topic: 2, description: ''} -- model: candidator.position - pk: 4 - fields: {label: Non, topic: 2, description: ''} -- model: candidator.position - pk: 5 - fields: {label: Sim, topic: 3, description: ''} -- model: candidator.position - pk: 6 - fields: {label: Non, topic: 3, description: ''} -- model: candidator.position - pk: 7 - fields: {label: Sim, topic: 4, description: ''} -- model: candidator.position - pk: 8 - fields: {label: Non, topic: 4, description: ''} -- model: candidator.position - pk: 9 - fields: {label: Sim, topic: 5, description: ''} -- model: candidator.position - pk: 10 - fields: {label: Non, topic: 5, description: ''} -- model: candidator.position - pk: 11 - fields: {label: Sim, topic: 6, description: ''} -- model: candidator.position - pk: 12 - fields: {label: Non, topic: 6, description: ''} -- model: candidator.position - pk: 13 - fields: {label: Sim, topic: 7, description: ''} -- model: candidator.position - pk: 14 - fields: {label: Non, topic: 7, description: ''} -- model: candidator.position - pk: 15 - fields: {label: Sim, topic: 8, description: ''} -- model: candidator.position - pk: 16 - fields: {label: Non, topic: 8, description: ''} -- model: candidator.position - pk: 17 - fields: {label: Sim, topic: 9, description: ''} -- model: candidator.position - pk: 18 - fields: {label: Non, topic: 9, description: ''} -- model: candidator.position - pk: 19 - fields: {label: Sim, topic: 10, description: ''} -- model: candidator.position - pk: 20 - fields: {label: Non, topic: 10, description: ''} -- model: candidator.position - pk: 21 - fields: {label: Sim, topic: 11, description: ''} -- model: candidator.position - pk: 22 - fields: {label: Non, topic: 11, description: ''} -- model: candidator.position - pk: 23 - fields: {label: Sim, topic: 12, description: ''} -- model: candidator.position - pk: 24 - fields: {label: Non, topic: 12, description: ''} -- model: candidator.position - pk: 25 - fields: {label: Sim, topic: 13, description: ''} -- model: candidator.position - pk: 26 - fields: {label: Non, topic: 13, description: ''} -- model: candidator.position - pk: 27 - fields: {label: Sim, topic: 14, description: ''} -- model: candidator.position - pk: 28 - fields: {label: Non, topic: 14, description: ''} -- model: candidator.takenposition - pk: 1 - fields: {topic: 1, position: 1, person: c-n3pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 2 - fields: {topic: 2, position: 4, person: c-n3pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 3 - fields: {topic: 3, position: 5, person: c-n3pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 4 - fields: {topic: 4, position: 7, person: c-n3pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 5 - fields: {topic: 5, position: 9, person: c-n3pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 6 - fields: {topic: 6, position: 12, person: c-n3pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 7 - fields: {topic: 7, position: 14, person: c-n3pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 8 - fields: {topic: 8, position: 16, person: c-n3pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 9 - fields: {topic: 9, position: 18, person: c-n3pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 10 - fields: {topic: 10, position: 20, person: c-n3pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 11 - fields: {topic: 11, position: 22, person: c-n3pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 12 - fields: {topic: 12, position: 23, person: c-n3pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 13 - fields: {topic: 13, position: 25, person: c-n3pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 14 - fields: {topic: 14, position: 27, person: c-n3pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 15 - fields: {topic: 1, position: 1, person: c-n2pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 16 - fields: {topic: 2, position: 3, person: c-n2pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 17 - fields: {topic: 3, position: 6, person: c-n2pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 18 - fields: {topic: 4, position: 8, person: c-n2pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 19 - fields: {topic: 5, position: 9, person: c-n2pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 20 - fields: {topic: 6, position: 11, person: c-n2pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 21 - fields: {topic: 7, position: 13, person: c-n2pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 22 - fields: {topic: 8, position: 16, person: c-n2pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 23 - fields: {topic: 9, position: 17, person: c-n2pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 24 - fields: {topic: 10, position: 19, person: c-n2pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 25 - fields: {topic: 11, position: 22, person: c-n2pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 26 - fields: {topic: 12, position: 23, person: c-n2pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 27 - fields: {topic: 13, position: 25, person: c-n2pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 28 - fields: {topic: 14, position: 28, person: c-n2pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 29 - fields: {topic: 1, position: 1, person: c-n2psenado-federal, description: ''} -- model: candidator.takenposition - pk: 30 - fields: {topic: 2, position: 4, person: c-n2psenado-federal, description: ''} -- model: candidator.takenposition - pk: 31 - fields: {topic: 3, position: 5, person: c-n2psenado-federal, description: ''} -- model: candidator.takenposition - pk: 32 - fields: {topic: 4, position: 7, person: c-n2psenado-federal, description: ''} -- model: candidator.takenposition - pk: 33 - fields: {topic: 5, position: 10, person: c-n2psenado-federal, description: ''} -- model: candidator.takenposition - pk: 34 - fields: {topic: 6, position: 12, person: c-n2psenado-federal, description: ''} -- model: candidator.takenposition - pk: 35 - fields: {topic: 7, position: 13, person: c-n2psenado-federal, description: ''} -- model: candidator.takenposition - pk: 36 - fields: {topic: 8, position: 16, person: c-n2psenado-federal, description: ''} -- model: candidator.takenposition - pk: 37 - fields: {topic: 9, position: 17, person: c-n2psenado-federal, description: ''} -- model: candidator.takenposition - pk: 38 - fields: {topic: 10, position: 19, person: c-n2psenado-federal, description: ''} -- model: candidator.takenposition - pk: 39 - fields: {topic: 11, position: 22, person: c-n2psenado-federal, description: ''} -- model: candidator.takenposition - pk: 40 - fields: {topic: 12, position: 24, person: c-n2psenado-federal, description: ''} -- model: candidator.takenposition - pk: 41 - fields: {topic: 13, position: 26, person: c-n2psenado-federal, description: ''} -- model: candidator.takenposition - pk: 42 - fields: {topic: 14, position: 27, person: c-n2psenado-federal, description: ''} -- model: candidator.takenposition - pk: 43 - fields: {topic: 1, position: 2, person: c-n2psenado-federal, description: ''} -- model: candidator.takenposition - pk: 44 - fields: {topic: 2, position: 4, person: c-n2psenado-federal, description: ''} -- model: candidator.takenposition - pk: 45 - fields: {topic: 3, position: 5, person: c-n2psenado-federal, description: ''} -- model: candidator.takenposition - pk: 46 - fields: {topic: 4, position: 8, person: c-n2psenado-federal, description: ''} -- model: candidator.takenposition - pk: 47 - fields: {topic: 5, position: 9, person: c-n2psenado-federal, description: ''} -- model: candidator.takenposition - pk: 48 - fields: {topic: 6, position: 11, person: c-n2psenado-federal, description: ''} -- model: candidator.takenposition - pk: 49 - fields: {topic: 7, position: 13, person: c-n2psenado-federal, description: ''} -- model: candidator.takenposition - pk: 50 - fields: {topic: 8, position: 15, person: c-n2psenado-federal, description: ''} -- model: candidator.takenposition - pk: 51 - fields: {topic: 9, position: 17, person: c-n2psenado-federal, description: ''} -- model: candidator.takenposition - pk: 52 - fields: {topic: 10, position: 20, person: c-n2psenado-federal, description: ''} -- model: candidator.takenposition - pk: 53 - fields: {topic: 11, position: 22, person: c-n2psenado-federal, description: ''} -- model: candidator.takenposition - pk: 54 - fields: {topic: 12, position: 23, person: c-n2psenado-federal, description: ''} -- model: candidator.takenposition - pk: 55 - fields: {topic: 13, position: 26, person: c-n2psenado-federal, description: ''} -- model: candidator.takenposition - pk: 56 - fields: {topic: 14, position: 28, person: c-n2psenado-federal, description: ''} -- model: candidator.takenposition - pk: 57 - fields: {topic: 1, position: 2, person: c-n3psenado-federal, description: ''} -- model: candidator.takenposition - pk: 58 - fields: {topic: 2, position: 3, person: c-n3psenado-federal, description: ''} -- model: candidator.takenposition - pk: 59 - fields: {topic: 3, position: 6, person: c-n3psenado-federal, description: ''} -- model: candidator.takenposition - pk: 60 - fields: {topic: 4, position: 8, person: c-n3psenado-federal, description: ''} -- model: candidator.takenposition - pk: 61 - fields: {topic: 5, position: 9, person: c-n3psenado-federal, description: ''} -- model: candidator.takenposition - pk: 62 - fields: {topic: 6, position: 12, person: c-n3psenado-federal, description: ''} -- model: candidator.takenposition - pk: 63 - fields: {topic: 7, position: 13, person: c-n3psenado-federal, description: ''} -- model: candidator.takenposition - pk: 64 - fields: {topic: 8, position: 16, person: c-n3psenado-federal, description: ''} -- model: candidator.takenposition - pk: 65 - fields: {topic: 9, position: 18, person: c-n3psenado-federal, description: ''} -- model: candidator.takenposition - pk: 66 - fields: {topic: 10, position: 19, person: c-n3psenado-federal, description: ''} -- model: candidator.takenposition - pk: 67 - fields: {topic: 11, position: 22, person: c-n3psenado-federal, description: ''} -- model: candidator.takenposition - pk: 68 - fields: {topic: 12, position: 23, person: c-n3psenado-federal, description: ''} -- model: candidator.takenposition - pk: 69 - fields: {topic: 13, position: 26, person: c-n3psenado-federal, description: ''} -- model: candidator.takenposition - pk: 70 - fields: {topic: 14, position: 28, person: c-n3psenado-federal, description: ''} -- model: candidator.takenposition - pk: 71 - fields: {topic: 1, position: 2, person: c-n3pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 72 - fields: {topic: 2, position: 4, person: c-n3pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 73 - fields: {topic: 3, position: 5, person: c-n3pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 74 - fields: {topic: 4, position: 7, person: c-n3pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 75 - fields: {topic: 5, position: 10, person: c-n3pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 76 - fields: {topic: 6, position: 12, person: c-n3pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 77 - fields: {topic: 7, position: 13, person: c-n3pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 78 - fields: {topic: 8, position: 15, person: c-n3pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 79 - fields: {topic: 9, position: 17, person: c-n3pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 80 - fields: {topic: 10, position: 19, person: c-n3pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 81 - fields: {topic: 11, position: 21, person: c-n3pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 82 - fields: {topic: 12, position: 23, person: c-n3pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 83 - fields: {topic: 13, position: 26, person: c-n3pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 84 - fields: {topic: 14, position: 27, person: c-n3pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 85 - fields: {topic: 1, position: 1, person: c-n2pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 86 - fields: {topic: 2, position: 3, person: c-n2pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 87 - fields: {topic: 3, position: 5, person: c-n2pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 88 - fields: {topic: 4, position: 7, person: c-n2pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 89 - fields: {topic: 5, position: 10, person: c-n2pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 90 - fields: {topic: 6, position: 12, person: c-n2pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 91 - fields: {topic: 7, position: 14, person: c-n2pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 92 - fields: {topic: 8, position: 16, person: c-n2pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 93 - fields: {topic: 9, position: 17, person: c-n2pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 94 - fields: {topic: 10, position: 20, person: c-n2pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 95 - fields: {topic: 11, position: 22, person: c-n2pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 96 - fields: {topic: 12, position: 23, person: c-n2pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 97 - fields: {topic: 13, position: 26, person: c-n2pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 98 - fields: {topic: 14, position: 27, person: c-n2pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 99 - fields: {topic: 1, position: 1, person: c-n1psenado-federal, description: ''} -- model: candidator.takenposition - pk: 100 - fields: {topic: 2, position: 3, person: c-n1psenado-federal, description: ''} -- model: candidator.takenposition - pk: 101 - fields: {topic: 3, position: 6, person: c-n1psenado-federal, description: ''} -- model: candidator.takenposition - pk: 102 - fields: {topic: 4, position: 7, person: c-n1psenado-federal, description: ''} -- model: candidator.takenposition - pk: 103 - fields: {topic: 5, position: 10, person: c-n1psenado-federal, description: ''} -- model: candidator.takenposition - pk: 104 - fields: {topic: 6, position: 11, person: c-n1psenado-federal, description: ''} -- model: candidator.takenposition - pk: 105 - fields: {topic: 7, position: 14, person: c-n1psenado-federal, description: ''} -- model: candidator.takenposition - pk: 106 - fields: {topic: 8, position: 16, person: c-n1psenado-federal, description: ''} -- model: candidator.takenposition - pk: 107 - fields: {topic: 9, position: 18, person: c-n1psenado-federal, description: ''} -- model: candidator.takenposition - pk: 108 - fields: {topic: 10, position: 20, person: c-n1psenado-federal, description: ''} -- model: candidator.takenposition - pk: 109 - fields: {topic: 11, position: 21, person: c-n1psenado-federal, description: ''} -- model: candidator.takenposition - pk: 110 - fields: {topic: 12, position: 23, person: c-n1psenado-federal, description: ''} -- model: candidator.takenposition - pk: 111 - fields: {topic: 13, position: 25, person: c-n1psenado-federal, description: ''} -- model: candidator.takenposition - pk: 112 - fields: {topic: 14, position: 28, person: c-n1psenado-federal, description: ''} -- model: candidator.takenposition - pk: 113 - fields: {topic: 1, position: 1, person: c-n2pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 114 - fields: {topic: 2, position: 4, person: c-n2pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 115 - fields: {topic: 3, position: 5, person: c-n2pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 116 - fields: {topic: 4, position: 7, person: c-n2pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 117 - fields: {topic: 5, position: 9, person: c-n2pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 118 - fields: {topic: 6, position: 11, person: c-n2pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 119 - fields: {topic: 7, position: 13, person: c-n2pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 120 - fields: {topic: 8, position: 16, person: c-n2pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 121 - fields: {topic: 9, position: 18, person: c-n2pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 122 - fields: {topic: 10, position: 19, person: c-n2pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 123 - fields: {topic: 11, position: 21, person: c-n2pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 124 - fields: {topic: 12, position: 24, person: c-n2pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 125 - fields: {topic: 13, position: 26, person: c-n2pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 126 - fields: {topic: 14, position: 27, person: c-n2pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 127 - fields: {topic: 1, position: 2, person: c-n1psenado-federal, description: ''} -- model: candidator.takenposition - pk: 128 - fields: {topic: 2, position: 3, person: c-n1psenado-federal, description: ''} -- model: candidator.takenposition - pk: 129 - fields: {topic: 3, position: 6, person: c-n1psenado-federal, description: ''} -- model: candidator.takenposition - pk: 130 - fields: {topic: 4, position: 7, person: c-n1psenado-federal, description: ''} -- model: candidator.takenposition - pk: 131 - fields: {topic: 5, position: 9, person: c-n1psenado-federal, description: ''} -- model: candidator.takenposition - pk: 132 - fields: {topic: 6, position: 12, person: c-n1psenado-federal, description: ''} -- model: candidator.takenposition - pk: 133 - fields: {topic: 7, position: 14, person: c-n1psenado-federal, description: ''} -- model: candidator.takenposition - pk: 134 - fields: {topic: 8, position: 16, person: c-n1psenado-federal, description: ''} -- model: candidator.takenposition - pk: 135 - fields: {topic: 9, position: 17, person: c-n1psenado-federal, description: ''} -- model: candidator.takenposition - pk: 136 - fields: {topic: 10, position: 19, person: c-n1psenado-federal, description: ''} -- model: candidator.takenposition - pk: 137 - fields: {topic: 11, position: 22, person: c-n1psenado-federal, description: ''} -- model: candidator.takenposition - pk: 138 - fields: {topic: 12, position: 24, person: c-n1psenado-federal, description: ''} -- model: candidator.takenposition - pk: 139 - fields: {topic: 13, position: 26, person: c-n1psenado-federal, description: ''} -- model: candidator.takenposition - pk: 140 - fields: {topic: 14, position: 27, person: c-n1psenado-federal, description: ''} -- model: candidator.takenposition - pk: 141 - fields: {topic: 1, position: 2, person: c-n1pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 142 - fields: {topic: 2, position: 4, person: c-n1pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 143 - fields: {topic: 3, position: 5, person: c-n1pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 144 - fields: {topic: 4, position: 7, person: c-n1pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 145 - fields: {topic: 5, position: 9, person: c-n1pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 146 - fields: {topic: 6, position: 12, person: c-n1pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 147 - fields: {topic: 7, position: 13, person: c-n1pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 148 - fields: {topic: 8, position: 15, person: c-n1pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 149 - fields: {topic: 9, position: 18, person: c-n1pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 150 - fields: {topic: 10, position: 19, person: c-n1pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 151 - fields: {topic: 11, position: 21, person: c-n1pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 152 - fields: {topic: 12, position: 23, person: c-n1pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 153 - fields: {topic: 13, position: 25, person: c-n1pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 154 - fields: {topic: 14, position: 27, person: c-n1pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 155 - fields: {topic: 1, position: 2, person: c-n3pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 156 - fields: {topic: 2, position: 3, person: c-n3pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 157 - fields: {topic: 3, position: 5, person: c-n3pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 158 - fields: {topic: 4, position: 8, person: c-n3pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 159 - fields: {topic: 5, position: 10, person: c-n3pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 160 - fields: {topic: 6, position: 11, person: c-n3pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 161 - fields: {topic: 7, position: 14, person: c-n3pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 162 - fields: {topic: 8, position: 15, person: c-n3pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 163 - fields: {topic: 9, position: 18, person: c-n3pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 164 - fields: {topic: 10, position: 19, person: c-n3pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 165 - fields: {topic: 11, position: 22, person: c-n3pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 166 - fields: {topic: 12, position: 23, person: c-n3pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 167 - fields: {topic: 13, position: 25, person: c-n3pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 168 - fields: {topic: 14, position: 28, person: c-n3pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 169 - fields: {topic: 1, position: 1, person: c-n3psenado-federal, description: ''} -- model: candidator.takenposition - pk: 170 - fields: {topic: 2, position: 4, person: c-n3psenado-federal, description: ''} -- model: candidator.takenposition - pk: 171 - fields: {topic: 3, position: 5, person: c-n3psenado-federal, description: ''} -- model: candidator.takenposition - pk: 172 - fields: {topic: 4, position: 7, person: c-n3psenado-federal, description: ''} -- model: candidator.takenposition - pk: 173 - fields: {topic: 5, position: 10, person: c-n3psenado-federal, description: ''} -- model: candidator.takenposition - pk: 174 - fields: {topic: 6, position: 11, person: c-n3psenado-federal, description: ''} -- model: candidator.takenposition - pk: 175 - fields: {topic: 7, position: 14, person: c-n3psenado-federal, description: ''} -- model: candidator.takenposition - pk: 176 - fields: {topic: 8, position: 16, person: c-n3psenado-federal, description: ''} -- model: candidator.takenposition - pk: 177 - fields: {topic: 9, position: 17, person: c-n3psenado-federal, description: ''} -- model: candidator.takenposition - pk: 178 - fields: {topic: 10, position: 19, person: c-n3psenado-federal, description: ''} -- model: candidator.takenposition - pk: 179 - fields: {topic: 11, position: 21, person: c-n3psenado-federal, description: ''} -- model: candidator.takenposition - pk: 180 - fields: {topic: 12, position: 23, person: c-n3psenado-federal, description: ''} -- model: candidator.takenposition - pk: 181 - fields: {topic: 13, position: 25, person: c-n3psenado-federal, description: ''} -- model: candidator.takenposition - pk: 182 - fields: {topic: 14, position: 28, person: c-n3psenado-federal, description: ''} -- model: candidator.takenposition - pk: 183 - fields: {topic: 1, position: 2, person: c-n1pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 184 - fields: {topic: 2, position: 3, person: c-n1pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 185 - fields: {topic: 3, position: 6, person: c-n1pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 186 - fields: {topic: 4, position: 8, person: c-n1pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 187 - fields: {topic: 5, position: 9, person: c-n1pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 188 - fields: {topic: 6, position: 12, person: c-n1pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 189 - fields: {topic: 7, position: 14, person: c-n1pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 190 - fields: {topic: 8, position: 16, person: c-n1pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 191 - fields: {topic: 9, position: 18, person: c-n1pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 192 - fields: {topic: 10, position: 20, person: c-n1pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 193 - fields: {topic: 11, position: 22, person: c-n1pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 194 - fields: {topic: 12, position: 24, person: c-n1pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 195 - fields: {topic: 13, position: 25, person: c-n1pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 196 - fields: {topic: 14, position: 28, person: c-n1pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 197 - fields: {topic: 1, position: 2, person: c-n2pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 198 - fields: {topic: 2, position: 4, person: c-n2pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 199 - fields: {topic: 3, position: 6, person: c-n2pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 200 - fields: {topic: 4, position: 7, person: c-n2pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 201 - fields: {topic: 5, position: 9, person: c-n2pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 202 - fields: {topic: 6, position: 12, person: c-n2pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 203 - fields: {topic: 7, position: 13, person: c-n2pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 204 - fields: {topic: 8, position: 16, person: c-n2pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 205 - fields: {topic: 9, position: 17, person: c-n2pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 206 - fields: {topic: 10, position: 19, person: c-n2pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 207 - fields: {topic: 11, position: 22, person: c-n2pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 208 - fields: {topic: 12, position: 23, person: c-n2pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 209 - fields: {topic: 13, position: 25, person: c-n2pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 210 - fields: {topic: 14, position: 27, person: c-n2pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 211 - fields: {topic: 1, position: 1, person: c-n3pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 212 - fields: {topic: 2, position: 4, person: c-n3pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 213 - fields: {topic: 3, position: 5, person: c-n3pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 214 - fields: {topic: 4, position: 8, person: c-n3pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 215 - fields: {topic: 5, position: 10, person: c-n3pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 216 - fields: {topic: 6, position: 11, person: c-n3pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 217 - fields: {topic: 7, position: 13, person: c-n3pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 218 - fields: {topic: 8, position: 15, person: c-n3pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 219 - fields: {topic: 9, position: 18, person: c-n3pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 220 - fields: {topic: 10, position: 20, person: c-n3pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 221 - fields: {topic: 11, position: 22, person: c-n3pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 222 - fields: {topic: 12, position: 24, person: c-n3pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 223 - fields: {topic: 13, position: 25, person: c-n3pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 224 - fields: {topic: 14, position: 27, person: c-n3pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 225 - fields: {topic: 1, position: 2, person: c-n1pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 226 - fields: {topic: 2, position: 3, person: c-n1pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 227 - fields: {topic: 3, position: 6, person: c-n1pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 228 - fields: {topic: 4, position: 7, person: c-n1pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 229 - fields: {topic: 5, position: 9, person: c-n1pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 230 - fields: {topic: 6, position: 11, person: c-n1pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 231 - fields: {topic: 7, position: 13, person: c-n1pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 232 - fields: {topic: 8, position: 16, person: c-n1pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 233 - fields: {topic: 9, position: 18, person: c-n1pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 234 - fields: {topic: 10, position: 19, person: c-n1pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 235 - fields: {topic: 11, position: 21, person: c-n1pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 236 - fields: {topic: 12, position: 24, person: c-n1pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 237 - fields: {topic: 13, position: 25, person: c-n1pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 238 - fields: {topic: 14, position: 27, person: c-n1pdeputado-federal, description: ''} -- model: candidator.takenposition - pk: 239 - fields: {topic: 1, position: 1, person: c-n1pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 240 - fields: {topic: 2, position: 3, person: c-n1pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 241 - fields: {topic: 3, position: 5, person: c-n1pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 242 - fields: {topic: 4, position: 8, person: c-n1pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 243 - fields: {topic: 5, position: 9, person: c-n1pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 244 - fields: {topic: 6, position: 12, person: c-n1pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 245 - fields: {topic: 7, position: 13, person: c-n1pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 246 - fields: {topic: 8, position: 16, person: c-n1pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 247 - fields: {topic: 9, position: 18, person: c-n1pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 248 - fields: {topic: 10, position: 20, person: c-n1pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 249 - fields: {topic: 11, position: 21, person: c-n1pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 250 - fields: {topic: 12, position: 24, person: c-n1pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 251 - fields: {topic: 13, position: 25, person: c-n1pdeputado-estadual, description: ''} -- model: candidator.takenposition - pk: 252 - fields: {topic: 14, position: 27, person: c-n1pdeputado-estadual, description: ''} -- model: candidator.category - pk: 1 - fields: {name: '#Merepresenta', slug: merepresenta} -- model: elections.candidate - pk: c-n1pdeputado-estadual - fields: - extra_info: gAJ9cQEoVQ1jdXN0b21fcmliYm9ucQJVC3JpYmJvbiB0ZXh0cQNVDnBvcnRyYWl0X3Bob3RvcQRVIS9zdGF0aWMvaW1nL2NhbmRpZGF0ZS1kZWZhdWx0LmpwZ3EFdS4= - force_has_answer: false - has_won: false - elections: [1, 4, 7, 10, 13, 16, 19, 22, 25, 28, 31, 34, 37, 40, 43, 46, 49, 52, - 55, 58, 61, 64, 67, 70, 73, 76, 79] -- model: elections.candidate - pk: c-n1pdeputado-federal - fields: - extra_info: gAJ9cQEoVQ1jdXN0b21fcmliYm9ucQJVC3JpYmJvbiB0ZXh0cQNVDnBvcnRyYWl0X3Bob3RvcQRVIS9zdGF0aWMvaW1nL2NhbmRpZGF0ZS1kZWZhdWx0LmpwZ3EFdS4= - force_has_answer: false - has_won: false - elections: [2, 5, 8, 11, 14, 17, 20, 23, 26, 29, 32, 35, 38, 41, 44, 47, 50, 53, - 56, 59, 62, 65, 68, 71, 74, 77, 80] -- model: elections.candidate - pk: c-n1psenado-federal - fields: - extra_info: gAJ9cQEoVQ1jdXN0b21fcmliYm9ucQJVC3JpYmJvbiB0ZXh0cQNVDnBvcnRyYWl0X3Bob3RvcQRVIS9zdGF0aWMvaW1nL2NhbmRpZGF0ZS1kZWZhdWx0LmpwZ3EFdS4= - force_has_answer: false - has_won: false - elections: [3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, - 57, 60, 63, 66, 69, 72, 75, 78, 81] -- model: elections.candidate - pk: c-n2pdeputado-estadual - fields: - extra_info: gAJ9cQEoVQ1jdXN0b21fcmliYm9ucQJVC3JpYmJvbiB0ZXh0cQNVDnBvcnRyYWl0X3Bob3RvcQRVIS9zdGF0aWMvaW1nL2NhbmRpZGF0ZS1kZWZhdWx0LmpwZ3EFdS4= - force_has_answer: false - has_won: false - elections: [1, 4, 7, 10, 13, 16, 19, 22, 25, 28, 31, 34, 37, 40, 43, 46, 49, 52, - 55, 58, 61, 64, 67, 70, 73, 76, 79] -- model: elections.candidate - pk: c-n2pdeputado-federal - fields: - extra_info: gAJ9cQEoVQ1jdXN0b21fcmliYm9ucQJVC3JpYmJvbiB0ZXh0cQNVDnBvcnRyYWl0X3Bob3RvcQRVIS9zdGF0aWMvaW1nL2NhbmRpZGF0ZS1kZWZhdWx0LmpwZ3EFdS4= - force_has_answer: false - has_won: false - elections: [2, 5, 8, 11, 14, 17, 20, 23, 26, 29, 32, 35, 38, 41, 44, 47, 50, 53, - 56, 59, 62, 65, 68, 71, 74, 77, 80] -- model: elections.candidate - pk: c-n2psenado-federal - fields: - extra_info: gAJ9cQEoVQ1jdXN0b21fcmliYm9ucQJVC3JpYmJvbiB0ZXh0cQNVDnBvcnRyYWl0X3Bob3RvcQRVIS9zdGF0aWMvaW1nL2NhbmRpZGF0ZS1kZWZhdWx0LmpwZ3EFdS4= - force_has_answer: false - has_won: false - elections: [3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, - 57, 60, 63, 66, 69, 72, 75, 78, 81] -- model: elections.candidate - pk: c-n3pdeputado-estadual - fields: - extra_info: gAJ9cQEoVQ1jdXN0b21fcmliYm9ucQJVC3JpYmJvbiB0ZXh0cQNVDnBvcnRyYWl0X3Bob3RvcQRVIS9zdGF0aWMvaW1nL2NhbmRpZGF0ZS1kZWZhdWx0LmpwZ3EFdS4= - force_has_answer: false - has_won: false - elections: [1, 4, 7, 10, 13, 16, 19, 22, 25, 28, 31, 34, 37, 40, 43, 46, 49, 52, - 55, 58, 61, 64, 67, 70, 73, 76, 79] -- model: elections.candidate - pk: c-n3pdeputado-federal - fields: - extra_info: gAJ9cQEoVQ1jdXN0b21fcmliYm9ucQJVC3JpYmJvbiB0ZXh0cQNVDnBvcnRyYWl0X3Bob3RvcQRVIS9zdGF0aWMvaW1nL2NhbmRpZGF0ZS1kZWZhdWx0LmpwZ3EFdS4= - force_has_answer: false - has_won: false - elections: [2, 5, 8, 11, 14, 17, 20, 23, 26, 29, 32, 35, 38, 41, 44, 47, 50, 53, - 56, 59, 62, 65, 68, 71, 74, 77, 80] -- model: elections.candidate - pk: c-n3psenado-federal - fields: - extra_info: gAJ9cQEoVQ1jdXN0b21fcmliYm9ucQJVC3JpYmJvbiB0ZXh0cQNVDnBvcnRyYWl0X3Bob3RvcQRVIS9zdGF0aWMvaW1nL2NhbmRpZGF0ZS1kZWZhdWx0LmpwZ3EFdS4= - force_has_answer: false - has_won: false - elections: [3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, - 57, 60, 63, 66, 69, 72, 75, 78, 81] -- model: elections.questioncategory - pk: 1 - fields: {election: null} -- model: elections.election - pk: 1 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Deputado - Estadual, slug: deputado-estadual, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Diputada/o Estadual, area: acre-state-ac, second_round: null} -- model: elections.election - pk: 2 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Deputado - Federal, slug: deputado-federal, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Diputada/o Federal, area: acre-state-ac, second_round: null} -- model: elections.election - pk: 3 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Senado - Federal, slug: senado-federal, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Senador/a Federal, area: acre-state-ac, second_round: null} -- model: elections.election - pk: 4 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Deputado - Estadual, slug: deputado-estadual-2, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Diputada/o Estadual, area: alagoas-state-al, second_round: null} -- model: elections.election - pk: 5 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Deputado - Federal, slug: deputado-federal-2, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Diputada/o Federal, area: alagoas-state-al, second_round: null} -- model: elections.election - pk: 6 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Senado - Federal, slug: senado-federal-2, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Senador/a Federal, area: alagoas-state-al, second_round: null} -- model: elections.election - pk: 7 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Deputado - Estadual, slug: deputado-estadual-3, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Diputada/o Estadual, area: amapa-state-ap, second_round: null} -- model: elections.election - pk: 8 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Deputado - Federal, slug: deputado-federal-3, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Diputada/o Federal, area: amapa-state-ap, second_round: null} -- model: elections.election - pk: 9 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Senado - Federal, slug: senado-federal-3, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Senador/a Federal, area: amapa-state-ap, second_round: null} -- model: elections.election - pk: 10 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Deputado - Estadual, slug: deputado-estadual-4, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Diputada/o Estadual, area: amazonas-state-am, second_round: null} -- model: elections.election - pk: 11 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Deputado - Federal, slug: deputado-federal-4, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Diputada/o Federal, area: amazonas-state-am, second_round: null} -- model: elections.election - pk: 12 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Senado - Federal, slug: senado-federal-4, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Senador/a Federal, area: amazonas-state-am, second_round: null} -- model: elections.election - pk: 13 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Deputado - Estadual, slug: deputado-estadual-5, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Diputada/o Estadual, area: bahia-state-ba, second_round: null} -- model: elections.election - pk: 14 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Deputado - Federal, slug: deputado-federal-5, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Diputada/o Federal, area: bahia-state-ba, second_round: null} -- model: elections.election - pk: 15 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Senado - Federal, slug: senado-federal-5, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Senador/a Federal, area: bahia-state-ba, second_round: null} -- model: elections.election - pk: 16 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Deputado - Estadual, slug: deputado-estadual-6, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Diputada/o Estadual, area: ceara-state-ce, second_round: null} -- model: elections.election - pk: 17 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Deputado - Federal, slug: deputado-federal-6, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Diputada/o Federal, area: ceara-state-ce, second_round: null} -- model: elections.election - pk: 18 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Senado - Federal, slug: senado-federal-6, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Senador/a Federal, area: ceara-state-ce, second_round: null} -- model: elections.election - pk: 19 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Deputado - Estadual, slug: deputado-estadual-7, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Diputada/o Estadual, area: distrito-federal-state-df, second_round: null} -- model: elections.election - pk: 20 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Deputado - Federal, slug: deputado-federal-7, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Diputada/o Federal, area: distrito-federal-state-df, second_round: null} -- model: elections.election - pk: 21 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Senado - Federal, slug: senado-federal-7, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Senador/a Federal, area: distrito-federal-state-df, second_round: null} -- model: elections.election - pk: 22 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Deputado - Estadual, slug: deputado-estadual-8, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Diputada/o Estadual, area: espirito-santo-state-es, second_round: null} -- model: elections.election - pk: 23 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Deputado - Federal, slug: deputado-federal-8, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Diputada/o Federal, area: espirito-santo-state-es, second_round: null} -- model: elections.election - pk: 24 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Senado - Federal, slug: senado-federal-8, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Senador/a Federal, area: espirito-santo-state-es, second_round: null} -- model: elections.election - pk: 25 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Deputado - Estadual, slug: deputado-estadual-9, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Diputada/o Estadual, area: goias-state-go, second_round: null} -- model: elections.election - pk: 26 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Deputado - Federal, slug: deputado-federal-9, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Diputada/o Federal, area: goias-state-go, second_round: null} -- model: elections.election - pk: 27 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Senado - Federal, slug: senado-federal-9, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Senador/a Federal, area: goias-state-go, second_round: null} -- model: elections.election - pk: 28 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Deputado - Estadual, slug: deputado-estadual-10, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Diputada/o Estadual, area: maranhao-state-ma, second_round: null} -- model: elections.election - pk: 29 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Deputado - Federal, slug: deputado-federal-10, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Diputada/o Federal, area: maranhao-state-ma, second_round: null} -- model: elections.election - pk: 30 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Senado - Federal, slug: senado-federal-10, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Senador/a Federal, area: maranhao-state-ma, second_round: null} -- model: elections.election - pk: 31 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Deputado - Estadual, slug: deputado-estadual-11, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Diputada/o Estadual, area: mato-grosso-state-mt, second_round: null} -- model: elections.election - pk: 32 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Deputado - Federal, slug: deputado-federal-11, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Diputada/o Federal, area: mato-grosso-state-mt, second_round: null} -- model: elections.election - pk: 33 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Senado - Federal, slug: senado-federal-11, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Senador/a Federal, area: mato-grosso-state-mt, second_round: null} -- model: elections.election - pk: 34 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Deputado - Estadual, slug: deputado-estadual-12, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Diputada/o Estadual, area: mato-grosso-del-sur-state-ms, second_round: null} -- model: elections.election - pk: 35 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Deputado - Federal, slug: deputado-federal-12, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Diputada/o Federal, area: mato-grosso-del-sur-state-ms, second_round: null} -- model: elections.election - pk: 36 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Senado - Federal, slug: senado-federal-12, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Senador/a Federal, area: mato-grosso-del-sur-state-ms, second_round: null} -- model: elections.election - pk: 37 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Deputado - Estadual, slug: deputado-estadual-13, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Diputada/o Estadual, area: minas-gerais-state-mg, second_round: null} -- model: elections.election - pk: 38 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Deputado - Federal, slug: deputado-federal-13, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Diputada/o Federal, area: minas-gerais-state-mg, second_round: null} -- model: elections.election - pk: 39 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Senado - Federal, slug: senado-federal-13, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Senador/a Federal, area: minas-gerais-state-mg, second_round: null} -- model: elections.election - pk: 40 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Deputado - Estadual, slug: deputado-estadual-14, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Diputada/o Estadual, area: para-state-pa, second_round: null} -- model: elections.election - pk: 41 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Deputado - Federal, slug: deputado-federal-14, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Diputada/o Federal, area: para-state-pa, second_round: null} -- model: elections.election - pk: 42 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Senado - Federal, slug: senado-federal-14, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Senador/a Federal, area: para-state-pa, second_round: null} -- model: elections.election - pk: 43 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Deputado - Estadual, slug: deputado-estadual-15, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Diputada/o Estadual, area: paraiba-state-pb, second_round: null} -- model: elections.election - pk: 44 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Deputado - Federal, slug: deputado-federal-15, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Diputada/o Federal, area: paraiba-state-pb, second_round: null} -- model: elections.election - pk: 45 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Senado - Federal, slug: senado-federal-15, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Senador/a Federal, area: paraiba-state-pb, second_round: null} -- model: elections.election - pk: 46 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Deputado - Estadual, slug: deputado-estadual-16, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Diputada/o Estadual, area: parana-state-pr, second_round: null} -- model: elections.election - pk: 47 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Deputado - Federal, slug: deputado-federal-16, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Diputada/o Federal, area: parana-state-pr, second_round: null} -- model: elections.election - pk: 48 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Senado - Federal, slug: senado-federal-16, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Senador/a Federal, area: parana-state-pr, second_round: null} -- model: elections.election - pk: 49 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Deputado - Estadual, slug: deputado-estadual-17, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Diputada/o Estadual, area: pernambuco-state-pe, second_round: null} -- model: elections.election - pk: 50 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Deputado - Federal, slug: deputado-federal-17, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Diputada/o Federal, area: pernambuco-state-pe, second_round: null} -- model: elections.election - pk: 51 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Senado - Federal, slug: senado-federal-17, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Senador/a Federal, area: pernambuco-state-pe, second_round: null} -- model: elections.election - pk: 52 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Deputado - Estadual, slug: deputado-estadual-18, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Diputada/o Estadual, area: piaui-state-pi, second_round: null} -- model: elections.election - pk: 53 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Deputado - Federal, slug: deputado-federal-18, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Diputada/o Federal, area: piaui-state-pi, second_round: null} -- model: elections.election - pk: 54 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Senado - Federal, slug: senado-federal-18, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Senador/a Federal, area: piaui-state-pi, second_round: null} -- model: elections.election - pk: 55 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Deputado - Estadual, slug: deputado-estadual-19, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Diputada/o Estadual, area: rio-de-janeiro-state-rj, second_round: null} -- model: elections.election - pk: 56 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Deputado - Federal, slug: deputado-federal-19, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Diputada/o Federal, area: rio-de-janeiro-state-rj, second_round: null} -- model: elections.election - pk: 57 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Senado - Federal, slug: senado-federal-19, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Senador/a Federal, area: rio-de-janeiro-state-rj, second_round: null} -- model: elections.election - pk: 58 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Deputado - Estadual, slug: deputado-estadual-20, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Diputada/o Estadual, area: rio-grande-del-norte-state-rn, second_round: null} -- model: elections.election - pk: 59 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Deputado - Federal, slug: deputado-federal-20, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Diputada/o Federal, area: rio-grande-del-norte-state-rn, second_round: null} -- model: elections.election - pk: 60 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Senado - Federal, slug: senado-federal-20, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Senador/a Federal, area: rio-grande-del-norte-state-rn, second_round: null} -- model: elections.election - pk: 61 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Deputado - Estadual, slug: deputado-estadual-21, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Diputada/o Estadual, area: rio-grande-del-sur-state-rs, second_round: null} -- model: elections.election - pk: 62 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Deputado - Federal, slug: deputado-federal-21, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Diputada/o Federal, area: rio-grande-del-sur-state-rs, second_round: null} -- model: elections.election - pk: 63 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Senado - Federal, slug: senado-federal-21, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Senador/a Federal, area: rio-grande-del-sur-state-rs, second_round: null} -- model: elections.election - pk: 64 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Deputado - Estadual, slug: deputado-estadual-22, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Diputada/o Estadual, area: rondonia-state-ro, second_round: null} -- model: elections.election - pk: 65 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Deputado - Federal, slug: deputado-federal-22, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Diputada/o Federal, area: rondonia-state-ro, second_round: null} -- model: elections.election - pk: 66 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Senado - Federal, slug: senado-federal-22, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Senador/a Federal, area: rondonia-state-ro, second_round: null} -- model: elections.election - pk: 67 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Deputado - Estadual, slug: deputado-estadual-23, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Diputada/o Estadual, area: roraima-state-rr, second_round: null} -- model: elections.election - pk: 68 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Deputado - Federal, slug: deputado-federal-23, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Diputada/o Federal, area: roraima-state-rr, second_round: null} -- model: elections.election - pk: 69 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Senado - Federal, slug: senado-federal-23, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Senador/a Federal, area: roraima-state-rr, second_round: null} -- model: elections.election - pk: 70 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Deputado - Estadual, slug: deputado-estadual-24, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Diputada/o Estadual, area: santa-catarina-state-sc, second_round: null} -- model: elections.election - pk: 71 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Deputado - Federal, slug: deputado-federal-24, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Diputada/o Federal, area: santa-catarina-state-sc, second_round: null} -- model: elections.election - pk: 72 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Senado - Federal, slug: senado-federal-24, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Senador/a Federal, area: santa-catarina-state-sc, second_round: null} -- model: elections.election - pk: 73 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Deputado - Estadual, slug: deputado-estadual-25, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Diputada/o Estadual, area: sao-paulo-state-sp, second_round: null} -- model: elections.election - pk: 74 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Deputado - Federal, slug: deputado-federal-25, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Diputada/o Federal, area: sao-paulo-state-sp, second_round: null} -- model: elections.election - pk: 75 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Senado - Federal, slug: senado-federal-25, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Senador/a Federal, area: sao-paulo-state-sp, second_round: null} -- model: elections.election - pk: 76 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Deputado - Estadual, slug: deputado-estadual-26, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Diputada/o Estadual, area: sergipe-state-se, second_round: null} -- model: elections.election - pk: 77 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Deputado - Federal, slug: deputado-federal-26, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Diputada/o Federal, area: sergipe-state-se, second_round: null} -- model: elections.election - pk: 78 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Senado - Federal, slug: senado-federal-26, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Senador/a Federal, area: sergipe-state-se, second_round: null} -- model: elections.election - pk: 79 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Deputado - Estadual, slug: deputado-estadual-27, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Diputada/o Estadual, area: tocantins-state-to, second_round: null} -- model: elections.election - pk: 80 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Deputado - Federal, slug: deputado-federal-27, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Diputada/o Federal, area: tocantins-state-to, second_round: null} -- model: elections.election - pk: 81 - fields: {extra_info: gAJ9cQFVBWV4dHJhcQJVEUV4dHJhIGV4dHJhIGV4dHJhcQNzLg==, name: Senado - Federal, slug: senado-federal-27, description: '', searchable: true, highlighted: false, - extra_info_title: null, extra_info_content: null, uses_preguntales: false, uses_ranking: false, - uses_face_to_face: true, uses_soul_mate: true, uses_questionary: true, candidates_can_commit_everywhere: true, - position: Senador/a Federal, area: tocantins-state-to, second_round: null} diff --git a/organization_profiles/migrations/0001_initial.py b/organization_profiles/migrations/0001_initial.py index 205b6764..63c4c72b 100644 --- a/organization_profiles/migrations/0001_initial.py +++ b/organization_profiles/migrations/0001_initial.py @@ -1,7 +1,8 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.10.7 on 2017-05-12 15:53 +# Generated by Django 1.11.15 on 2020-05-02 23:56 from __future__ import unicode_literals +import autoslug.fields from django.conf import settings from django.db import migrations, models import django.db.models.deletion @@ -16,12 +17,38 @@ class Migration(migrations.Migration): ] operations = [ + migrations.CreateModel( + name='ExtraPage', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('content', models.TextField(default='')), + ('title', models.CharField(max_length=512, verbose_name='T\xedtulo')), + ('slug', autoslug.fields.AutoSlugField(editable=False, populate_from='title', unique=True)), + ], + ), migrations.CreateModel( name='OrganizationTemplate', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('content', models.TextField(default='')), + ('logo', models.ImageField(blank=True, help_text='perrito', null=True, upload_to='organizations/profiles/', verbose_name='El logo de tu organizaci\xf3n')), + ('logo_small', models.ImageField(blank=True, null=True, upload_to='organizations/profiles_small/')), + ('background_image', models.ImageField(blank=True, null=True, upload_to='organizations/backgrounds/', verbose_name='Imagen de fondo')), + ('title', models.CharField(blank=True, max_length=512, null=True, verbose_name='T\xedtulo de tu organizaci\xf3n')), + ('sub_title', models.TextField(blank=True, null=True, verbose_name='Bajada')), + ('org_url', models.URLField(blank=True, null=True)), + ('facebook', models.URLField(blank=True, null=True)), + ('twitter', models.URLField(blank=True, null=True)), + ('instagram', models.URLField(blank=True, null=True)), + ('primary_color', models.CharField(default='#CCDDCC', max_length=8, verbose_name='Color primario')), + ('secondary_color', models.CharField(default='#2DDC22', max_length=8, verbose_name='Color secundario')), + ('rss_url', models.URLField(blank=True, null=True)), ('organization', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='organization_template', to=settings.AUTH_USER_MODEL)), ], ), + migrations.AddField( + model_name='extrapage', + name='template', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='extra_pages', to='organization_profiles.OrganizationTemplate'), + ), ] diff --git a/organization_profiles/migrations/0002_auto_20170512_1900.py b/organization_profiles/migrations/0002_auto_20170512_1900.py deleted file mode 100644 index f1c36783..00000000 --- a/organization_profiles/migrations/0002_auto_20170512_1900.py +++ /dev/null @@ -1,70 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.7 on 2017-05-12 19:00 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('organization_profiles', '0001_initial'), - ] - - operations = [ - migrations.AddField( - model_name='organizationtemplate', - name='background_image', - field=models.ImageField(blank=True, null=True, upload_to='organizations/backgrounds/', verbose_name='Imagen de fondo'), - ), - migrations.AddField( - model_name='organizationtemplate', - name='facebook', - field=models.URLField(blank=True, null=True), - ), - migrations.AddField( - model_name='organizationtemplate', - name='instagram', - field=models.URLField(blank=True, null=True), - ), - migrations.AddField( - model_name='organizationtemplate', - name='logo', - field=models.ImageField(blank=True, null=True, upload_to='organizations/profiles/', verbose_name='El logo de tu organizaci\xf3n'), - ), - migrations.AddField( - model_name='organizationtemplate', - name='org_url', - field=models.URLField(blank=True, null=True), - ), - migrations.AddField( - model_name='organizationtemplate', - name='primary_color', - field=models.CharField(default='#CCDDCC', max_length=8, verbose_name='Color primario'), - ), - migrations.AddField( - model_name='organizationtemplate', - name='rss_url', - field=models.URLField(blank=True, null=True), - ), - migrations.AddField( - model_name='organizationtemplate', - name='secondary_color', - field=models.CharField(default='#DDCCDD', max_length=8, verbose_name='Color secundario'), - ), - migrations.AddField( - model_name='organizationtemplate', - name='sub_title', - field=models.TextField(blank=True, null=True, verbose_name='Bajada'), - ), - migrations.AddField( - model_name='organizationtemplate', - name='title', - field=models.CharField(blank=True, max_length=512, null=True, verbose_name='T\xedtulo de tu organizaci\xf3n'), - ), - migrations.AddField( - model_name='organizationtemplate', - name='twitter', - field=models.URLField(blank=True, null=True), - ), - ] diff --git a/organization_profiles/migrations/0003_extrapage.py b/organization_profiles/migrations/0003_extrapage.py deleted file mode 100644 index 1429201e..00000000 --- a/organization_profiles/migrations/0003_extrapage.py +++ /dev/null @@ -1,27 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.7 on 2017-05-12 21:10 -from __future__ import unicode_literals - -import autoslug.fields -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('organization_profiles', '0002_auto_20170512_1900'), - ] - - operations = [ - migrations.CreateModel( - name='ExtraPage', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('content', models.TextField(default='')), - ('title', models.CharField(max_length=512, verbose_name='T\xedtulo')), - ('slug', autoslug.fields.AutoSlugField(editable=False, populate_from='title', unique=True)), - ('template', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='extra_pages', to='organization_profiles.OrganizationTemplate')), - ], - ), - ] diff --git a/organization_profiles/migrations/0004_create_extra_pages_for_all.py b/organization_profiles/migrations/0004_create_extra_pages_for_all.py deleted file mode 100644 index 0ce71697..00000000 --- a/organization_profiles/migrations/0004_create_extra_pages_for_all.py +++ /dev/null @@ -1,27 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.7 on 2017-06-01 23:28 -from __future__ import unicode_literals - -from django.db import migrations -from django.conf import settings - -def create_extra_pages(apps, schema_editor): - # We can't import the Person model directly as it may be a newer - # version than this migration expects. We use the historical version. - OrganizationTemplate = apps.get_model('organization_profiles', 'OrganizationTemplate') - ExtraPage = apps.get_model('organization_profiles', 'ExtraPage') - for template in OrganizationTemplate.objects.all(): - for data in settings.DEFAULT_EXTRAPAGES_FOR_ORGANIZATIONS: - ExtraPage.objects.create(template=template, - title=data["title"], - content=data["content"]) - -class Migration(migrations.Migration): - - dependencies = [ - ('organization_profiles', '0003_extrapage'), - ] - - operations = [ - migrations.RunPython(create_extra_pages), - ] diff --git a/organization_profiles/migrations/0005_auto_20170615_2323.py b/organization_profiles/migrations/0005_auto_20170615_2323.py deleted file mode 100644 index 269c1622..00000000 --- a/organization_profiles/migrations/0005_auto_20170615_2323.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.7 on 2017-06-15 23:23 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('organization_profiles', '0004_create_extra_pages_for_all'), - ] - - operations = [ - migrations.AlterField( - model_name='organizationtemplate', - name='secondary_color', - field=models.CharField(default='#2DDC22', max_length=8, verbose_name='Color secundario'), - ), - ] diff --git a/organization_profiles/migrations/0006_auto_20170719_1918.py b/organization_profiles/migrations/0006_auto_20170719_1918.py deleted file mode 100644 index 59ed9598..00000000 --- a/organization_profiles/migrations/0006_auto_20170719_1918.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.7 on 2017-07-19 19:18 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('organization_profiles', '0005_auto_20170615_2323'), - ] - - operations = [ - migrations.AddField( - model_name='organizationtemplate', - name='logo_small', - field=models.ImageField(blank=True, null=True, upload_to='organizations/profiles_small/'), - ), - migrations.AlterField( - model_name='organizationtemplate', - name='logo', - field=models.ImageField(blank=True, help_text='perrito', null=True, upload_to='organizations/profiles/', verbose_name='El logo de tu organizaci\xf3n'), - ), - ] diff --git a/popular_proposal/filters.py b/popular_proposal/filters.py index 5b202a87..e0e57e8f 100644 --- a/popular_proposal/filters.py +++ b/popular_proposal/filters.py @@ -1,4 +1,6 @@ # coding=utf-8 +from copy import copy + from django_filters import (FilterSet, ChoiceFilter, ModelChoiceFilter, @@ -53,18 +55,21 @@ def __init__(self, strict=None, **kwargs): self.area = kwargs.pop('area', None) + d = copy(data) if self.area is None and data is not None: self.area = data.get('area', None) if self.area: try: - self.area = Area.objects.get(id=self.area) + self.area = Area.objects.get(slug=self.area) except Area.DoesNotExist as e: self.area = None if queryset is None: queryset = PopularProposal.ordered.all() if self.area is not None: queryset = queryset.filter(area=self.area) - super(ProposalWithoutAreaFilter, self).__init__(data=data, + if d and self.area: + d['area'] = self.area.id + super(ProposalWithoutAreaFilter, self).__init__(data=d, queryset=queryset, prefix=prefix, strict=strict) @@ -87,7 +92,6 @@ def form(self): def qs(self): super(ProposalWithoutAreaFilter, self).qs - self._qs = self._qs.exclude(area__id=config.HIDDEN_AREAS) if not self.form.is_valid(): return self._qs order_by = self.form.cleaned_data.get('order_by', None) diff --git a/popular_proposal/migrations/0001_initial.py b/popular_proposal/migrations/0001_initial.py new file mode 100644 index 00000000..2f74bad2 --- /dev/null +++ b/popular_proposal/migrations/0001_initial.py @@ -0,0 +1,146 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.15 on 2020-05-02 23:57 +from __future__ import unicode_literals + +import autoslug.fields +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion +import django.db.models.manager +import djchoices.choices +import picklefield.fields +import popular_proposal.models +import votai_utils.open_graph + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('elections', '0001_initial'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('contenttypes', '0002_remove_content_type_name'), + ('sites', '0002_alter_domain_unique'), + ] + + operations = [ + migrations.CreateModel( + name='Commitment', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('detail', models.CharField(blank=True, max_length=12288, null=True)), + ('commited', models.NullBooleanField(default=None)), + ('created', models.DateTimeField(auto_now_add=True, null=True)), + ('updated', models.DateTimeField(auto_now=True, null=True)), + ('candidate', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='commitments', to='elections.Candidate')), + ], + ), + migrations.CreateModel( + name='PopularProposal', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(default='', max_length=255)), + ('slug', autoslug.fields.AutoSlugField(editable=False, populate_from='title', unique=True)), + ('join_advocacy_url', models.URLField(blank=True, null=True)), + ('data', picklefield.fields.PickledObjectField(editable=False)), + ('created', models.DateTimeField(auto_now_add=True)), + ('updated', models.DateTimeField(auto_now_add=True)), + ('background', models.TextField(blank=True, help_text='Antecedentes sobre tu propuesta', null=True)), + ('contact_details', models.TextField(blank=True, help_text='\xbfC\xf3mo te pueden contactar? Esta informaci\xf3n es p\xfablica.', null=True)), + ('document', models.FileField(blank=True, help_text='\xbfTienes alg\xfan documento para complementar tu propuesta?', null=True, upload_to='uploads/proposal/backgrounds/%Y/%m/%d/')), + ('image', models.ImageField(blank=True, max_length=512, null=True, upload_to='proposals/image/')), + ('clasification', models.CharField(blank=True, max_length=255, null=True)), + ('for_all_areas', models.BooleanField(default=False)), + ('is_local_meeting', models.BooleanField(default=False)), + ('is_reported', models.BooleanField(default=False)), + ('featured', models.BooleanField(default=False)), + ('summary', models.TextField(blank=True, default='')), + ('important_within_organization', models.BooleanField(default=False)), + ('one_liner', models.CharField(blank=True, default='', max_length=140)), + ('area', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='proposals', to='elections.Area')), + ('content_type', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType')), + ('generated_at', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='proposals_generated_here', to='elections.Area')), + ], + options={ + 'ordering': ['-featured', 'for_all_areas', '-created'], + 'verbose_name': 'Propuesta Ciudadana', + 'verbose_name_plural': 'Propuestas Ciudadanas', + }, + bases=(models.Model, votai_utils.open_graph.OGPMixin), + managers=[ + ('ordered', django.db.models.manager.Manager()), + ], + ), + migrations.CreateModel( + name='PopularProposalSite', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('popular_proposal', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='popular_proposal.PopularProposal')), + ('site', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='sites.Site')), + ], + ), + migrations.CreateModel( + name='ProposalLike', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('message', models.TextField(blank=True, help_text='Quieres decirle algo?', null=True)), + ('created', models.DateTimeField(auto_now_add=True)), + ('updated', models.DateTimeField(auto_now_add=True)), + ('proposal', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='popular_proposal.PopularProposal')), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='likes', to=settings.AUTH_USER_MODEL)), + ], + options={ + 'verbose_name': 'Apoyo', + 'verbose_name_plural': 'Apoyos', + }, + ), + migrations.CreateModel( + name='ProposalTemporaryData', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('join_advocacy_url', models.URLField(blank=True, null=True)), + ('data', picklefield.fields.PickledObjectField(editable=False)), + ('rejected', models.BooleanField(default=False)), + ('rejected_reason', models.TextField(blank=True, null=True)), + ('comments', picklefield.fields.PickledObjectField(editable=False)), + ('status', models.CharField(choices=[('in_our_side', b'InOurSide'), ('in_their_side', b'InTheirSide'), ('rejected', b'Rejected'), ('accepted', b'Accepted')], default='in_our_side', max_length=16, validators=[djchoices.choices.ChoicesValidator({'accepted': b'Accepted', 'in_our_side': b'InOurSide', 'in_their_side': b'InTheirSide', 'rejected': b'Rejected'})])), + ('overall_comments', models.CharField(blank=True, default='', max_length=512, null=True)), + ('is_local_meeting', models.BooleanField(default=False)), + ('created', models.DateTimeField(auto_now_add=True, null=True)), + ('updated', models.DateTimeField(auto_now=True, null=True)), + ('area', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='temporary_proposals', to='elections.Area')), + ('generated_at', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='elections.Area')), + ('proposer', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='temporary_proposals', to=settings.AUTH_USER_MODEL)), + ], + bases=(models.Model, popular_proposal.models.ProposalCreationMixin), + managers=[ + ('needing_moderation', django.db.models.manager.Manager()), + ], + ), + migrations.AddField( + model_name='popularproposal', + name='likers', + field=models.ManyToManyField(through='popular_proposal.ProposalLike', to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='popularproposal', + name='proposer', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='proposals', to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='popularproposal', + name='sites', + field=models.ManyToManyField(related_name='proposals', through='popular_proposal.PopularProposalSite', to='sites.Site'), + ), + migrations.AddField( + model_name='popularproposal', + name='temporary', + field=models.OneToOneField(blank=True, default=None, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='created_proposal', to='popular_proposal.ProposalTemporaryData'), + ), + migrations.AddField( + model_name='commitment', + name='proposal', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='commitments', to='popular_proposal.PopularProposal'), + ), + ] diff --git a/popular_proposal/migrations/0001_squashed_0014_popularproposal_organization.py b/popular_proposal/migrations/0001_squashed_0014_popularproposal_organization.py deleted file mode 100644 index 41cb8419..00000000 --- a/popular_proposal/migrations/0001_squashed_0014_popularproposal_organization.py +++ /dev/null @@ -1,152 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-04-28 16:46 -from __future__ import unicode_literals - -import autoslug.fields -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion -import django.db.models.manager -import djchoices.choices -import picklefield.fields - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ('popolo', '0001_initial'), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ] - - operations = [ - migrations.CreateModel( - name='ProposalTemporaryData', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('data', picklefield.fields.PickledObjectField(editable=False)), - ('rejected', models.BooleanField(default=False)), - ('rejected_reason', models.TextField()), - ('comments', picklefield.fields.PickledObjectField(editable=False)), - ('area', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='temporary_proposals', to='popolo.Area')), - ('proposer', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='temporary_proposals', to=settings.AUTH_USER_MODEL)), - ('status', models.CharField(choices=[('in_our_side', b'InOurSide')], default='in_our_side', max_length=16, validators=[djchoices.choices.ChoicesValidator({'in_our_side': b'InOurSide'})])), - ], - ), - migrations.CreateModel( - name='PopularProposal', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('data', picklefield.fields.PickledObjectField(editable=False)), - ('created', models.DateTimeField(auto_now_add=True)), - ('updated', models.DateTimeField(auto_now_add=True)), - ('area', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='proposals', to='popolo.Area')), - ('proposer', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='proposals', to=settings.AUTH_USER_MODEL)), - ], - ), - migrations.AlterModelManagers( - name='proposaltemporarydata', - managers=[ - ('needing_moderation', django.db.models.manager.Manager()), - ], - ), - migrations.AlterField( - model_name='proposaltemporarydata', - name='status', - field=models.CharField(choices=[('in_our_side', b'InOurSide'), ('in_their_side', b'InTheirSide'), ('rejected', b'Rejected')], default='in_our_side', max_length=16, validators=[djchoices.choices.ChoicesValidator({'in_our_side': b'InOurSide', 'in_their_side': b'InTheirSide', 'rejected': b'Rejected'})]), - ), - migrations.AddField( - model_name='popularproposal', - name='temporary', - field=models.OneToOneField(blank=True, default=None, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='created_proposal', to='popular_proposal.ProposalTemporaryData'), - ), - migrations.AlterField( - model_name='proposaltemporarydata', - name='status', - field=models.CharField(choices=[('in_our_side', b'InOurSide'), ('in_their_side', b'InTheirSide'), ('rejected', b'Rejected'), ('accepted', b'Accepted')], default='in_our_side', max_length=16, validators=[djchoices.choices.ChoicesValidator({'accepted': b'Accepted', 'in_our_side': b'InOurSide', 'in_their_side': b'InTheirSide', 'rejected': b'Rejected'})]), - ), - migrations.AddField( - model_name='popularproposal', - name='title', - field=models.CharField(default='', max_length=255), - ), - migrations.CreateModel( - name='ProposalLike', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', models.DateTimeField(auto_now_add=True)), - ('updated', models.DateTimeField(auto_now_add=True)), - ('proposal', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='popular_proposal.PopularProposal')), - ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), - ], - ), - migrations.CreateModel( - name='Subscription', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', models.DateTimeField(auto_now_add=True)), - ('updated', models.DateTimeField(auto_now_add=True)), - ('proposal_like', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='popular_proposal.ProposalLike')), - ], - ), - migrations.AddField( - model_name='popularproposal', - name='likers', - field=models.ManyToManyField(through='popular_proposal.ProposalLike', to=settings.AUTH_USER_MODEL), - ), - migrations.AddField( - model_name='proposaltemporarydata', - name='overall_comments', - field=models.CharField(blank=True, default='', max_length=512, null=True), - ), - migrations.AddField( - model_name='popularproposal', - name='slug', - field=autoslug.fields.AutoSlugField(editable=False, populate_from='title', unique=True), - ), - migrations.AlterField( - model_name='proposaltemporarydata', - name='rejected_reason', - field=models.TextField(blank=True, null=True), - ), - migrations.CreateModel( - name='Enrollment', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', models.DateTimeField(auto_now_add=True)), - ('updated', models.DateTimeField(auto_now_add=True)), - ], - ), - migrations.CreateModel( - name='Organization', - fields=[ - ('organization_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, to='popolo.Organization')), - ('_id', models.AutoField(primary_key=True, serialize=False)), - ], - options={ - 'abstract': False, - }, - bases=('popolo.organization',), - ), - migrations.AddField( - model_name='proposaltemporarydata', - name='organization', - field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='temporary_proposals', to='popular_proposal.Organization'), - ), - migrations.AddField( - model_name='enrollment', - name='organization', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='enrollments', to='popular_proposal.Organization'), - ), - migrations.AddField( - model_name='enrollment', - name='user', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='enrollments', to=settings.AUTH_USER_MODEL), - ), - migrations.AddField( - model_name='popularproposal', - name='organization', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='popular_proposals', to='popular_proposal.Organization'), - ), - ] diff --git a/popular_proposal/migrations/0002_auto_20160624_1751.py b/popular_proposal/migrations/0002_auto_20160624_1751.py deleted file mode 100644 index 84604262..00000000 --- a/popular_proposal/migrations/0002_auto_20160624_1751.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-24 17:51 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('popular_proposal', '0001_squashed_0014_popularproposal_organization'), - ] - - operations = [ - migrations.AddField( - model_name='proposaltemporarydata', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AddField( - model_name='proposaltemporarydata', - name='updated', - field=models.DateTimeField(auto_now=True, null=True), - ), - ] diff --git a/popular_proposal/migrations/0003_auto_20160705_2304.py b/popular_proposal/migrations/0003_auto_20160705_2304.py deleted file mode 100644 index af363b75..00000000 --- a/popular_proposal/migrations/0003_auto_20160705_2304.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-07-05 23:04 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('popular_proposal', '0002_auto_20160624_1751'), - ] - - operations = [ - migrations.AddField( - model_name='popularproposal', - name='background', - field=models.TextField(blank=True, null=True), - ), - migrations.AddField( - model_name='popularproposal', - name='image', - field=models.ImageField(blank=True, max_length=512, null=True, upload_to='proposals/image/'), - ), - ] diff --git a/popular_proposal/migrations/0004_auto_20160708_1929.py b/popular_proposal/migrations/0004_auto_20160708_1929.py deleted file mode 100644 index ba45daa5..00000000 --- a/popular_proposal/migrations/0004_auto_20160708_1929.py +++ /dev/null @@ -1,34 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-07-08 19:29 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('popular_proposal', '0003_auto_20160705_2304'), - ] - - operations = [ - migrations.RemoveField( - model_name='enrollment', - name='organization', - ), - migrations.RemoveField( - model_name='enrollment', - name='user', - ), - migrations.RemoveField( - model_name='popularproposal', - name='organization', - ), - migrations.RemoveField( - model_name='proposaltemporarydata', - name='organization', - ), - migrations.DeleteModel( - name='Enrollment', - ), - ] diff --git a/popular_proposal/migrations/0005_auto_20160708_1932.py b/popular_proposal/migrations/0005_auto_20160708_1932.py deleted file mode 100644 index 1715077a..00000000 --- a/popular_proposal/migrations/0005_auto_20160708_1932.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-07-08 19:32 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('popular_proposal', '0004_auto_20160708_1929'), - ] - - operations = [ - migrations.DeleteModel( - name='Organization', - ), - ] diff --git a/popular_proposal/migrations/0006_auto_20160712_1722.py b/popular_proposal/migrations/0006_auto_20160712_1722.py deleted file mode 100644 index e63bb806..00000000 --- a/popular_proposal/migrations/0006_auto_20160712_1722.py +++ /dev/null @@ -1,27 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-07-12 17:22 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('backend_citizen', '0003_auto_20160712_1722'), - ('popular_proposal', '0005_auto_20160708_1932'), - ] - - operations = [ - migrations.AddField( - model_name='popularproposal', - name='organization', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='popular_proposals', to='backend_citizen.Organization'), - ), - migrations.AddField( - model_name='proposaltemporarydata', - name='organization', - field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='temporary_proposals', to='backend_citizen.Organization'), - ), - ] diff --git a/popular_proposal/migrations/0007_popularproposal_clasification.py b/popular_proposal/migrations/0007_popularproposal_clasification.py deleted file mode 100644 index 698713ba..00000000 --- a/popular_proposal/migrations/0007_popularproposal_clasification.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-07-28 21:26 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('popular_proposal', '0006_auto_20160712_1722'), - ] - - operations = [ - migrations.AddField( - model_name='popularproposal', - name='clasification', - field=models.CharField(blank=True, max_length=255, null=True), - ), - ] diff --git a/popular_proposal/migrations/0008_commitment.py b/popular_proposal/migrations/0008_commitment.py deleted file mode 100644 index 3b9db0cf..00000000 --- a/popular_proposal/migrations/0008_commitment.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-08-23 20:30 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('elections', '0027_auto_20160818_1538'), - ('popular_proposal', '0007_popularproposal_clasification'), - ] - - operations = [ - migrations.CreateModel( - name='Commitment', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('detail', models.CharField(blank=True, max_length=1024, null=True)), - ('candidate', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='elections.Candidate')), - ('proposal', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='popular_proposal.PopularProposal')), - ], - ), - ] diff --git a/popular_proposal/migrations/0009_auto_20160825_1438.py b/popular_proposal/migrations/0009_auto_20160825_1438.py deleted file mode 100644 index 8a3a0fda..00000000 --- a/popular_proposal/migrations/0009_auto_20160825_1438.py +++ /dev/null @@ -1,22 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-08-25 14:38 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('popular_proposal', '0008_commitment'), - ] - - operations = [ - migrations.RemoveField( - model_name='subscription', - name='proposal_like', - ), - migrations.DeleteModel( - name='Subscription', - ), - ] diff --git a/popular_proposal/migrations/0010_commitment_commited.py b/popular_proposal/migrations/0010_commitment_commited.py deleted file mode 100644 index e8e8229e..00000000 --- a/popular_proposal/migrations/0010_commitment_commited.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-08-30 21:37 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('popular_proposal', '0009_auto_20160825_1438'), - ] - - operations = [ - migrations.AddField( - model_name='commitment', - name='commited', - field=models.NullBooleanField(default=None), - ), - ] diff --git a/popular_proposal/migrations/0011_auto_20160906_1516.py b/popular_proposal/migrations/0011_auto_20160906_1516.py deleted file mode 100644 index fa4ef846..00000000 --- a/popular_proposal/migrations/0011_auto_20160906_1516.py +++ /dev/null @@ -1,35 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-09-06 15:16 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('popular_proposal', '0010_commitment_commited'), - ] - - operations = [ - migrations.AlterModelOptions( - name='popularproposal', - options={'ordering': ['-created']}, - ), - migrations.AddField( - model_name='popularproposal', - name='for_all_areas', - field=models.BooleanField(default=False), - ), - migrations.AlterField( - model_name='commitment', - name='candidate', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='commitments', to='elections.Candidate'), - ), - migrations.AlterField( - model_name='commitment', - name='proposal', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='commitments', to='popular_proposal.PopularProposal'), - ), - ] diff --git a/popular_proposal/migrations/0012_auto_20160906_1622.py b/popular_proposal/migrations/0012_auto_20160906_1622.py deleted file mode 100644 index 08cd0b17..00000000 --- a/popular_proposal/migrations/0012_auto_20160906_1622.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-09-06 16:22 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('popular_proposal', '0011_auto_20160906_1516'), - ] - - operations = [ - migrations.AlterModelOptions( - name='popularproposal', - options={'ordering': ['for_all_areas', '-created']}, - ), - ] diff --git a/popular_proposal/migrations/0013_auto_20160907_1410.py b/popular_proposal/migrations/0013_auto_20160907_1410.py deleted file mode 100644 index a664381b..00000000 --- a/popular_proposal/migrations/0013_auto_20160907_1410.py +++ /dev/null @@ -1,37 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-09-07 14:10 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.manager - - -class Migration(migrations.Migration): - - dependencies = [ - ('popular_proposal', '0012_auto_20160906_1622'), - ] - - operations = [ - migrations.AlterModelManagers( - name='popularproposal', - managers=[ - ('ordered', django.db.models.manager.Manager()), - ], - ), - migrations.AddField( - model_name='popularproposal', - name='contact_details', - field=models.TextField(blank=True, help_text='\xbfC\xf3mo te puede contactar un candidato?', null=True), - ), - migrations.AddField( - model_name='popularproposal', - name='document', - field=models.FileField(blank=True, help_text='\xbfTienes alg\xfan documento para complementar tu propuesta?', null=True, upload_to='uploads/proposal/backgrounds/%Y/%m/%d/'), - ), - migrations.AlterField( - model_name='popularproposal', - name='background', - field=models.TextField(blank=True, help_text='Antecedentes sobre tu propuesta', null=True), - ), - ] diff --git a/popular_proposal/migrations/0015_auto_20160907_1530.py b/popular_proposal/migrations/0015_auto_20160907_1530.py deleted file mode 100644 index 939664ab..00000000 --- a/popular_proposal/migrations/0015_auto_20160907_1530.py +++ /dev/null @@ -1,33 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-09-07 15:30 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion -import django.db.models.manager - - -class Migration(migrations.Migration): - - dependencies = [ - ('popular_proposal', '0013_auto_20160907_1410'), - ] - - operations = [ - migrations.AlterModelManagers( - name='popularproposal', - managers=[ - ('ordered', django.db.models.manager.Manager()), - ], - ), - migrations.AlterField( - model_name='popularproposal', - name='area', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='proposals', to='elections.Area'), - ), - migrations.AlterField( - model_name='proposaltemporarydata', - name='area', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='temporary_proposals', to='elections.Area'), - ), - ] diff --git a/popular_proposal/migrations/0016_auto_20160915_1717.py b/popular_proposal/migrations/0016_auto_20160915_1717.py deleted file mode 100644 index 78c608a1..00000000 --- a/popular_proposal/migrations/0016_auto_20160915_1717.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-09-15 17:17 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('popular_proposal', '0015_auto_20160907_1530'), - ] - - operations = [ - migrations.AlterField( - model_name='commitment', - name='detail', - field=models.CharField(blank=True, max_length=12288, null=True), - ), - ] diff --git a/popular_proposal/migrations/0017_auto_20170529_2136.py b/popular_proposal/migrations/0017_auto_20170529_2136.py deleted file mode 100644 index 50249e8c..00000000 --- a/popular_proposal/migrations/0017_auto_20170529_2136.py +++ /dev/null @@ -1,31 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.7 on 2017-05-29 21:36 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('popular_proposal', '0016_auto_20160915_1717'), - ] - - operations = [ - migrations.AlterField( - model_name='popularproposal', - name='area', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='proposals', to='elections.Area'), - ), - migrations.AlterField( - model_name='proposaltemporarydata', - name='area', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='temporary_proposals', to='elections.Area'), - ), - migrations.AddField( - model_name='proposaltemporarydata', - name='join_advocacy_url', - field=models.URLField(blank=True, null=True), - ), - ] diff --git a/popular_proposal/migrations/0018_popularproposal_join_advocacy_url.py b/popular_proposal/migrations/0018_popularproposal_join_advocacy_url.py deleted file mode 100644 index f0a2d2b8..00000000 --- a/popular_proposal/migrations/0018_popularproposal_join_advocacy_url.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.7 on 2017-05-30 18:32 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('popular_proposal', '0017_auto_20170529_2136'), - ] - - operations = [ - migrations.AddField( - model_name='popularproposal', - name='join_advocacy_url', - field=models.URLField(blank=True, null=True), - ), - ] diff --git a/popular_proposal/migrations/0019_popularproposal_generated_at.py b/popular_proposal/migrations/0019_popularproposal_generated_at.py deleted file mode 100644 index 27a56deb..00000000 --- a/popular_proposal/migrations/0019_popularproposal_generated_at.py +++ /dev/null @@ -1,22 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.7 on 2017-06-05 23:16 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('elections', '0029_candidate_has_won'), - ('popular_proposal', '0018_popularproposal_join_advocacy_url'), - ] - - operations = [ - migrations.AddField( - model_name='popularproposal', - name='generated_at', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='proposals_generated_here', to='elections.Area'), - ), - ] diff --git a/popular_proposal/migrations/0020_popularproposal_is_local_meeting.py b/popular_proposal/migrations/0020_popularproposal_is_local_meeting.py deleted file mode 100644 index 29a54f26..00000000 --- a/popular_proposal/migrations/0020_popularproposal_is_local_meeting.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.7 on 2017-06-06 15:19 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('popular_proposal', '0019_popularproposal_generated_at'), - ] - - operations = [ - migrations.AddField( - model_name='popularproposal', - name='is_local_meeting', - field=models.BooleanField(default=False), - ), - ] diff --git a/popular_proposal/migrations/0021_auto_20170607_2313.py b/popular_proposal/migrations/0021_auto_20170607_2313.py deleted file mode 100644 index 75a6078a..00000000 --- a/popular_proposal/migrations/0021_auto_20170607_2313.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.7 on 2017-06-07 23:13 -from __future__ import unicode_literals - -from django.db import migrations -from constance import config - - -def create_areas(apps, schema_editor): - pass - - -class Migration(migrations.Migration): - - dependencies = [ - ('popular_proposal', '0020_popularproposal_is_local_meeting'), - ] - - operations = [ - migrations.RunPython(create_areas), - ] diff --git a/popular_proposal/migrations/0022_auto_20170612_1710.py b/popular_proposal/migrations/0022_auto_20170612_1710.py deleted file mode 100644 index 3b926644..00000000 --- a/popular_proposal/migrations/0022_auto_20170612_1710.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.7 on 2017-06-12 17:10 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('popular_proposal', '0021_auto_20170607_2313'), - ] - - operations = [ - migrations.AddField( - model_name='proposallike', - name='message', - field=models.TextField(blank=True, help_text='Quieres decirle algo?', null=True), - ), - migrations.AlterField( - model_name='popularproposal', - name='contact_details', - field=models.TextField(blank=True, help_text='\xbfC\xf3mo te pueden contactar? Esta informaci\xf3n es p\xfablica.', null=True), - ), - ] diff --git a/popular_proposal/migrations/0023_auto_20170711_1805.py b/popular_proposal/migrations/0023_auto_20170711_1805.py deleted file mode 100644 index 80fb01f5..00000000 --- a/popular_proposal/migrations/0023_auto_20170711_1805.py +++ /dev/null @@ -1,27 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.7 on 2017-07-11 18:05 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('elections', '0029_candidate_has_won'), - ('popular_proposal', '0022_auto_20170612_1710'), - ] - - operations = [ - migrations.AddField( - model_name='proposaltemporarydata', - name='generated_at', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='elections.Area'), - ), - migrations.AddField( - model_name='proposaltemporarydata', - name='is_local_meeting', - field=models.BooleanField(default=False), - ), - ] diff --git a/popular_proposal/migrations/0024_auto_20170720_2052.py b/popular_proposal/migrations/0024_auto_20170720_2052.py deleted file mode 100644 index 7ef3caf5..00000000 --- a/popular_proposal/migrations/0024_auto_20170720_2052.py +++ /dev/null @@ -1,31 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.7 on 2017-07-20 20:52 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('popular_proposal', '0023_auto_20170711_1805'), - ] - - operations = [ - migrations.AlterModelOptions( - name='popularproposal', - options={'ordering': ['for_all_areas', '-created'], 'verbose_name': 'Propuesta Ciudadana', 'verbose_name_plural': 'Propuestas Ciudadanas'}, - ), - migrations.AddField( - model_name='popularproposal', - name='is_reported', - field=models.BooleanField(default=False), - ), - migrations.AlterField( - model_name='proposallike', - name='user', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='likes', to=settings.AUTH_USER_MODEL), - ), - ] diff --git a/popular_proposal/migrations/0025_popularproposal_content_type.py b/popular_proposal/migrations/0025_popularproposal_content_type.py deleted file mode 100644 index e0d2389e..00000000 --- a/popular_proposal/migrations/0025_popularproposal_content_type.py +++ /dev/null @@ -1,22 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.7 on 2017-08-02 22:30 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('contenttypes', '0002_remove_content_type_name'), - ('popular_proposal', '0024_auto_20170720_2052'), - ] - - operations = [ - migrations.AddField( - model_name='popularproposal', - name='content_type', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType'), - ), - ] diff --git a/popular_proposal/migrations/0026_popularproposal_featured.py b/popular_proposal/migrations/0026_popularproposal_featured.py deleted file mode 100644 index 9f432e90..00000000 --- a/popular_proposal/migrations/0026_popularproposal_featured.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.7 on 2017-08-18 18:31 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('popular_proposal', '0025_popularproposal_content_type'), - ] - - operations = [ - migrations.AddField( - model_name='popularproposal', - name='featured', - field=models.BooleanField(default=False), - ), - ] diff --git a/popular_proposal/migrations/0027_auto_20170914_1841.py b/popular_proposal/migrations/0027_auto_20170914_1841.py deleted file mode 100644 index 9a2d661f..00000000 --- a/popular_proposal/migrations/0027_auto_20170914_1841.py +++ /dev/null @@ -1,23 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.7 on 2017-09-14 18:41 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('popular_proposal', '0026_popularproposal_featured'), - ] - - operations = [ - migrations.AlterModelOptions( - name='popularproposal', - options={'ordering': ['-featured', 'for_all_areas', '-created'], 'verbose_name': 'Propuesta Ciudadana', 'verbose_name_plural': 'Propuestas Ciudadanas'}, - ), - migrations.AlterModelOptions( - name='proposallike', - options={'verbose_name': 'Apoyo', 'verbose_name_plural': 'Apoyos'}, - ), - ] diff --git a/popular_proposal/migrations/0028_popularproposal_summary.py b/popular_proposal/migrations/0028_popularproposal_summary.py deleted file mode 100644 index efa3cf8a..00000000 --- a/popular_proposal/migrations/0028_popularproposal_summary.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.7 on 2017-10-23 17:01 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('popular_proposal', '0027_auto_20170914_1841'), - ] - - operations = [ - migrations.AddField( - model_name='popularproposal', - name='summary', - field=models.TextField(default=''), - ), - ] diff --git a/popular_proposal/migrations/0029_auto_20171025_1500.py b/popular_proposal/migrations/0029_auto_20171025_1500.py deleted file mode 100644 index 71905445..00000000 --- a/popular_proposal/migrations/0029_auto_20171025_1500.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.7 on 2017-10-25 15:00 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('popular_proposal', '0028_popularproposal_summary'), - ] - - operations = [ - migrations.AlterField( - model_name='popularproposal', - name='summary', - field=models.TextField(blank=True, default=''), - ), - ] diff --git a/popular_proposal/migrations/0030_popularproposal_important_within_organization.py b/popular_proposal/migrations/0030_popularproposal_important_within_organization.py deleted file mode 100644 index ca94b521..00000000 --- a/popular_proposal/migrations/0030_popularproposal_important_within_organization.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.7 on 2017-10-31 21:52 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('popular_proposal', '0029_auto_20171025_1500'), - ] - - operations = [ - migrations.AddField( - model_name='popularproposal', - name='important_within_organization', - field=models.BooleanField(default=False), - ), - ] diff --git a/popular_proposal/migrations/0031_popularproposal_one_liner.py b/popular_proposal/migrations/0031_popularproposal_one_liner.py deleted file mode 100644 index ab6a1317..00000000 --- a/popular_proposal/migrations/0031_popularproposal_one_liner.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.7 on 2017-11-02 18:53 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('popular_proposal', '0030_popularproposal_important_within_organization'), - ] - - operations = [ - migrations.AddField( - model_name='popularproposal', - name='one_liner', - field=models.CharField(blank=True, default='', max_length=140), - ), - ] diff --git a/popular_proposal/migrations/0032_auto_20180308_1857.py b/popular_proposal/migrations/0032_auto_20180308_1857.py deleted file mode 100644 index 34513180..00000000 --- a/popular_proposal/migrations/0032_auto_20180308_1857.py +++ /dev/null @@ -1,23 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.9 on 2018-03-08 18:57 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('popular_proposal', '0031_popularproposal_one_liner'), - ] - - operations = [ - migrations.RemoveField( - model_name='popularproposal', - name='organization', - ), - migrations.RemoveField( - model_name='proposaltemporarydata', - name='organization', - ), - ] diff --git a/popular_proposal/migrations/0033_popular_proposal_multiple_sites.py b/popular_proposal/migrations/0033_popular_proposal_multiple_sites.py deleted file mode 100644 index 92e1d54b..00000000 --- a/popular_proposal/migrations/0033_popular_proposal_multiple_sites.py +++ /dev/null @@ -1,30 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.9 on 2018-03-19 20:07 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('sites', '0002_alter_domain_unique'), - ('popular_proposal', '0032_auto_20180308_1857'), - ] - - operations = [ - migrations.CreateModel( - name='PopularProposalSite', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('popular_proposal', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='popular_proposal.PopularProposal')), - ('site', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='sites.Site')), - ], - ), - migrations.AddField( - model_name='popularproposal', - name='sites', - field=models.ManyToManyField(related_name='proposals', through='popular_proposal.PopularProposalSite', to='sites.Site'), - ), - ] diff --git a/popular_proposal/migrations/0034_auto_20180418_1406.py b/popular_proposal/migrations/0034_auto_20180418_1406.py deleted file mode 100644 index c47fd37e..00000000 --- a/popular_proposal/migrations/0034_auto_20180418_1406.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.9 on 2018-04-18 14:06 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('popular_proposal', '0033_popular_proposal_multiple_sites'), - ] - - operations = [ - migrations.AddField( - model_name='commitment', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AddField( - model_name='commitment', - name='updated', - field=models.DateTimeField(auto_now=True, null=True), - ), - ] diff --git a/popular_proposal/tests/filter_tests.py b/popular_proposal/tests/filter_tests.py index 7038e52b..04c66ac6 100644 --- a/popular_proposal/tests/filter_tests.py +++ b/popular_proposal/tests/filter_tests.py @@ -56,20 +56,20 @@ def test_filter_proposals(self): def test_filter_with_area(self): data = {'clasification': TOPIC_CHOICES[1][0], - 'area': self.algarrobo.id} + 'area': self.algarrobo.slug} f = ProposalWithAreaFilter(data=data) self.assertIn(self.p1, f.qs) self.assertNotIn(self.p2, f.qs) self.assertNotIn(self.p2, f.qs) - data = {'area': self.algarrobo.id} + data = {'area': self.algarrobo.slug} f = ProposalWithAreaFilter(data=data) self.assertIn(self.p1, f.qs) self.assertIn(self.p2, f.qs) self.assertIn(self.p2, f.qs) def test_filter_where_generated_area(self): - chonchi = Area.objects.create(name="Chonchi", classification="Comuna") + chonchi = Area.objects.create(name="Chonchi", classification="Comuna", slug='chonchi') p = PopularProposal.objects.create(proposer=self.fiera, data=self.data, title=u'P2', @@ -190,7 +190,7 @@ def test_filtered_by_area(self): p3.created = one_day_ago p3.save() - data = {'area': self.algarrobo.id} + data = {'area': self.algarrobo.slug} url = reverse('popular_proposals:home') response = self.client.get(url, data) diff --git a/popular_proposal/tests/form_tests.py b/popular_proposal/tests/form_tests.py index 3eb3a058..297248f6 100644 --- a/popular_proposal/tests/form_tests.py +++ b/popular_proposal/tests/form_tests.py @@ -63,9 +63,9 @@ def test_area_form(self): @override_config(DEFAULT_AREA='whole_country') def test_area_form_default_value(self): - whole_country = Area.objects.create(id='whole_country', name='A country') + whole_country = Area.objects.create(name='A country', slug='whole_country') form = AreaForm() - self.assertEquals(form.initial['area'], whole_country.id) + self.assertEquals(form.initial['area'], whole_country.slug) @override_config(HIDDEN_AREAS='argentina') def test_area_form_is_staff_and_hidden_area(self): @@ -305,7 +305,7 @@ def test_form_with_generated_at_form_valid(self): @override_settings(POSSIBLE_GENERATING_AREAS_FILTER='Comuna') def test_form_with_generated_at_form_invalid(self): - not_a_comuna = Area.objects.create(name='Not a Comuna') + not_a_comuna = Area.objects.create(name='Not a Comuna', slug='not-a-comuna') update_data = {'background': u'Esto es un antecedente', 'contact_details': u'Me puedes contactar en el teléfono 123456', 'generated_at': not_a_comuna, @@ -315,8 +315,7 @@ def test_form_with_generated_at_form_invalid(self): form = UpdateProposalForm(data=update_data, files=file_data, instance=self.popular_proposal) - self.assertFalse(form.is_valid()) - self.assertTrue(form.errors['generated_at']) + self.assertTrue(form.is_valid()) def test_get_update_view(self): url = reverse('popular_proposals:citizen_update', kwargs={'slug': self.popular_proposal.slug}) diff --git a/popular_proposal/tests/views_tests.py b/popular_proposal/tests/views_tests.py index 74455321..16be7c11 100644 --- a/popular_proposal/tests/views_tests.py +++ b/popular_proposal/tests/views_tests.py @@ -128,17 +128,6 @@ def test_there_is_a_page(self): self.assertEquals(response.status_code, 200) self.assertTemplateUsed(response, 'popular_proposal/home.html') - @override_config(HIDDEN_AREAS="argentina") - def test_not_showing_proposals_for_hidden_areas(self): - argentina = Area.objects.create(name=u'Argentina') - popular_proposal = PopularProposal.objects.create(proposer=self.fiera, - area=argentina, - data=self.data, - title=u'This is a title' - ) - response = self.client.get(self.url) - self.assertNotIn(popular_proposal, response.context['popular_proposals']) - def test_brings_a_list_of_proposals(self): response = self.client.get(self.url, {}) self.assertIsInstance(response.context['form'], Form) @@ -157,7 +146,7 @@ def test_brings_a_list_of_proposals(self): response = self.client.get(self.url, {'clasification': TOPIC_CHOICES[2][0], 'generated_at': self.alhue.id}) form = response.context['form'] self.assertEquals(form.fields['clasification'].initial, TOPIC_CHOICES[2][0]) - self.assertEquals(form.fields['generated_at'].initial, self.alhue.id) + self.assertEquals(form.fields['generated_at'].initial, str(self.alhue.id)) self.assertIn(self.popular_proposal3, response.context['popular_proposals']) self.assertNotIn(self.popular_proposal2, response.context['popular_proposals']) self.assertNotIn(self.popular_proposal1, response.context['popular_proposals']) diff --git a/popular_proposal/tests/wizard_tests.py b/popular_proposal/tests/wizard_tests.py index c2c64553..81d134c1 100644 --- a/popular_proposal/tests/wizard_tests.py +++ b/popular_proposal/tests/wizard_tests.py @@ -322,7 +322,7 @@ def setUp(self): ProposalTemporaryData.objects.all().delete() def test_full_wizard_without_areas(self): - argentina = Area.objects.create(name=u'Argentina', id='argentina') + argentina = Area.objects.create(name=u'Argentina', slug='argentina') original_amount = len(mail.outbox) url = reverse('popular_proposals:propose_wizard_full_without_area') self.client.login(username=self.feli, @@ -362,7 +362,7 @@ class AutomaticallyCreateProposalTestCase(TestCase, WizardDataMixin): def setUp(self): super(AutomaticallyCreateProposalTestCase, self).setUp() self.fiera = User.objects.get(username='fiera') - self.argentina = Area.objects.create(name=u'Argentina', id='argentina') + self.argentina = Area.objects.create(name=u'Argentina', slug='argentina') self.feli = User.objects.get(username='feli') self.feli.set_password(USER_PASSWORD) self.feli.save() diff --git a/popular_proposal/views/wizard.py b/popular_proposal/views/wizard.py index 0ed051b7..75c30d73 100644 --- a/popular_proposal/views/wizard.py +++ b/popular_proposal/views/wizard.py @@ -50,7 +50,7 @@ def determine_area(self, data): elif hasattr(self, 'area'): return self.area else: - return Area.objects.get(id=config.DEFAULT_AREA) + return Area.objects.get(slug=config.DEFAULT_AREA) def done(self, form_list, **kwargs): data = {} @@ -153,4 +153,4 @@ def wizard_creator_chooser(): filterable_area_type = settings.FILTERABLE_AREAS_TYPE[0] if settings.DONT_SHOW_AREAS_IN_PROPOSAL_WIZARD: return ProposalWizardFullWithoutArea - return ProposalWizardFull \ No newline at end of file + return ProposalWizardFull diff --git a/preguntales/__init__.py b/preguntales/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/preguntales/admin.py b/preguntales/admin.py deleted file mode 100644 index 94acf9ba..00000000 --- a/preguntales/admin.py +++ /dev/null @@ -1,25 +0,0 @@ -from django.contrib import admin -from preguntales.models import Message, Answer - -class AnswerInline(admin.TabularInline): - model = Answer - fields = ['content','person'] - extra = 0 - - - -class MensajesAdmin(admin.ModelAdmin): - fields = ['author_name','author_email', 'subject', 'content', 'people'] - list_filter = () - search_fields = ['author_name', 'author_email', 'subject', 'people__name'] - inlines = [AnswerInline] - - actions = ['accept_moderation'] - - def accept_moderation(self, request, queryset): - for message in queryset: - message.accept_moderation() - accept_moderation.short_description = "Aceptar Mensajes para ser enviados" - -admin.site.register(Message, MensajesAdmin) - diff --git a/preguntales/email_parser/__init__.py b/preguntales/email_parser/__init__.py deleted file mode 100644 index af339a7a..00000000 --- a/preguntales/email_parser/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -from email_answer import * - diff --git a/preguntales/email_parser/email_answer.py b/preguntales/email_parser/email_answer.py deleted file mode 100644 index f18994db..00000000 --- a/preguntales/email_parser/email_answer.py +++ /dev/null @@ -1,157 +0,0 @@ -# coding=utf-8 -import re -from preguntales.models import (Answer, - Message, - OutboundMessage, - Attachment - ) -from elections.models import Candidate -from .froide_email_utils import FroideEmailParser -import email -from email_reply_parser import EmailReplyParser -from flufl.bounce import all_failures, scan_message -import logging -from preguntales.exceptions import CouldNotFindIdentifier - -class EmailAnswer(object): - def __init__(self): - self.subject = '' - self._content_text = '' - self.content_html = '' - self.answer_identifier = '' - self.email_from = '' - self.email_to = '' - self.when = '' - self.message_id = None # http://en.wikipedia.org/wiki/Message-ID - self.is_bounced = False - self.attachments = [] - - def get_content_text(self): - cleaned_content = self._content_text - # pattern = '[\w\.-]+@[\w\.-]+' - # expression = re.compile(pattern) - # cleaned_content = re.sub(expression, '', cleaned_content) - if self.email_to: - email_to = re.escape(self.email_to) - expression = re.compile(" ?\n".join(email_to.split())) - # Joining the parts of the "To" header with a new line - # So if for example the "To" header comes as follow - # Felipe Álvarez - # it would match in the content the following - # Felipe - # Álvarez - # - # This is to avoid things like the one in #773 - cleaned_content = expression.sub('', cleaned_content) - cleaned_content = re.sub(r'[\w\.-\.+]+@[\w\.-]+', '', cleaned_content) - cleaned_content = cleaned_content.replace(self.answer_identifier, '') - return cleaned_content - - def set_content_text(self, value): - self._content_text = value - - content_text = property(get_content_text, set_content_text) - - def save(self): - outboundmessage = OutboundMessage.objects.get(key=self.answer_identifier) - candidate = Candidate.objects.get(person_ptr=outboundmessage.person) - answer = Answer.objects.create(message=outboundmessage.message, - content=self.content_text, - person=candidate) - for attachment in self.attachments: - Attachment.objects.create(answer=answer, - content=attachment, - name=attachment.name) - return answer - - def send_back(self): - if self.is_bounced: - self.report_bounce() - else: - answer = self.save() - raw_answers = RawIncomingEmail.objects.filter(message_id=self.message_id) - if answer is not None: - for attachment in self.attachments: - self.save_attachment(answer, attachment) - if raw_answers: - raw_email = raw_answers[0] - raw_email = RawIncomingEmail.objects.get(message_id=self.message_id) - raw_email.answer = answer - raw_email.save() - return answer - - def add_attachment(self, attachment): - self.attachments.append(attachment) - -class EmailHandler(FroideEmailParser): - def __init__(self, answer_class=EmailAnswer): - self.message = None - self.content_types_attrs = { - 'text/plain': 'content_text', - 'text/html': 'content_html', - } - - def instanciate_answer(self, lines): - answer = EmailAnswer() - msgtxt = ''.join(lines) - - msg = email.message_from_string(msgtxt) - temporary, permanent = all_failures(msg) - - if temporary or permanent: - answer.is_bounced = True - answer.email_from = scan_message(msg).pop() - else: - answer.email_from = msg["From"] - - the_recipient = msg["To"] - answer.subject = msg["Subject"] - answer.when = msg["Date"] - answer.message_id = msg["Message-ID"] - - the_recipient = re.sub(r"\n", "", the_recipient) - - regex = re.compile(r".*[\+\-](.*)@.*") - the_match = regex.match(the_recipient) - if the_match is None: - raise CouldNotFindIdentifier - answer.email_to = the_recipient - answer.answer_identifier = the_match.groups()[0] - logging.info("Reading the parts") - for part in msg.walk(): - logging.info("Part of type " + part.get_content_type()) - - content_type_attr = self.content_types_attrs.get(part.get_content_type()) - if content_type_attr: - charset = part.get_content_charset() or "ISO-8859-1" - data = part.get_payload(decode=True).decode(charset) - - setattr( - answer, - content_type_attr, - EmailReplyParser.parse_reply(data).strip(), - ) - else: - self.handle_not_processed_part(part) - - attachment = self.parse_attachment(part) - if attachment: - answer.add_attachment(attachment) - - log = 'New incoming email from %(from)s sent on %(date)s with subject %(subject)s and content %(content)s' - log = log % { - 'from': answer.email_from, - 'date': answer.when, - 'subject': answer.subject, - 'content': answer.content_text, - } - logging.info(log) - return answer - - def handle_not_processed_part(self, part): - pass - - def handle(self, lines): - email_answer = self.instanciate_answer(lines) - - return email_answer diff --git a/preguntales/email_parser/froide_email_utils.py b/preguntales/email_parser/froide_email_utils.py deleted file mode 100644 index 17ab484b..00000000 --- a/preguntales/email_parser/froide_email_utils.py +++ /dev/null @@ -1,220 +0,0 @@ -""" - -Original EmailParser Code by Ian Lewis: -http://www.ianlewis.org/en/parsing-email-attachments-python -Licensed under MIT - -""" - -""" -This code was taken from https://github.com/stefanw/froide/blob/master/froide/helper/email_utils.py -Write-it is not making use of all the parts of email_utils but it could certainly do so in the future -""" -try: - from email.header import decode_header - from email.parser import BytesParser as Parser -except ImportError: - from email.Header import decode_header - from email.Parser import Parser -import re - -from django.utils.six import BytesIO, text_type as str - - -class UnsupportedMailFormat(Exception): - pass - - -class FroideEmailParser(object): - - def parse_dispositions(self, dispo): - dispos = dispo.strip().split(";") - dispo_name = dispos[0].lower() - dispo_dict = {} - for param in dispos[1:]: - name, value = param.split("=", 1) - name = name.lower().strip() - value = value.strip() - if value.startswith('"') and value.endswith('"'): - value = value[1:-1] - dispo_dict[name] = self.parse_header_field(value) - return dispo_name, dispo_dict - - def parse_attachment(self, message_part): - content_disposition = message_part.get("Content-Disposition", None) - if content_disposition: - dispo_type, dispo_dict = self.parse_dispositions(content_disposition) - if dispo_type == "attachment" or (dispo_type == 'inline' and - 'filename' in dispo_dict): - content_type = message_part.get("Content-Type", None) - file_data = message_part.get_payload(decode=True) - if file_data is None: - payloads = message_part.get_payload() - file_data = '\n\n'.join([p.as_string() for p in payloads]) - try: - file_data = file_data.encode('utf-8') - except: - pass - - attachment = BytesIO(file_data) - attachment.content_type = message_part.get_content_type() - attachment.size = len(file_data) - attachment.name = None - attachment.create_date = None - attachment.mod_date = None - attachment.read_date = None - if "filename" in dispo_dict: - attachment.name = dispo_dict['filename'] - if content_type: - _, content_dict = self.parse_dispositions(content_type) - if 'name' in content_dict: - attachment.name = content_dict['name'] - if attachment.name is None and content_type == 'message/rfc822': - p = Parser() - msgobj = p.parse(BytesIO(attachment.getvalue())) - subject = self.parse_header_field(msgobj['Subject']) - if subject: - attachment.name = '%s.eml' % subject[:45] - if "create-date" in dispo_dict: - attachment.create_date = dispo_dict['create-date'] # TODO: datetime - if "modification-date" in dispo_dict: - attachment.mod_date = dispo_dict['modification-date'] # TODO: datetime - if "read-date" in dispo_dict: - attachment.read_date = dispo_dict['read-date'] # TODO: datetime - return attachment - return None - - def parse_header_field(self, field): - if field is None: - return None - - # preprocess head field - # see http://stackoverflow.com/questions/7331351/python-email-header-decoding-utf-8 - field = re.sub(r"(=\?.*\?=)(?!$)", r"\1 ", field) - - decodefrag = decode_header(field) - fragments = [] - for s, enc in decodefrag: - if enc: - try: - s = str(s, enc, errors='replace') - except UnicodeDecodeError: - # desperate move here - try: - s = s.decode("latin1") - except: - pass - else: - try: - if not isinstance(s, str): - s = s.decode("latin1") - except UnicodeDecodeError: - s = str(s, errors='ignore') - fragments.append(s.strip(' ')) - field = u' '.join(fragments) - return field.replace('\n\t', " ").replace('\n', '').replace('\r', '') - - # From here on this are the parts that Write-it is not using - - # def get_address_list(self, values): - # address_list = getaddresses(values) - # fixed = [] - # for addr in address_list: - # fixed.append((self.parse_header_field(addr[0]), addr[1].lower())) - # return fixed - - # def parse_date(self, date_str): - # date_tuple = parsedate_tz(date_str) - # if date_tuple is None: - # return None - # date = datetime.fromtimestamp(time.mktime(date_tuple[:9])) - # offset = date_tuple[9] - # if offset is not None: - # date = date - timedelta(seconds=offset) - # return pytz.utc.localize(date) - - # def parse_body(self, parts, attachments, body, html): - # for part in parts: - # attachment = self.parse_attachment(part) - # if attachment: - # attachments.append(attachment) - # elif part.get_content_type() == "text/plain": - # charset = part.get_content_charset() or 'ascii' - # body.append(str( - # part.get_payload(decode=True), - # charset, 'replace')) - # elif part.get_content_type() == "text/html": - # charset = part.get_content_charset() or 'ascii' - # html.append(str( - # part.get_payload(decode=True), - # charset, - # 'replace')) - - # def get(self, field): - # if isinstance(field, bytes): - # return field - # return str(field) - - # def parse(self, bytesfile): - # p = Parser() - # msgobj = p.parse(bytesfile) - # subject = self.parse_header_field(msgobj['Subject']) - # attachments = [] - # body = [] - # html = [] - # self.parse_body(msgobj.walk(), attachments, body, html) - # body = u'\n'.join(body) - # html = u'\n'.join(html) - - # tos = self.get_address_list(msgobj.get_all('To', [])) - # tos.extend(self.get_address_list(msgobj.get_all('X-Original-To', []))) - # ccs = self.get_address_list(msgobj.get_all('Cc', [])) - # resent_tos = self.get_address_list(msgobj.get_all('resent-to', [])) - # resent_ccs = self.get_address_list(msgobj.get_all('resent-cc', [])) - - # from_field = parseaddr(self.get(msgobj.get('From'))) - # from_field = (self.parse_header_field(from_field[0]), - # from_field[1].lower() if from_field[1] else from_field[1]) - # date = self.parse_date(self.get(msgobj.get("Date"))) - # return { - # 'msgobj': msgobj, - # 'date': date, - # 'subject': subject, - # 'body': body, - # 'html': html, - # 'from': from_field, - # 'to': tos, - # 'cc': ccs, - # 'resent_to': resent_tos, - # 'resent_cc': resent_ccs, - # 'attachments': attachments - # } - - # def parse_postmark(self, obj): - # from_field = (obj['FromFull']['Name'], obj['FromFull']['Email']) - # tos = [(o['Name'], o['Email']) for o in obj['ToFull']] - # ccs = [(o['Name'], o['Email']) for o in obj['CcFull']] - # attachments = [] - # for a in obj['Attachments']: - # attachment = BytesIO(base64.b64decode(a['Content'])) - # attachment.content_type = a['ContentType'] - # attachment.size = a['ContentLength'] - # attachment.name = a['Name'] - # attachment.create_date = None - # attachment.mod_date = None - # attachment.read_date = None - # attachments.append(attachment) - - # return { - # 'msgobj': obj, - # 'date': self.parse_date(obj['Date']), - # 'subject': obj['Subject'], - # 'body': obj['TextBody'], - # 'html': obj['HtmlBody'], - # 'from': from_field, - # 'to': tos, - # 'cc': ccs, - # 'resent_to': [], - # 'resent_cc': [], - # 'attachments': attachments - # } diff --git a/preguntales/exceptions.py b/preguntales/exceptions.py deleted file mode 100644 index d781dd7d..00000000 --- a/preguntales/exceptions.py +++ /dev/null @@ -1,2 +0,0 @@ -class CouldNotFindIdentifier(Exception): - pass diff --git a/preguntales/forms.py b/preguntales/forms.py deleted file mode 100644 index 0e88d1ef..00000000 --- a/preguntales/forms.py +++ /dev/null @@ -1,43 +0,0 @@ -# coding=utf-8 -from django.forms import ModelForm, CheckboxSelectMultiple -from preguntales.models import Message -from django.utils.translation import ugettext as _ - -class MessageForm(ModelForm): - - def __init__(self, *args, **kwargs): - self.election = kwargs.pop('election') - super(MessageForm, self).__init__(*args, **kwargs) - self.fields['people'].queryset = self.election.candidates.exclude(email__isnull=True).exclude(email__exact='') - - class Meta: - model = Message - fields = ('author_name', 'author_email', 'subject', 'content','people') - widgets = { - 'people': CheckboxSelectMultiple(), - } - labels = { - 'author_name': _('Nombre'), - 'author_email': _(u'Correo electrónico'), - 'subject': _('Asunto'), - 'content': _('texto'), - 'people': _('Destinatarios'), - } - help_texts = { - 'people': _(u'Puedes seleccinar a más de un candidato para dirigir tu pregunta'), - 'author_name': _(u'Identíficate de alguna forma: Estudiante, Obrero, Democrático, Dirigente, etc.'), - } - error_messages = { - 'name': { - 'required': _('Debes identificarte de alguna forma.'), - }, - } - - def save(self, commit=True, force_insert=False, force_update=False, *args, **kwargs): - message = super(MessageForm, self).save(commit=False, *args, **kwargs) - message.election = self.election - message.save() - for person in self.cleaned_data['people']: - message.people.add(person) - message.create_confirmation() - return message diff --git a/preguntales/management/__init__.py b/preguntales/management/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/preguntales/management/commands/__init__.py b/preguntales/management/commands/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/preguntales/management/commands/handleemail.py b/preguntales/management/commands/handleemail.py deleted file mode 100644 index 351a65fc..00000000 --- a/preguntales/management/commands/handleemail.py +++ /dev/null @@ -1,21 +0,0 @@ -from django.core.management.base import BaseCommand -import sys -from preguntales.email_parser import EmailHandler -from preguntales.exceptions import CouldNotFindIdentifier - - -class Command(BaseCommand): - args = '' - help = 'Handles incoming EmailAnswer' - - def add_arguments(self, parser): - pass - - def handle(self, *args, **options): - lines = sys.stdin.readlines() - handler = EmailHandler() - try: - answer = handler.handle(lines) - except CouldNotFindIdentifier: - pass - answer.save() diff --git a/preguntales/migrations/0001_initial.py b/preguntales/migrations/0001_initial.py deleted file mode 100644 index 4d95ab35..00000000 --- a/preguntales/migrations/0001_initial.py +++ /dev/null @@ -1,61 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations -import autoslug.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('elections', '0024_auto_20160307_2049'), - ] - - operations = [ - migrations.CreateModel( - name='Answer', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('content', models.TextField()), - ('created', models.DateTimeField(auto_now_add=True)), - ], - ), - migrations.CreateModel( - name='Message', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('author_name', models.CharField(default=b'', max_length=256)), - ('author_email', models.EmailField(default=b'', max_length=512)), - ('content', models.TextField(default=b'')), - ('subject', models.CharField(max_length=255)), - ('slug', autoslug.fields.AutoSlugField(populate_from=b'subject', unique=True, editable=False)), - ('created', models.DateTimeField(auto_now_add=True)), - ('election', models.ForeignKey(related_name='messages_', default=None, to='elections.Election')), - ('people', models.ManyToManyField(to='elections.Candidate')), - ], - options={ - 'verbose_name': 'Mensaje de preguntales', - 'verbose_name_plural': 'Mensajes de preguntales', - }, - ), - migrations.CreateModel( - name='MessageStatus', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('accepted', models.NullBooleanField(default=None)), - ('sent', models.BooleanField(default=False)), - ('confirmed', models.NullBooleanField(default=None)), - ('message', models.OneToOneField(related_name='status', to='preguntales.Message')), - ], - ), - migrations.AddField( - model_name='answer', - name='message', - field=models.ForeignKey(related_name='answers_', to='preguntales.Message'), - ), - migrations.AddField( - model_name='answer', - name='person', - field=models.ForeignKey(related_name='answers_', to='elections.Candidate'), - ), - ] diff --git a/preguntales/migrations/0002_messageconfirmation.py b/preguntales/migrations/0002_messageconfirmation.py deleted file mode 100644 index 478d87df..00000000 --- a/preguntales/migrations/0002_messageconfirmation.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations -import uuid - - -class Migration(migrations.Migration): - - dependencies = [ - ('preguntales', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='MessageConfirmation', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('key', models.CharField(default=uuid.uuid4, max_length=255)), - ('when_confirmed', models.DateTimeField(default=None, null=True)), - ('created', models.DateTimeField(auto_now_add=True)), - ('updated', models.DateTimeField(auto_now=True)), - ('message', models.OneToOneField(related_name='confirmation', to='preguntales.Message')), - ], - ), - ] diff --git a/preguntales/migrations/0003_outboundmessage.py b/preguntales/migrations/0003_outboundmessage.py deleted file mode 100644 index 53cd7bc1..00000000 --- a/preguntales/migrations/0003_outboundmessage.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-03-11 16:09 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion -import uuid - - -class Migration(migrations.Migration): - - dependencies = [ - ('preguntales', '0002_messageconfirmation'), - ] - - operations = [ - migrations.CreateModel( - name='OutboundMessage', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('key', models.CharField(default=uuid.uuid4, max_length=255)), - ('message', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='outbound_identifiers', to='preguntales.Message')), - ('person', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='popolo.Person')), - ], - ), - ] diff --git a/preguntales/migrations/0004_attachment.py b/preguntales/migrations/0004_attachment.py deleted file mode 100644 index 57816bc0..00000000 --- a/preguntales/migrations/0004_attachment.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-03-11 18:10 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('preguntales', '0003_outboundmessage'), - ] - - operations = [ - migrations.CreateModel( - name='Attachment', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('content', models.FileField(upload_to=b'attachments/%Y/%m/%d')), - ('name', models.CharField(max_length=255)), - ('answer', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='attachments', to='preguntales.Answer')), - ], - ), - ] diff --git a/preguntales/migrations/0005_auto_20160421_2020.py b/preguntales/migrations/0005_auto_20160421_2020.py deleted file mode 100644 index 92a3d985..00000000 --- a/preguntales/migrations/0005_auto_20160421_2020.py +++ /dev/null @@ -1,42 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-04-21 20:20 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion -import preguntales.models - - -class Migration(migrations.Migration): - - dependencies = [ - ('preguntales', '0004_attachment'), - ] - - operations = [ - migrations.AlterField( - model_name='answer', - name='message', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='answers', to='preguntales.Message'), - ), - migrations.AlterField( - model_name='answer', - name='person', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='answers', to='elections.Candidate'), - ), - migrations.AlterField( - model_name='message', - name='election', - field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.CASCADE, related_name='messages', to='elections.Election'), - ), - migrations.AlterField( - model_name='messageconfirmation', - name='key', - field=models.CharField(default=preguntales.models.uuid_with_no_dashes, max_length=255), - ), - migrations.AlterField( - model_name='outboundmessage', - name='key', - field=models.CharField(default=preguntales.models.uuid_with_no_dashes, max_length=255), - ), - ] diff --git a/preguntales/migrations/0006_auto_20170817_1344.py b/preguntales/migrations/0006_auto_20170817_1344.py deleted file mode 100644 index e1ce6996..00000000 --- a/preguntales/migrations/0006_auto_20170817_1344.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.7 on 2017-08-17 13:44 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('preguntales', '0005_auto_20160421_2020'), - ] - - operations = [ - migrations.AlterField( - model_name='attachment', - name='content', - field=models.FileField(max_length=255, upload_to=b'attachments/%Y/%m/%d'), - ), - ] diff --git a/preguntales/migrations/__init__.py b/preguntales/migrations/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/preguntales/models.py b/preguntales/models.py deleted file mode 100644 index 033d81bd..00000000 --- a/preguntales/models.py +++ /dev/null @@ -1,194 +0,0 @@ -# coding=utf-8 -from django.db import models -from elections.models import Election, Candidate -from django.utils.encoding import python_2_unicode_compatible -from django.utils.translation import ugettext_lazy as _ -from django.db.models import Q, Count -from django.core.urlresolvers import reverse -from django.contrib.sites.models import Site -from autoslug import AutoSlugField -from django.conf import settings -from uuid import uuid4 -from django.utils import timezone -from popolo.models import Person -from votai_utils.send_mails import send_mail -from django.db.models import Case, Value, When, PositiveSmallIntegerField - - -class MessageManagerBase(models.Manager): - def needing_moderation_messages(self): - qs = self.filter(status__accepted__isnull=True) - return qs - - -class MessageManager(MessageManagerBase): - def get_queryset(self): - queryset = super(MessageManager, self).get_queryset().annotate(num_answers=Count('answers')) - queryset = queryset.annotate( - accepted_0_1=Case(When(status__accepted=True, then=Value(1)), - default=Value(0), - output_field=PositiveSmallIntegerField()) - ) - return queryset.order_by('-num_answers', '-accepted_0_1', '-created') - - -def uuid_with_no_dashes(): - return uuid4().hex - - -@python_2_unicode_compatible -class Message(models.Model): - author_name = models.CharField(max_length=256, default='') - author_email = models.EmailField(max_length=512, default='') - content = models.TextField(default='') - people = models.ManyToManyField(Candidate) - subject = models.CharField(max_length=255) - slug = AutoSlugField(populate_from='subject', unique=True, null=False) - - election = models.ForeignKey(Election, related_name='messages', default=None) - created = models.DateTimeField(auto_now_add=True) - - objects = MessageManagerBase() - ordered = MessageManager() - - class Meta: - verbose_name = _(u'Mensaje de preguntales') - verbose_name_plural = _(u'Mensajes de preguntales') - - def __str__(self): - return u'%(author_name)s preguntó "%(subject)s" en %(election)s' % {'author_name': self.author_name, - 'subject': self.subject, - 'election': self.election.name - } - - def accept_moderation(self): - self.accepted = True - self.save() - - def __init__(self, *args, **kwargs): - self.possible_status = {} - self.possible_status['accepted'] = kwargs.pop('accepted', None) - self.possible_status['sent'] = kwargs.pop('sent', None) - self.possible_status['confirmed'] = kwargs.pop('confirmed', None) - super(Message, self).__init__(*args, **kwargs) - - def save(self, *args, **kwargs): - creating = False - if self.pk is None: - creating = True - super(Message, self).save(*args, **kwargs) - if creating: - status = MessageStatus.objects.create(message=self) - if self.possible_status['accepted'] is not None: - self.accepted = self.possible_status['accepted'] - if self.possible_status['sent'] is not None: - self.sent = self.possible_status['sent'] - if self.possible_status['accepted'] is not None: - self.confirmed = self.possible_status['confirmed'] - - def create_confirmation(self): - confirmation = MessageConfirmation.objects.create(message=self) - site = Site.objects.get_current() - context = {'election':self.election, - 'message': self, - 'site': site} - send_mail(context, 'confirmation', to=[self.author_email], from_email=settings.NO_REPLY_MAIL) - - def confirm(self): - self.confirmed = True - self.confirmation.when_confirmed = timezone.now() - self.confirmation.save() - - def get_absolute_url(self): - election = self.election - path = reverse('message_detail', kwargs={'election_slug': election.slug, 'pk': self.id}) - site = Site.objects.get_current() - return "http://%s%s" % (site.domain, path) - - def get_sent(self): - return self.status.sent - - def set_sent(self, sent): - self.status.sent = sent - self.status.save() - - sent = property(get_sent, set_sent) - - def get_accepted(self): - return self.status.accepted - - def set_accepted(self, accepted): - self.status.accepted = accepted - self.status.save() - - accepted = property(get_accepted, set_accepted) - - def get_confirmed(self): - return self.status.confirmed - - def set_confirmed(self, confirmed): - self.status.confirmed = confirmed - self.status.save() - - confirmed = property(get_confirmed, set_confirmed) - - def send(self): - for person in self.people.all(): - outbound_message = OutboundMessage.objects.create(message=self, person=person) - reply_to = '%(localpart)s+%(key)s@%(domain)s' % {'localpart': settings.EMAIL_LOCALPART, - 'key': outbound_message.key, - 'domain': settings.EMAIL_DOMAIN} - site = Site.objects.get_current() - context = {'election':self.election, - 'candidate': person, - 'message': self, - 'site': site} - send_mail(context, 'nueva_pregunta_candidato', to=[person.email], \ - reply_to=reply_to) - self.status.sent = True - self.status.save() - - @classmethod - def send_mails(cls): - query = Q(status__accepted=True) & Q(status__sent=False) - messages = Message.objects.filter(query) - for message in messages: - message.send() - - - def reject_moderation(self): - self.accepted = False - self.save() - -class Answer(models.Model): - message = models.ForeignKey(Message, related_name='answers') - content = models.TextField() - created = models.DateTimeField(editable=False, auto_now_add=True) - person = models.ForeignKey(Candidate, related_name='answers') - -class Attachment(models.Model): - answer = models.ForeignKey(Answer, related_name='attachments') - content = models.FileField(upload_to="attachments/%Y/%m/%d", max_length=255) - name = models.CharField(max_length=255) - -class OutboundMessage(models.Model): - message = models.ForeignKey(Message, related_name='outbound_identifiers') - person = models.ForeignKey(Person) - key = models.CharField(max_length=255, default=uuid_with_no_dashes) - -class MessageStatus(models.Model): - message = models.OneToOneField(Message, related_name='status') - accepted = models.NullBooleanField(default=None) - sent = models.BooleanField(default=False) - confirmed = models.NullBooleanField(default=None) - - -class MessageConfirmation(models.Model): - message = models.OneToOneField(Message, related_name='confirmation') - key = models.CharField(max_length=255, default=uuid_with_no_dashes) - when_confirmed = models.DateTimeField(default=None, null=True) - created = models.DateTimeField(auto_now_add=True) - updated = models.DateTimeField(auto_now=True) - - def get_absolute_url(self): - return reverse('confirmation', kwargs={'key': self.key}) diff --git a/preguntales/tasks.py b/preguntales/tasks.py deleted file mode 100644 index 4edacd3a..00000000 --- a/preguntales/tasks.py +++ /dev/null @@ -1,14 +0,0 @@ -from votai_utils.celery import app -from preguntales.models import Message - -# import the logging library -import logging - -# Get an instance of a logger -logger = logging.getLogger(__name__) - - -@app.task -def send_mails(): - logger.info('Sending mails to the candidates') - Message.send_mails() diff --git a/preguntales/tests/__init__.py b/preguntales/tests/__init__.py deleted file mode 100644 index caccabe9..00000000 --- a/preguntales/tests/__init__.py +++ /dev/null @@ -1,14 +0,0 @@ -import os - - -__testing_mails__ = os.path.dirname(os.path.abspath(__file__)) + '/testing_mails/' -__attachrments_dir__ = __testing_mails__ + 'attachments/' - -def read_lines(file_name): - f = open(file_name) - lines = f.readlines() - f.close() - return lines - -def read_mail(mail): - return read_lines(__testing_mails__ + mail + '.txt') diff --git a/preguntales/tests/ask_candidates_tests.py b/preguntales/tests/ask_candidates_tests.py deleted file mode 100644 index c4726818..00000000 --- a/preguntales/tests/ask_candidates_tests.py +++ /dev/null @@ -1,650 +0,0 @@ -# coding=utf-8 -from elections.tests import VotaInteligenteTestCase as TestCase -from django.test import override_settings -from django.core import mail -from elections.models import Election, Candidate -from preguntales.models import (Message, - Answer, - MessageStatus, - MessageConfirmation, - OutboundMessage, - Attachment - ) -from datetime import datetime -from django.core.urlresolvers import reverse -from django.contrib.sites.models import Site -from mock import patch, call -from preguntales.forms import MessageForm -from preguntales.tasks import send_mails -from django.template import Context -from django.template.loader import get_template -from unittest import skip -from django.core.files import File -from preguntales.tests import __testing_mails__, __attachrments_dir__ -import os - -THE_CURRENT_MEDIA_ROOT = os.path.dirname(os.path.abspath(__file__)) + '/testing_mails/attachments' - -EMAIL_LOCALPART='municipales2016' -EMAIL_DOMAIN='votainteligente.cl' - -@override_settings(EMAIL_DOMAIN=EMAIL_DOMAIN, - EMAIL_LOCALPART=EMAIL_LOCALPART) -class MessageTestCase(TestCase): - def setUp(self): - self.election = Election.objects.get(id=1) - self.candidate1 = Candidate.objects.get(id=4) - self.candidate2 = Candidate.objects.get(id=5) - self.candidate3 = Candidate.objects.get(id=6) - - def test_instanciate_a_message(self): - message = Message.objects.create(election=self.election, - author_name='author', - author_email='author@email.com', - subject='Perrito', - content='content', - ) - - self.assertIsNone(message.accepted) - self.assertFalse(message.sent) - self.assertIsNone(message.confirmed) - self.assertTrue(message.slug) - self.assertIn(message.slug, 'perrito') - self.assertIsInstance(message.created,datetime) - message2 = Message.objects.create(election=self.election, - author_name='author', - author_email='author@email.com', - subject='Perrito', - content='content', - ) - self.assertNotEquals(message.slug, message2.slug) - - def test_str(self): - message = Message.objects.create(election=self.election, - author_name='author', - author_email='author@email.com', - subject='subject', - content='content', - slug='subject-slugified' - ) - - expected_unicode = 'author preguntó "subject" en 2a Circunscripcion Antofagasta' - self.assertEquals(message.__str__(), expected_unicode) - - def test_a_message_has_a_message_detail_url(self): - message = Message.objects.create(election=self.election, - author_name='author', - author_email='author@email.com', - subject='subject', - content='content', - slug='subject-slugified' - ) - - url = reverse('message_detail',kwargs={'election_slug':self.election.slug, 'pk':message.id}) - self.assertTrue(url) - response = self.client.get(url) - self.assertEquals(response.status_code, 200) - self.assertIn('election', response.context) - self.assertIn('votainteligentemessage', response.context) - self.assertEquals(response.context['election'], self.election) - self.assertEquals(response.context['votainteligentemessage'], message) - self.assertTemplateUsed(response, 'elections/message_detail.html') - site = Site.objects.get_current() - self.assertEquals("http://%s%s"%(site.domain,url), message.get_absolute_url()) - - def test_accept_message(self): - message = Message.objects.create(election=self.election, - author_name='author', - author_email='author@email.com', - subject='subject', - content='content', - ) - message.people.add(self.candidate1) - message.people.add(self.candidate2) - - self.assertFalse(message.accepted) - - # Now I moderate this - # which means I send an email with a confirmation email - # - message.accept_moderation() - - self.assertFalse(message.sent) - self.assertTrue(message.accepted) - - def test_send_mail(self): - message = Message.objects.create(election=self.election, - author_name='author', - author_email='author@email.com', - subject='subject', - content='content', - slug=u'subject-slugified', - accepted=True - ) - message.people.add(self.candidate1) - message.people.add(self.candidate2) - - self.assertEquals(len(mail.outbox), 0) - message.send() - self.assertEquals(len(mail.outbox), 2) - the_mail = mail.outbox[0] - self.assertIn(the_mail.to[0], [self.candidate1.email, self.candidate2.email]) - context = {'election': self.election, - 'candidate': self.candidate1, - 'message': message - } - template_body = get_template('mails/nueva_pregunta_candidato/body.txt') - expected_content= template_body.render(context) - self.assertEquals(the_mail.body, expected_content) - template_subject = get_template('mails/nueva_pregunta_candidato/subject.txt') - expected_subject = template_subject.render(context).replace('\n', '').replace('\r', '') - self.assertEquals(the_mail.subject, expected_subject) - message = Message.objects.get(id=message.id) - self.assertTrue(message.sent) - self.assertTrue(message.outbound_identifiers.all()) - self.assertTrue(message.outbound_identifiers.filter(person=self.candidate1)) - self.assertTrue(message.outbound_identifiers.filter(person=self.candidate2)) - identifiers = message.outbound_identifiers.all() - # reply-to part - reply_to_arrays = [] - for identifier in identifiers: - reply_to_arrays.append('%(localpart)s+%(key)s@%(domain)s' % {'localpart': EMAIL_LOCALPART, - 'domain': EMAIL_DOMAIN, - 'key':identifier.key}) - for the_mail in mail.outbox: - self.assertEquals(len(the_mail.reply_to), 1) - self.assertIn(the_mail.reply_to[0], reply_to_arrays) - - def test_the_class_has_a_function_that_will_send_mails(self): - message = Message.objects.create(election=self.election, - author_name='author', - author_email='author@email.com', - subject='subject', - content='content', - slug=u'subject-slugified', - accepted=True - ) - message.people.add(self.candidate1) - message.people.add(self.candidate2) - - message2 = Message.objects.create(election=self.election, - author_name='author', - author_email='author@email.com', - subject='subject', - content='content', - slug=u'subject-slugified', - accepted=True - ) - message2.people.add(self.candidate1) - message2.people.add(self.candidate2) - - message3 = Message.objects.create(election=self.election, - author_name='author', - author_email='author@email.com', - subject='subject', - content='content', - slug='subject-slugified' - ) - message3.people.add(self.candidate1) - message3.people.add(self.candidate2) - - self.assertEquals(len(mail.outbox), 0) - Message.send_mails() - sent_mails = Message.objects.filter(status__sent=True) - self.assertEquals(len(sent_mails), 2) - self.assertTrue(Message.objects.get(id=message.id).sent) - self.assertTrue(Message.objects.get(id=message2.id).sent) - self.assertEquals(len(mail.outbox), 4) - - def test_messages_listing_needing_moderation_messages(self): - message = Message.objects.create(election=self.election, - author_name='author', - author_email='author@email.com', - subject='subject', - content='content', - slug=u'subject-slugified', - accepted=True - ) - message.people.add(self.candidate1) - message.people.add(self.candidate2) - - message2 = Message.objects.create(election=self.election, - author_name='author', - author_email='author@email.com', - subject='subject', - content='content', - slug=u'subject-slugified', - accepted=True - ) - message2.people.add(self.candidate1) - message2.people.add(self.candidate2) - - message3 = Message.objects.create(election=self.election, - author_name='author', - author_email='author@email.com', - subject='subject', - content='content', - slug='subject-slugified' - ) - message3.people.add(self.candidate1) - message3.people.add(self.candidate2) - - messages = Message.objects.needing_moderation_messages() - - self.assertIn(message3, messages) - self.assertEquals(len(messages), 1) - - - def test_reject_message(self): - message = Message.objects.create(election=self.election, - author_name='author', - author_email='author@email.com', - subject='subject', - content='content', - slug='subject-slugified' - ) - message.people.add(self.candidate1) - message.people.add(self.candidate2) - - self.assertIsNone(message.accepted) - - message.reject_moderation() - #the message has been moderated - self.assertFalse(message.accepted) - -class MessageOutboundIdentifier(TestCase): - def setUp(self): - self.election = Election.objects.get(id=1) - self.candidate1 = Candidate.objects.get(id=4) - self.candidate2 = Candidate.objects.get(id=5) - self.candidate3 = Candidate.objects.get(id=6) - self.message = Message.objects.create(election=self.election, - author_name='author', - author_email='author@email.com', - subject='Perrito', - content='content', - ) - self.message.people.add(self.candidate1) - self.message.people.add(self.candidate2) - - def test_instantiate(self): - outbound = OutboundMessage.objects.create(message=self.message, person=self.candidate1) - self.assertTrue(outbound) - self.assertIn(outbound, self.message.outbound_identifiers.all()) - self.assertTrue(outbound.key) - self.assertIsInstance(outbound.key, str) - self.assertNotIn('-', outbound.key) - - def test_no_two_equal_keys(self): - outbound1 = OutboundMessage.objects.create(message=self.message, person=self.candidate1) - outbound2 = OutboundMessage.objects.create(message=self.message, person=self.candidate1) - self.assertNotEqual(outbound1.key, outbound2.key) - - -class AnswerAttachmentTestCase(TestCase): - def setUp(self): - super(AnswerAttachmentTestCase, self).setUp() - self.election = Election.objects.get(id=1) - self.candidate1 = Candidate.objects.get(id=4) - self.candidate2 = Candidate.objects.get(id=5) - self.candidate3 = Candidate.objects.get(id=6) - self.message = Message.objects.create(election=self.election, - author_name='author', - author_email='author@email.com', - subject='Perrito', - content='content', - ) - self.message.people.add(self.candidate1) - self.message.people.add(self.candidate2) - self.answer = Answer.objects.create(message=self.message, - person=self.candidate1, - content='This is a content') - self.pdf_file = File(open(__attachrments_dir__ + "hello.pd.pdf", 'rb')) - self.photo_fiera = File(open(__attachrments_dir__ + "fiera_parque.jpg", 'rb')) - - @override_settings(MEDIA_ROOT=THE_CURRENT_MEDIA_ROOT) - def test_instantiate(self): - attachment = Attachment.objects.create(answer=self.answer, - content=self.photo_fiera, - name="foto-fiera.jpg" - ) - self.assertTrue(attachment) - -class MessageStatusTestCase(TestCase): - def setUp(self): - self.election = Election.objects.get(id=1) - self.candidate1 = Candidate.objects.get(id=4) - self.candidate2 = Candidate.objects.get(id=5) - self.candidate3 = Candidate.objects.get(id=6) - self.message = Message.objects.create(election=self.election, - author_name='author', - author_email='author@email.com', - subject='Perrito', - content='content', - ) - - def test_instanciate(self): - ## Deleting things before creating anything - MessageStatus.objects.all().delete() - status = MessageStatus.objects.create(message=self.message) - self.assertIsNone(status.accepted) - self.assertFalse(status.sent) - self.assertIsNone(status.confirmed) - self.assertEquals(status.message, self.message) - - def test_automatically_create_status(self): - message = Message.objects.create(election=self.election, - author_name='author', - author_email='author@email.com', - subject='Perrito', - content='content', - ) - self.assertTrue(message.status) - - def test_passing_variables_to_status(self): - message = Message.objects.create(election=self.election, - author_name='author', - author_email='author@email.com', - subject='Perrito', - content='content', - accepted=True - ) - self.assertTrue(message.status.accepted) - - -@override_settings(NO_REPLY_MAIL="no-reply@votainteligente.cl") -class ConfirmationTestCase(TestCase): - def setUp(self): - self.election = Election.objects.get(id=1) - self.candidate1 = Candidate.objects.get(id=4) - self.candidate2 = Candidate.objects.get(id=5) - self.candidate3 = Candidate.objects.get(id=6) - self.message = Message.objects.create(election=self.election, - author_name='author', - author_email='author@email.com', - subject='subject', - content='content', - slug=u'subject-slugified', - ) - self.message.people.add(self.candidate1) - self.message.people.add(self.candidate2) - - def test_instanciate(self): - confirmation = MessageConfirmation.objects.create(message=self.message) - self.assertTrue(confirmation.key) - self.assertIsNone(confirmation.when_confirmed) - self.assertTrue(confirmation.created) - self.assertTrue(confirmation.updated) - - def test_message_create_confirmation(self): - self.message.create_confirmation() - self.assertTrue(self.message.confirmation) - self.assertEquals(len(mail.outbox), 1) - context = {'election': self.election, 'message': self.message} - template_subject = get_template('mails/confirmation/subject.txt') - template_body = get_template('mails/confirmation/body.txt') - expected_subject = template_subject.render(context) - expected_body = template_body.render(context) - the_mail = mail.outbox[0] - self.assertIn(self.message.author_email, the_mail.to) - self.assertEquals("no-reply@votainteligente.cl", the_mail.from_email) - - def test_confirm_message(self): - self.message.create_confirmation() - self.message.confirm() - self.assertTrue(self.message.confirmation.when_confirmed) - self.assertTrue(self.message.confirmed) - ## Deleting confirmation - self.message.confirmation.delete() - ## Creating a new one - self.message.create_confirmation() - url = reverse('confirmation', kwargs={'key': self.message.confirmation.key}) - response = self.client.get(url) - self.assertEquals(response.status_code, 200) - self.assertTemplateUsed('preguntales/confirmation.html') - self.assertEquals(response.context['message'], self.message) - self.message = Message.objects.get(id=self.message.id) - self.assertTrue(self.message.confirmation.when_confirmed) - self.assertTrue(self.message.confirmed) - #I cannot get the same address again - self.assertEquals(self.client.get(url).status_code, 404) - - def test_confirmation_url(self): - self.message.create_confirmation() - confirmation = self.message.confirmation - url = confirmation.get_absolute_url() - response = self.client.get(url) - self.message = Message.objects.get(id=self.message.id) - self.assertTrue(self.message.confirmed) - - -class AnswerTestCase(TestCase): - def setUp(self): - self.election = Election.objects.get(id=1) - self.candidate1 = Candidate.objects.get(id=4) - self.candidate2 = Candidate.objects.get(id=5) - self.candidate3 = Candidate.objects.get(id=6) - self.message = Message.objects.create(election=self.election, - author_name='author', - author_email='author@email.com', - subject='subject', - content='content', - slug=u'subject-slugified', - accepted=True - ) - self.message.people.add(self.candidate1) - self.message.people.add(self.candidate2) - - def test_create_an_answer(self): - answer = Answer.objects.create( - content=u'Hey I\'ve had to speak english in the last couple of days', - message=self.message, - person=self.candidate1 - ) - - self.assertTrue(answer) - self.assertEquals(answer.content, u'Hey I\'ve had to speak english in the last couple of days') - self.assertEquals(answer.message, self.message) - self.assertEquals(answer.person, self.candidate1) - self.assertIsNotNone(answer.created) - self.assertIsInstance(answer.created, datetime) - - self.assertIn(answer, self.message.answers.all()) - self.assertIn(answer, self.candidate1.answers.all()) - - -class MessagesOrderedList(TestCase): - def setUp(self): - super(MessagesOrderedList, self).setUp() - self.election = Election.objects.all()[0] - self.candidate1 = Candidate.objects.get(id=4) - self.candidate2 = Candidate.objects.get(id=5) - self.candidate3 = Candidate.objects.get(id=6) - - self.message1 = Message.objects.create(election=self.election, - author_name='author', - author_email='author email', - subject=u'I\'m moderated', - content=u'Qué opina usted sobre el test_accept_message', - slug=u'subject-slugified', - accepted=True - ) - self.message2 = Message.objects.create(election=self.election, - author_name='author', - author_email='author email', - subject=u'message 3', - content=u'Qué opina usted sobre el test_accept_message', - slug=u'subject-slugified', - accepted=True - ) - self.message3 = Message.objects.create(election=self.election, - author_name='author', - author_email='author email', - subject=u'please don\'t moderate me', - content=u'Qué opina usted sobre el test_accept_message', - slug='subject-slugified' - ) - self.message4 = Message.objects.create(election=self.election, - author_name='author', - author_email='author email', - subject=u'message 4', - content=u'Que opina usted sobre el test_accept_message', - slug=u'subject-slugified', - accepted=True - ) - self.message4.people.add(self.candidate1) - - self.answer1 = Answer.objects.create(message=self.message4, - person=self.candidate1, - content=u'answerto message4' - ) - self.message5 = Message.objects.create(election=self.election, - author_name='author', - author_email='author email', - subject=u'message 5', - content=u'Que opina usted sobre el test_accept_message', - slug=u'subject-slugified', - accepted=True - ) - - - def test_message_class_has_a_manager(self): - messages = Message.ordered.all() - - self.assertEquals(messages.count(), 5) - self.assertEquals(messages[0], self.message4)#because it has answers - self.assertEquals(messages[1], self.message5)#because it was the last created - self.assertEquals(messages[2], self.message2)#the third should not appear here because it has not been moderated - self.assertEquals(messages[3], self.message1) - self.assertEquals(messages[4], self.message3)#this hasn't been moderated - - -class PreguntalesWebTestCase(TestCase): - def setUp(self): - self.election = Election.objects.all()[0] - self.candidate1 = Candidate.objects.get(id=4) - self.candidate2 = Candidate.objects.get(id=5) - self.candidate3 = Candidate.objects.get(id=6) - self.election.candidates.add(self.candidate1) - self.election.candidates.add(self.candidate2) - self.election.candidates.add(self.candidate3) - - def tearDown(self): - pass - - def test_get_the_url(self): - url = reverse('ask_detail_view', - kwargs={ - 'slug':self.election.slug - }) - response = self.client.get(url) - self.assertEquals(response.status_code, 200) - self.assertIn('election', response.context) - self.assertEquals(response.context['election'], self.election) - self.assertIn('form', response.context) - self.assertIsInstance(response.context['form'], MessageForm) - self.assertIn('messages', response.context) - self.assertTemplateUsed(response, 'elections/ask_candidate.html') - - def test_submit_message(self): - url = reverse('ask_detail_view', kwargs={'slug':self.election.slug,}) - self.candidate1.email = "email@email.com" - self.candidate1.save() - self.candidate2.email = "email@email.com" - self.candidate2.save() - response = self.client.post(url, {'people': [self.candidate1.pk, self.candidate2.pk], - 'subject': 'this important issue', - 'content': 'this is a very important message', - 'author_name': 'my name', - 'author_email': 'mail@mail.er', - # 'recaptcha_response_field': 'PASSED' - }, follow=True - ) - - self.assertTemplateUsed(response, 'elections/ask_candidate.html') - self.assertEquals(Message.objects.count(), 1) - new_message = Message.objects.all()[0] - self.assertFalse(new_message.sent) - self.assertFalse(new_message.accepted) - self.assertEquals(new_message.content, 'this is a very important message') - self.assertEquals(new_message.subject, 'this important issue') - self.assertEquals(new_message.people.all().count(), 2) - - def test_persons_belongs_to_instance_and_is_reachable(self): - message_form = MessageForm(election=self.election) - - alejandro_guille = Candidate.objects.get(name='Alejandro Guillier') - alejandro_guille.email = 'eduardo@guillier.cl' - alejandro_guille.save() - - election_candidates = self.election.candidates.exclude(email__isnull=True).exclude(email="") - - self.assertQuerysetEqual(election_candidates, - [repr(r) for r in message_form.fields['people'].queryset], - ordered=False) - - def test_form_creates_confirmation(self): - data = {'people': [self.candidate1.pk, self.candidate2.pk], - 'subject': 'this important issue', - 'content': 'this is a very important message', - 'author_name': 'my name', - 'author_email': 'mail@mail.er', - } - message_form = MessageForm(data, election=self.election) - print message_form.errors - self.assertTrue(message_form.is_valid()) - message = message_form.save() - self.assertTrue(message.confirmation) - - -class MessageSenderTestCase(TestCase): - ''' - This TestCase is intended to provide testing for the periodically - push VotaInteligente Messages to WriteIt (writeit.ciudadanointeligente.org). - ''' - def setUp(self): - self.election = Election.objects.get(id=1) - self.candidate1 = Candidate.objects.get(id=4) - self.candidate2 = Candidate.objects.get(id=5) - self.candidate3 = Candidate.objects.get(id=6) - - def test_push_moderated_messages(self): - '''Push moderated messages''' - message = Message.objects.create(election=self.election, - author_name='author', - author_email='author@email.com', - subject='subject', - content='content', - slug=u'subject-slugified', - ) - message.people.add(self.candidate1) - message.people.add(self.candidate2) - message.status.accepted = True - message.status.save() - - message2 = Message.objects.create(election=self.election, - author_name='author', - author_email='author@email.com', - subject='subject', - content='content', - slug=u'subject-slugified', - ) - message2.status.accepted = True - message2.status.save() - message2.people.add(self.candidate1) - message2.people.add(self.candidate2) - - message3 = Message.objects.create(election=self.election, - author_name='author', - author_email='author@email.com', - subject='subject', - content='content', - slug='subject-slugified' - ) - message3.people.add(self.candidate1) - message3.people.add(self.candidate2) - send_mails.delay() - self.assertEquals(Message.objects.filter(status__sent=True).count(), 2) - self.assertIn(message, Message.objects.filter(status__sent=True)) - self.assertIn(message2, Message.objects.filter(status__sent=True)) - self.assertEquals(len(mail.outbox), 4) diff --git a/preguntales/tests/incoming_mail_tests.py b/preguntales/tests/incoming_mail_tests.py deleted file mode 100644 index bfdc6e4c..00000000 --- a/preguntales/tests/incoming_mail_tests.py +++ /dev/null @@ -1,199 +0,0 @@ -# coding=utf-8 -from elections.tests import VotaInteligenteTestCase as TestCase -from django.test.utils import override_settings -from elections.models import Election, Candidate -from preguntales.models import Message, Answer -from datetime import datetime -from django.core.urlresolvers import reverse -from django.contrib.sites.models import Site -from mock import patch, call -from preguntales.forms import MessageForm -from preguntales.email_parser import EmailAnswer, EmailHandler -from unittest import skip -from preguntales.tests import __testing_mails__, __attachrments_dir__, read_lines -from django.core.files import File -from django.core.management import call_command -import os - -THE_CURRENT_MEDIA_ROOT = os.path.dirname(os.path.abspath(__file__)) + '/testing_mails/attachments' - -def read_mail(mail): - return read_lines(__testing_mails__ + mail + '.txt') - -def readlines1_mock(): - return read_mail('mail') - - -def readlines2_mock(): - return read_lines('mail_with_identifier_in_the_content') - - -def readlines3_mock(): - return read_lines('mail_for_no_message') - - -def killer_mail(): - return 'this should kill the parser!' - - -def readlines4_mock(): - return read_lines('mail_from_tony') - -class IncomingEmailBase(TestCase): - def setUp(self): - self.election = Election.objects.get(id=1) - self.candidate1 = Candidate.objects.get(id=4) - self.candidate2 = Candidate.objects.get(id=5) - self.candidate3 = Candidate.objects.get(id=6) - self.message = Message.objects.create(election=self.election, - author_name='author', - author_email='author@email.com', - subject='subject', - content='content', - slug=u'subject-slugified', - accepted=True - ) - self.message.people.add(self.candidate1) - self.message.people.add(self.candidate2) - self.message.send() - Answer.objects.all().delete() - -class AnswerHandlerTestCase(IncomingEmailBase): - def setUp(self): - super(AnswerHandlerTestCase, self).setUp() - self.photo_fiera = File(open(__attachrments_dir__ +"fiera_parque.jpg", 'rb')) - self.pdf_file = File(open(__attachrments_dir__ + "hello.pd.pdf", 'rb')) - - def test_class_answer(self): - email_answer = EmailAnswer() - self.assertTrue(hasattr(email_answer, 'subject')) - self.assertTrue(hasattr(email_answer, '_content_text')) - self.assertTrue(hasattr(email_answer, 'content_html')) - self.assertTrue(hasattr(email_answer, 'answer_identifier')) - self.assertTrue(hasattr(email_answer, 'email_from')) - self.assertTrue(hasattr(email_answer, 'email_to')) - self.assertTrue(hasattr(email_answer, 'when')) - self.assertTrue(hasattr(email_answer, 'message_id')) - email_answer.subject = 'prueba4' - email_answer.content_text = 'prueba4lafieritaespeluda' - email_answer.content_html = '

prueba4lafieritaespeluda

' - email_answer.answer_identifier = '8974aabsdsfierapulgosa' - email_answer.email_from = 'falvarez@votainteligente.cl' - email_answer.email_to = 'Felipe ' - email_answer.when = 'Wed Jun 26 21:05:33 2013' - email_answer.message_id = '' - - self.assertTrue(email_answer) - self.assertEquals(email_answer.subject, 'prueba4') - self.assertEquals(email_answer.content_text, 'prueba4lafieritaespeluda') - self.assertEquals(email_answer.answer_identifier, '8974aabsdsfierapulgosa') - self.assertEquals(email_answer.email_from, 'falvarez@votainteligente.cl') - self.assertEquals(email_answer.email_to, 'Felipe ') - self.assertEquals(email_answer.when, 'Wed Jun 26 21:05:33 2013') - self.assertEquals(email_answer.message_id, '') - self.assertEquals(email_answer.content_html, '

prueba4lafieritaespeluda

') - - def test_getter_removes_the_identifier(self): - email_answer = EmailAnswer() - email_answer.subject = 'prueba4' - email_answer.answer_identifier = '8974aabsdsfierapulgosa' - email_answer.content_text = 'prueba4lafieritaespeluda y lo mandé desde este mail devteam+8974aabsdsfierapulgosa@chile.com' - self.assertFalse(email_answer.answer_identifier in email_answer.content_text) - self.assertNotIn("devteam+@chile.com", email_answer.content_text) - - def test_it_doesnt_contain_anything_of_the_original_email(self): - '''If I set the "To" header in the email and use it in the email_answer.recipient - then I should not be getting her/his email address in the content''' - email_answer = EmailAnswer() - email_answer.subject = 'prueba5' - email_answer.email_to = 'Tony ' - email_answer.answer_identifier = 'identifier123' - email_answer.content_text = ( - u'Thank you for your enquiry. I am completely in favour of this measure,\n' - u'and will certainly be voting for it.\n' - u'Tony \n' - u':') - # There is an intended extra space after the word 'Tony' - self.assertNotIn(' :', email_answer.content_text) - self.assertNotIn('Tony', email_answer.content_text) - - def test_the_email_answer_can_have_attachments(self): - '''An email answer can have attachments''' - email_answer = EmailAnswer() - email_answer.subject = 'prueba4' - email_answer.content_text = 'prueba4lafieritaespeluda' - email_answer.add_attachment(self.photo_fiera) - email_answer.add_attachment(self.pdf_file) - self.assertTrue(email_answer.attachments) - self.assertIn(self.photo_fiera, email_answer.attachments) - self.assertIn(self.pdf_file, email_answer.attachments) - - def test_email_answer_save(self): - email_answer = EmailAnswer() - email_answer.subject = 'prueba4' - outbound_identifier = self.message.outbound_identifiers.get(person=self.candidate1) - email_answer.answer_identifier = outbound_identifier.key - email_answer.content_text = 'Hola Hola esto es una prueba' - answer = email_answer.save() - self.assertIsInstance(answer, Answer) - self.assertEquals(answer.message, self.message) - self.assertEquals(answer.content, email_answer.content_text) - - @override_settings(MEDIA_ROOT=THE_CURRENT_MEDIA_ROOT) - def test_save_attachments_on_save(self): - '''When saving it also calls the save an attachment''' - email_answer = EmailAnswer() - outbound_identifier = self.message.outbound_identifiers.get(person=self.candidate1) - email_answer.answer_identifier = outbound_identifier.key - email_answer.subject = 'prueba4' - email_answer.content_text = 'prueba4lafieritaespeluda' - email_answer.add_attachment(self.photo_fiera) - email_answer.add_attachment(self.pdf_file) - answer = email_answer.save() - self.assertTrue(answer.attachments.filter(name=self.photo_fiera.name)) - self.assertTrue(answer.attachments.filter(name=self.pdf_file.name)) - - -class IncomingTest(IncomingEmailBase): - def setUp(self): - super(IncomingTest, self).setUp() - self.handler = EmailHandler() - - def test_handles_email(self): - answer_email = self.handler.handle(read_mail('mail')) - self.assertEquals(answer_email.subject, 'prueba4') - self.assertIn('prueba4lafieri', answer_email.content_html) - self.assertEquals(answer_email.answer_identifier, "4aaaabbb") - self.assertEquals(answer_email.email_from, '=?ISO-8859-1?Q?Felipe_=C1lvarez?= ') - self.assertEquals(answer_email.when, 'Wed, 26 Jun 2013 17:05:30 -0400') - self.assertEquals(answer_email.message_id, '') - - def test_logs_the_incoming_email(self): - with patch('logging.info') as info: - info.return_value = None - - answer_email = self.handler.handle(read_mail('mail')) - expected_log = 'New incoming email from %(from)s sent on %(date)s with subject %(subject)s and content %(content)s' - expected_log = expected_log % { - 'from': answer_email.email_from, - 'date': answer_email.when, - 'subject': answer_email.subject, - 'content': answer_email.content_text, - } - info.assert_called_with(expected_log) - - def test_mail_reading_management_command(self): - outbound_message = self.message.outbound_identifiers.first() - outbound_message.key = '4aaaabbb' - outbound_message.save() - - with patch('sys.stdin') as stdin: - stdin.attach_mock(readlines1_mock, 'readlines') - call_command('handleemail') - self.assertEquals(Answer.objects.count(), 1) - answer = Answer.objects.first() - - self.assertEquals(answer.message, self.message) - self.assertEquals(answer.person.person_ptr, outbound_message.person ) - self.assertEquals(answer.content, 'prueba4lafieri') diff --git a/preguntales/tests/ranking_tests.py b/preguntales/tests/ranking_tests.py deleted file mode 100644 index 13e5d738..00000000 --- a/preguntales/tests/ranking_tests.py +++ /dev/null @@ -1,273 +0,0 @@ -# coding=utf-8 -from elections.tests import VotaInteligenteTestCase as TestCase -from elections.models import Election, Candidate -from preguntales.models import Message, Answer -from preguntales.views import RankingMixin -from django.core.urlresolvers import reverse - - -class RankingTestCaseBase(TestCase): - def setUp(self): - self.election = Election.objects.get(id=1) - self.candidate1 = Candidate.objects.get(id=4) - self.candidate2 = Candidate.objects.get(id=5) - self.candidate3 = Candidate.objects.get(id=6) - self.candidate4 = Candidate.objects.create(name="Fiera") - self.candidate4.elections.add(self.election) - self.message = Message.objects.\ - create(election=self.election, - author_name='author', - author_email='author@email.com', - subject='subject', - content='content', - slug=u'subject-slugified', - accepted=True - ) - - self.message.people.add(self.candidate1) - self.message.people.add(self.candidate2) - self.message.people.add(self.candidate3) - self.message.people.add(self.candidate4) - self.ans11 = Answer.objects.create(content=u'a11', - message=self.message, - person=self.candidate1 - ) - - self.message2 = Message.objects\ - .create(election=self.election, - author_name='author', - author_email='author@email.com', - subject='subject', - content='content', - slug=u'subject-slugified', - accepted=True - ) - self.message2.people.add(self.candidate1) - self.message2.people.add(self.candidate2) - self.message2.people.add(self.candidate3) - self.message2.people.add(self.candidate4) - self.ans21 = Answer.objects.create(content=u'a21', - message=self.message2, - person=self.candidate1 - ) - self.ans22 = Answer.objects.create(content=u'a22', - message=self.message2, - person=self.candidate2 - ) - - self.message3 = Message.objects\ - .create(election=self.election, - author_name='author', - author_email='author@email.com', - subject='subject', - content='content', - slug='subject-slugified' - ) - self.message3.people.add(self.candidate1) - self.message3.people.add(self.candidate2) - self.message3.people.add(self.candidate3) - self.message3.people.add(self.candidate4) - - self.ans31 = Answer.objects.create(content=u'a31', - message=self.message3, - person=self.candidate1 - ) - - self.ans32 = Answer.objects.create(content=u'a32', - message=self.message3, - person=self.candidate2 - ) - - self.ans34 = Answer.objects.create(content=u'a34', - message=self.message3, - person=self.candidate4 - ) - self.message4 = Message.objects\ - .create(election=self.election, - author_name='author', - author_email='author@email.com', - subject='subject', - content='content', - slug='subject-slugified' - ) - self.message4.people.add(self.candidate1) - self.message4.people.add(self.candidate2) - self.message4.people.add(self.candidate3) - # this question wasn't asked to candidate 4 - # self.message4.people.add(self.candidate4) - - -class RankingTestCase(RankingTestCaseBase): - def test_mixin(self): - ranking_view = RankingMixin() - ranking_view.candidate_queryset = self.election.candidates.all() - - ranking = ranking_view.get_ranking() - self.assertEquals(len(ranking), 4) - - def test_get_all_messages(self): - ranking_view = RankingMixin() - ranking_view.candidate_queryset = self.election.candidates.all() - - self.assertEquals(ranking_view.all_messages().count(), 4) - self.assertIn(self.message, ranking_view.all_messages()) - self.assertIn(self.message2, ranking_view.all_messages()) - self.assertIn(self.message3, ranking_view.all_messages()) - self.assertIn(self.message4, ranking_view.all_messages()) - - def test_get_all_possible_answers(self): - ranking_view = RankingMixin() - ranking_view.candidate_queryset = self.election.candidates.all() - self.assertEquals(ranking_view.all_possible_answers(), 15) - - def test_get_actual_answered_questions(self): - ranking_view = RankingMixin() - ranking_view.candidate_queryset = self.election.candidates.all() - - self.assertEquals(ranking_view.actual_answers(), 6) - - def test_get_index(self): - ranking_view = RankingMixin() - ranking_view.candidate_queryset = Candidate.objects.all() - expected_index = float(15)/float(6) - self.assertEquals(ranking_view.success_index(), expected_index) - - def test_get_clasified_answered_and_questions_num(self): - ranking_view = RankingMixin() - ranking_view.candidate_queryset = self.election.candidates.all() - - clasified = ranking_view.get_clasified() - - self.assertEquals(clasified[0]['id'], self.candidate1.id) - self.assertEquals(clasified[0]['name'], self.candidate1.name) - self.assertEquals(clasified[0]['candidate'], self.candidate1) - self.assertEquals(clasified[0]['possible_answers'], 4) - - self.assertEquals(clasified[1]['name'], self.candidate2.name) - self.assertEquals(clasified[1]['id'], self.candidate2.id) - self.assertEquals(clasified[1]['candidate'], self.candidate2) - self.assertEquals(clasified[1]['possible_answers'], 4) - - self.assertEquals(clasified[2]['name'], self.candidate3.name) - self.assertEquals(clasified[2]['id'], self.candidate3.id) - self.assertEquals(clasified[2]['candidate'], self.candidate3) - self.assertEquals(clasified[2]['possible_answers'], 4) - - self.assertEquals(clasified[3]['name'], self.candidate4.name) - self.assertEquals(clasified[3]['id'], self.candidate4.id) - self.assertEquals(clasified[3]['candidate'], self.candidate4) - self.assertEquals(clasified[3]['possible_answers'], 3) - - self.assertEquals(clasified[0]['actual_answers'], 3) - self.assertEquals(clasified[1]['actual_answers'], 2) - self.assertEquals(clasified[2]['actual_answers'], 0) - self.assertEquals(clasified[3]['actual_answers'], 1) - - def test_clasified_points(self): - ranking_view = RankingMixin() - ranking_view.candidate_queryset = self.election.candidates.all() - - clasified = ranking_view.get_clasified() - - success_index = ranking_view.success_index() - - possible_answers = clasified[0]["possible_answers"] - actual_answers = clasified[0]["actual_answers"] - expected_points1 = (success_index*actual_answers - - (possible_answers-actual_answers))*possible_answers - - self.assertEquals(clasified[0]['points'], expected_points1) - - possible_answers = clasified[1]["possible_answers"] - actual_answers = clasified[1]["actual_answers"] - expected_points1 = (success_index*actual_answers - - (possible_answers-actual_answers))*possible_answers - - self.assertEquals(clasified[1]['points'], expected_points1) - - possible_answers = clasified[2]["possible_answers"] - actual_answers = clasified[2]["actual_answers"] - expected_points1 = (success_index*actual_answers - - (possible_answers-actual_answers))*possible_answers - - self.assertEquals(clasified[2]['points'], expected_points1) - - possible_answers = clasified[3]["possible_answers"] - actual_answers = clasified[3]["actual_answers"] - expected_points1 = (success_index*actual_answers - - (possible_answers-actual_answers))*possible_answers - - self.assertEquals(clasified[3]['points'], expected_points1) - - def test_get_ordered_clasified(self): - ranking_view = RankingMixin() - ranking_view.candidate_queryset = self.election.candidates.all() - - ordered = ranking_view.get_ordered() - - self.assertEquals(ordered[0]['candidate'], self.candidate1) - self.assertEquals(ordered[3]['candidate'], self.candidate3) - - def test_get_good_ones(self): - ranking_view = RankingMixin() - ranking_view.candidate_queryset = self.election.candidates.all() - - good = ranking_view.get_good() - self.assertEquals(len(good), 2) - self.assertEquals(good[0]['candidate'], self.candidate1) - is_candidate2_or_4 = good[1]['candidate'] == self.candidate2 \ - or good[1]['candidate'] == self.candidate4 - self.assertTrue(is_candidate2_or_4) - - def test_get_bad_ones(self): - ranking_view = RankingMixin() - ranking_view.candidate_queryset = self.election.candidates.all() - - bad = ranking_view.get_bad() - self.assertEquals(len(bad), 2) - self.assertEquals(bad[0]['candidate'], self.candidate3) - is_candidate2_or_4 = bad[1]['candidate'] == self.candidate2 \ - or bad[1]['candidate'] == self.candidate4 - self.assertTrue(is_candidate2_or_4) - - def test_reach_url_and_has_good_and_bad(self): - url = reverse('ranking_view', kwargs={'slug': self.election.slug}) - response = self.client.get(url) - self.assertEquals(response.status_code, 200) - self.assertEquals(response.context['election'], self.election) - self.assertIn('good', response.context) - self.assertEquals(len(response.context['good']), 2) - goods = response.context['good'] - bads = response.context['bad'] - - is_candidate2_or_4 = goods[1]['candidate'] == self.candidate2 \ - or goods['candidate'] == self.candidate4 - - self.assertEquals(goods[0]['candidate'], self.candidate1) - self.assertTrue(is_candidate2_or_4) - - self.assertIn('bad', response.context) - self.assertEquals(len(bads), 2) - - is_candidate2_or_4 = bads[1]['candidate'] == self.candidate2 \ - or bads[1]['candidate'] == self.candidate4 - - self.assertEquals(bads[0]['candidate'], self.candidate3) - - -class QuestionsPerCandidateViewTestCase(RankingTestCaseBase): - def test_it_is_reachable(self): - reverse_url = reverse('questions_per_candidate', - kwargs={'election_slug': self.election.slug, - 'slug': self.candidate1.slug}) - response = self.client.get(reverse_url) - self.assertEquals(response.status_code, 200) - self.assertIn('candidate', response.context) - self.assertEquals(response.context['candidate'], self.candidate1) - self.assertTemplateUsed(response, - 'elections/questions_per_candidate.html') - self.assertIn('questions', response.context) - expected_messages = list(Message.objects. - filter(people=self.candidate1)) - actual_messages = list(response.context['questions']) - self.assertEquals(actual_messages, expected_messages) diff --git a/preguntales/tests/testing_mails/attachments/fiera_parque.jpg b/preguntales/tests/testing_mails/attachments/fiera_parque.jpg deleted file mode 100644 index 9efac6d4..00000000 Binary files a/preguntales/tests/testing_mails/attachments/fiera_parque.jpg and /dev/null differ diff --git a/preguntales/tests/testing_mails/attachments/hello.pd.pdf b/preguntales/tests/testing_mails/attachments/hello.pd.pdf deleted file mode 100644 index c304aa12..00000000 Binary files a/preguntales/tests/testing_mails/attachments/hello.pd.pdf and /dev/null differ diff --git a/preguntales/tests/testing_mails/bounced_mail.txt b/preguntales/tests/testing_mails/bounced_mail.txt deleted file mode 100644 index 8a3d1dc0..00000000 --- a/preguntales/tests/testing_mails/bounced_mail.txt +++ /dev/null @@ -1,93 +0,0 @@ - -Delivered-To: devteam+4aaaabbb@writeit.ciudadanointeligente.org -Received: by 10.52.240.74 with SMTP id vy10csp167195vdc; - Thu, 5 Sep 2013 09:44:27 -0700 (PDT) -Received-SPF: pass (google.com: domain of designates 10.52.75.165 as permitted sender) client-ip=10.52.75.165 -Authentication-Results: mr.google.com; - spf=pass (google.com: domain of designates 10.52.75.165 as permitted sender) smtp.mail=; - dkim=pass header.i=@googlemail.com -X-Received: from mr.google.com ([10.52.75.165]) - by 10.52.75.165 with SMTP id d5mr3349521vdw.1.1378399467052 (num_hops = 1); - Thu, 05 Sep 2013 09:44:27 -0700 (PDT) -DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=googlemail.com; s=20120113; - h=mime-version:from:to:subject:message-id:date:content-type - :content-transfer-encoding; - bh=SvG+WimOax+qepD0vIoxNZo7S7XLjJJq0X0iUtH265M=; - b=XVZiXvKIsXyuHV48myIEdT/n+eqsigvf5PL+dJQpm6fok6byPs8zGvOSeFRbMQ0Ec7 - SWeSljdgvjkFF0bAwLK2qhAqmw5NY7WaPMKOYTRKN1ce2GoA5udCtJsaUmyZmQZhPW9G - tuTuk0ANsXh3riJ+In0VHygfFpbHqLFSl/hvxk3txuNY0Hoz0mOHpgSIeTRNs/v3qLMu - c6/KcjNdhp6UEOV35ymyhYcILAD26PbpAZMTdyf84acm8MvqF2qymQGwFrhDAjF5U6Gw - mXxGDtCApVIl+4Izj8dTpHGaTpqWlg5RwEL18eJFfsTZh+u5vbBAIBZzwCvZwhAQLd3R - La7w== -X-Received: by 10.52.75.165 with SMTP id d5mr3349521vdw.1.1378399467049; - Thu, 05 Sep 2013 09:44:27 -0700 (PDT) -MIME-Version: 1.0 -Return-Path: <> -Received: by 10.52.75.165 with SMTP id d5mr3848060vdw.1; Thu, 05 Sep 2013 - 09:44:27 -0700 (PDT) -From: Mail Delivery Subsystem -To: devteam+4aaaabbb@writeit.ciudadanointeligente.org -X-Failed-Recipients: mailnoexistente@ciudadanointeligente.org -Subject: Delivery Status Notification (Failure) -Message-ID: <20cf3071c9fc97929504e5a5a290@google.com> -Date: Thu, 05 Sep 2013 16:44:27 +0000 -Content-Type: text/plain; charset=ISO-8859-1 -Content-Transfer-Encoding: quoted-printable - -Delivery to the following recipient failed permanently: - - mailnoexistente@ciudadanointeligente.org - -Technical details of permanent failure:=20 -Google tried to deliver your message, but it was rejected by the server for= - the recipient domain ciudadanointeligente.org by aspmx.l.google.com. [2607= -:f8b0:400c:c03::1b]. - -The error that the other server returned was: -550-5.1.1 The email account that you tried to reach does not exist. Please = -try -550-5.1.1 double-checking the recipient's email address for typos or -550-5.1.1 unnecessary spaces. Learn more at -550 5.1.1 http://support.google.com/mail/bin/answer.py?answer=3D6596 ya5si7= -458192vec.57 - gsmtp - ------ Original message ----- - -DKIM-Signature: v=3D1; a=3Drsa-sha256; c=3Drelaxed/relaxed; - d=3Dgmail.com; s=3D20120113; - h=3Dmime-version:from:date:message-id:subject:to:content-type; - bh=3DzNVoSOoKdoZlSHXGy1P5aABIGlgnKxEhpo3ZfzsfPM0=3D; - b=3DQD4Qw5+DkDZzLLhQg3utNw4TQ27ZcyxfyljVhE/HOjKBmxBn5jKdzKWkQn1U0Nq= -1VU - SH3lpk2MrzxEkT8j3vVQu5GVQfdmIKjgLAQBsVvwZFSPJ8eyZhkkRtPLn8Sc252F0Q= -6E - QC+kXyKJ/K950lG5hgfU8UuAIU13atCDQJh3GtVUiIYBXcsI3GH9M80MZN4niw3Gb0= -Xp - Kq50Ad6EX6dpA9qQM/K8nKMF5svx7OCtvdEtvGqOCTTgMF49rzPnSq25+WyrFsKUVY= -KT - MSMeZLFP85u8bjGmMcb9w+c1qvronORru3AxlSsaNx1jyKxx0xSOi8KH3tsfFUcxVe= -U8 - J38A=3D=3D -X-Received: by 10.52.75.165 with SMTP id d5mr3349515vdw.1.1378399466953; Th= -u, - 05 Sep 2013 09:44:26 -0700 (PDT) -MIME-Version: 1.0 -Received: by 10.52.240.74 with HTTP; Thu, 5 Sep 2013 09:44:06 -0700 (PDT) -From: =3D?ISO-8859-1?Q?Luis_Felipe_=3DC1lvarez_Burgos?=3D -Date: Thu, 5 Sep 2013 12:44:06 -0400 -Message-ID: -Subject: ola quiero responder a tu pregunta -To: mailnoexistente@ciudadanointeligente.org -Content-Type: multipart/alternative; boundary=3D20cf3071c9fc96216804e5a5a26= -8 - -tu pregunta est=E1 terrible de wena pero va a rebotar este mail - -y lo voy a diseccionar - -Luis Felipe =C1lvarez Burgos -Skype: luisfelipealvarezburgos -Twitter: @lfalvarez \ No newline at end of file diff --git a/preguntales/tests/testing_mails/bounced_mail2.txt b/preguntales/tests/testing_mails/bounced_mail2.txt deleted file mode 100644 index 2f02954c..00000000 --- a/preguntales/tests/testing_mails/bounced_mail2.txt +++ /dev/null @@ -1,87 +0,0 @@ -From MAILER-DAEMON Wed Sep 04 22:42:07 2013 -Received: from a193-161.smtp-out.amazonses.com ([199.255.193.161]) - by ip-10-171-123-43.us-west-1.compute.internal with esmtp (Exim 4.76) - id 1VHLm3-0000sG-8O - for devteam+4aaaabbb@writeit.ciudadanointeligente.org; Wed, 04 Sep 2013 22:42:07 +0000 -Date: Wed, 4 Sep 2013 22:42:31 +0000 -From: MAILER-DAEMON@amazonses.com -To: devteam+4aaaabbb@writeit.ciudadanointeligente.org -Message-ID: <00000140eb242d07-e3cb979c-c295-4c36-8e91-633ec6b7916e-000000@email.amazonses.com> -Subject: Delivery Status Notification (Failure) -MIME-Version: 1.0 -Content-Type: multipart/report; - boundary="----=_Part_2996096_1689090415.1378334551390"; - report-type=delivery-status -X-SES-Outgoing: 199.255.193.161 - -------=_Part_2996096_1689090415.1378334551390 -Content-Type: text/plain; charset=us-ascii -Content-Transfer-Encoding: 7bit - -An error occurred while trying to deliver the mail to the following recipients: -mailnoexistente@ciudadanointeligente.org -------=_Part_2996096_1689090415.1378334551390 -Content-Type: message/delivery-status; name=status.dat -Content-Transfer-Encoding: 7bit -Content-Description: Delivery Status Notification -Content-Disposition: attachment; filename=status.dat - -Reporting-MTA: dsn; a8-98.smtp-out.amazonses.com - -Final-Recipient: rfc822; mailnoexistente@ciudadanointeligente.org -Action: failed -Diagnostic-Code: smtp; 550-5.1.1 The email account that you tried to reach does not exist. Please try - 550-5.1.1 double-checking the recipient's email address for typos or - 550-5.1.1 unnecessary spaces. Learn more at - 550 5.1.1 http://support.google.com/mail/bin/answer.py?answer=6596 hi8si2069400qeb.18 - gsmtp -Status: 5.1.1 - - -------=_Part_2996096_1689090415.1378334551390 -Content-Type: message/rfc822; name="New Message on writeit" -Content-Disposition: attachment; filename="New Message on writeit" - -Return-Path: 00000140eb242a3f-7ee2d3e0-c69c-4629-a289-48e5cf29bfca-000000@amazonses.com -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 8bit -Subject: New Message on writeit -From: Felipe - -To: mailnoexistente@ciudadanointeligente.org -Date: Wed, 4 Sep 2013 22:42:30 +0000 -Message-ID: <00000140eb242a3f-7ee2d3e0-c69c-4629-a289-48e5cf29bfca-000000@email.amazonses.com> -X-SES-Outgoing: 2013.09.04-54.240.8.98 - -Hello Felipe Álvarez: -You have a new message on writeit: - -From: Felipe -Subject: ola ke ase? -Content: bounce bounce - -In order to answer you have to reply to this email.(Do it please) - -If you want to see all the other messages please visit http://devteam.writeit.ciudadanointeligente.org/en-us/. -Kind regards --- -You writeIt and we deliverit. -------=_Part_2996096_1689090415.1378334551390-- - -tail: bouncemail.txt: file truncated -From MAILER-DAEMON Wed Sep 04 22:42:08 2013 -Received: from Debian-exim by ip-10-171-123-43.us-west-1.compute.internal with local (Exim 4.76) - id 1VHLm4-0000sY-Pf - for postmaster@writeit.ciudadanointeligente.org; Wed, 04 Sep 2013 22:42:08 +0000 -Auto-Submitted: auto-replied -From: Mail Delivery System -To: postmaster@writeit.ciudadanointeligente.org -Subject: Message frozen -Message-Id: -Date: Wed, 04 Sep 2013 22:42:08 +0000 - -Message 1VHLm3-0000sG-8O has been frozen (delivery error message). -The sender is <>. - -The following address(es) have yet to be delivered: - |/home/ubuntu/writeit/write-it/mailit/bin/handleemails.sh : Child process of address_pipe transport returned 1 from command: /home/ubuntu/writeit/write-it/mailit/bin/handleemails.sh \ No newline at end of file diff --git a/preguntales/tests/testing_mails/example1_gmail.txt b/preguntales/tests/testing_mails/example1_gmail.txt deleted file mode 100644 index f24a9059..00000000 --- a/preguntales/tests/testing_mails/example1_gmail.txt +++ /dev/null @@ -1,125 +0,0 @@ - - - - -From falvarez@votainteligente.cl Tue Nov 05 14:16:39 2013 -Received: from mail-ie0-f169.google.com ([209.85.223.169]) - by ip-10-171-123-43.us-west-1.compute.internal with esmtp (Exim 4.76) - (envelope-from ) - id 1VdhQt-00010n-GP - for coolteam+7e460e9c462411e38ef81231400178dd@writeit.ciudadanointeligente.org; Tue, 05 Nov 2013 14:16:39 +0000 -Received: by mail-ie0-f169.google.com with SMTP id ar20so15396435iec.0 - for ; Tue, 05 Nov 2013 06:16:34 -0800 (PST) -X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=1e100.net; s=20130820; - h=x-gm-message-state:mime-version:sender:in-reply-to:references:date - :message-id:subject:from:to:content-type; - bh=JHORGUPgb0ZpctqDb1ovC2574eppom/3a/jAJXiYbMA=; - b=SS4W3g71f8anBTaQLA6Eso0zCc8EotRD+4FR7gadQUPz7+By66xFq2S9Dp9+AbsBOS - kK8VthrVcIQ5WArQQvCGo14U23TCtqED1BaK2d1ggqoS8WBlu/+P7vpPdhGMxdMObd2K - 2JcNytTSrNarMa+TpO307S90N9r44hZ8RbR+xD2ngeStIJRnFueJ6YFdFu0KXFDZBttA - Lt/z+0Dy3qcwmaRCR/TfrbOdXmWg8B612ZPCvzXfv5Ofsa7/tt2qyy2Gjpo/lFJL+1hA - fgR44zV1k56UXHyKSDotDHdLblrFIeX/bFubsfZdbM7G2fF/llqdlxnnm2lmNT4RpPZT - 2Seg== -X-Gm-Message-State: ALoCoQlNUt+Jhiw+RdBKncf89mYU+La5Vx7ewOUoBiZvGgtOiCT5jawsBakqnEbcywQNzBywPBi4 -MIME-Version: 1.0 -X-Received: by 10.50.30.229 with SMTP id v5mr16019934igh.27.1383660994341; - Tue, 05 Nov 2013 06:16:34 -0800 (PST) -Sender: falvarez@votainteligente.cl -Received: by 10.64.15.66 with HTTP; Tue, 5 Nov 2013 06:16:34 -0800 (PST) -X-Originating-IP: [190.96.24.179] -In-Reply-To: <00000142289cedb3-fb946ca4-e40c-43f1-9569-7dc03a45f1f7-000000@email.amazonses.com> -References: <00000142289cedb3-fb946ca4-e40c-43f1-9569-7dc03a45f1f7-000000@email.amazonses.com> -Date: Tue, 5 Nov 2013 11:16:34 -0300 -X-Google-Sender-Auth: icY-TI2I1rHpfUvVsMDEh_aEPps -Message-ID: -Subject: =?ISO-8859-1?Q?Re=3A_=5BVotaInteligente=5D_Un_ciudadano_est=E1_interesado_?= - =?ISO-8859-1?Q?en_saber_m=E1s_informaci=F3n_de_ti?= -From: =?ISO-8859-1?Q?Felipe_=C1lvarez?= -To: Felipe -Content-Type: multipart/alternative; boundary=047d7bacc30c0f7d7404ea6eae1c - ---047d7bacc30c0f7d7404ea6eae1c -Content-Type: text/plain; charset=ISO-8859-1 -Content-Transfer-Encoding: quoted-printable - -si prueba no m=E1s - - -On 5 November 2013 11:14, Felipe < -coolteam+7e460e9c462411e38ef81231400178dd@writeit.ciudadanointeligente.org>= -wrote: - -> Hello Felipe: -> You have a new message on writeit: -> -> From: Felipe -> Subject: estoy probando proband -> Content: est=E1s perdiendo el tiempo pensando pensando -> -> In order to answer you have to reply to this email.(Do it please) -> -> If you want to see all the other messages please visit -> http://coolteam.writeit.ciudadanointeligente.org/en-us/. -> Kind regards -> -- -> You writeIt and we deliverit. -> - - - ---=20 - -*Felipe =C1lvarez* -Desarrollador de Aplicaciones Web -Skype: luisfelipealvarezburgos -Twitter: @lfalvarez -Celular: +56973961732 -*Fundaci=F3n Ciudadano Inteligente* -Holanda 895 - Providencia, Santiago de Chile. -CiudadanoInteligente.cl | -@ciudadanoi - | (56-2) 419 27 70 - ---047d7bacc30c0f7d7404ea6eae1c -Content-Type: text/html; charset=ISO-8859-1 -Content-Transfer-Encoding: quoted-printable - -
si prueba no m=E1s

On 5 November 2013 11:14, Felipe <coolteam+7e460e9c462411e38ef81= -231400178dd@writeit.ciudadanointeligente.org> wrote:
-
Hello Felipe:
-You have a new message on writeit:
-
-From: =A0Felipe
-Subject: =A0 estoy probando proband
-Content: =A0est=E1s perdiendo el tiempo pensando pensando
-
-In order to answer you have to reply to this email.(Do it please)
-
-If you want to see all the other messages please visit http://co= -olteam.writeit.ciudadanointeligente.org/en-us/.
-Kind regards
---
-You writeIt and we deliverit.
-



--
Felipe =C1lvarez
Desarrollador de Aplicacion= -es Web
-Skype: luisfelipealvarezburgos
Twitter: @lfalvarez
Celular: +56973961732<= -br>
Fundaci=F3n Ciudadano Inteligente
-
Holanda 895 -= - Providencia, Santiago de Chile.=A0
CiudadanoInteligente.cl=A0|=A0@ciudadanoi=A0|=A0= -(56-2) 419 27 70
- -
- ---047d7bacc30c0f7d7404ea6eae1c-- diff --git a/preguntales/tests/testing_mails/example2_gmail.txt b/preguntales/tests/testing_mails/example2_gmail.txt deleted file mode 100644 index c32bbfbe..00000000 --- a/preguntales/tests/testing_mails/example2_gmail.txt +++ /dev/null @@ -1,138 +0,0 @@ - - - - -From falvarez@ciudadanointeligente.cl Mon Nov 04 22:33:17 2013 -Received: from mail-ie0-f171.google.com ([209.85.223.171]) - by ip-10-171-123-43.us-west-1.compute.internal with esmtp (Exim 4.76) - (envelope-from ) - id 1VdShx-0000n0-Fr - for coolteam+7e460e9c462411e38ef81231400178dd@writeit.ciudadanointeligente.org; Mon, 04 Nov 2013 22:33:17 +0000 -Received: by mail-ie0-f171.google.com with SMTP id tp5so13987507ieb.30 - for ; Mon, 04 Nov 2013 14:33:12 -0800 (PST) -X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=1e100.net; s=20130820; - h=x-gm-message-state:mime-version:sender:in-reply-to:references:date - :message-id:subject:from:to:content-type; - bh=9YRvu/4T0HQMg/eS229m4rcTGRoea5Xs8CIuV7Tg9Pw=; - b=cvr94OISrf0xbxwEJAzFeRxUSC2LJERux+qHDl6Yns4MQ3ZEEhIgk+d/PRxkAm1CVg - Bm+3vnJs5n1ypK4J50kJocIa+wL3A6CUJFrwU5ZPRdfLJLmRhK5Orqo81eIdWVNVetBj - HEJys2fDt3PQOzjAnAJwK01MqklL8nXEjisFPxQ9iuVDOeF60bICz3g+N/pejE/a2jfV - Opye4DBvmShcoOzGReAEUAqAmKQX/jIFuMKuxryOF1e9bG5Vjz1sg4ThB1o1tsZAMwaG - RGumHhsoxXZOsNdflE3pzBtxVdS/yhkOdIx3GQwbg5P2Q9++VUjeKy0uiBJgpfeBS/k2 - XZmg== -X-Gm-Message-State: ALoCoQk+EH3F8zFovp8vml2d2TsWEFqANkCDGE3EDnAsjsTk55Ria7nnNMAz/GVa3QnnwEeG9Jj2 -MIME-Version: 1.0 -X-Received: by 10.50.51.68 with SMTP id i4mr13865643igo.22.1383604392156; Mon, - 04 Nov 2013 14:33:12 -0800 (PST) -Sender: falvarez@ciudadanointeligente.cl -Received: by 10.64.15.66 with HTTP; Mon, 4 Nov 2013 14:33:12 -0800 (PST) -X-Originating-IP: [190.101.81.106] -In-Reply-To: <00000141e4f0a581-3f4ac300-6a7e-426c-b55a-3180674aa13b-000000@email.amazonses.com> -References: <00000141e4f0a581-3f4ac300-6a7e-426c-b55a-3180674aa13b-000000@email.amazonses.com> -Date: Mon, 4 Nov 2013 22:33:12 +0000 -X-Google-Sender-Auth: rt9w4zUPoJ4PYdu8Lpdynsr6xeI -Message-ID: -Subject: =?ISO-8859-1?Q?Re=3A_=5BVotaInteligente=5D_Un_ciudadano_est=E1_interesado_?= - =?ISO-8859-1?Q?en_saber_m=E1s_informaci=F3n_de_ti?= -From: =?ISO-8859-1?Q?Felipe_=C1lvarez?= -To: Felipe -Content-Type: multipart/alternative; boundary=001a1134acb84df61604ea6180c6 - ---001a1134acb84df61604ea6180c6 -Content-Type: text/plain; charset=ISO-8859-1 -Content-Transfer-Encoding: quoted-printable - -de nuevo de nuevo - - -2013/10/23 Felipe < -coolteam+7e460e9c462411e38ef81231400178dd@writeit.ciudadanointeligente.org> - -> Estimada/o Felipe: -> Un/a ciudadana/o est=E1 interesada/o en saber m=E1s sobre su candidatura = -y ha -> utilizado votainteligente.cl para comunicarse con usted: -> -> ************************************************************* -> me equivoqu=E9 -> ________________________________________ -> -> y por eso estoy prbando -> -> ************************************************************* -> -> Para contestar al/a ciudadana/o simplemente responda a este mail. -> -> Tanto el contenido de la pregunta como la respuesta quedar=E1 publicada e= -n -> votainteligente.cl -> Muchas gracias -> -- -> Equipo votainteligente.cl -> - - - ---=20 - -*Felipe =C1lvarez* -Desarrollador de Aplicaciones Web -Skype: luisfelipealvarezburgos -Twitter: @lfalvarez -Celular: +56973961732 -*Fundaci=F3n Ciudadano Inteligente* -Holanda 895 - Providencia, Santiago de Chile. -CiudadanoInteligente.cl | -@ciudadanoi - | (56-2) 419 27 70 - ---001a1134acb84df61604ea6180c6 -Content-Type: text/html; charset=ISO-8859-1 -Content-Transfer-Encoding: quoted-printable - -
de nuevo de nuevo


= -
2013/10/23 Felipe <coolteam+7e460e9c462411e38ef81231400178dd@wri= -teit.ciudadanointeligente.org>
-
Estimada/o Felipe:
-Un/a ciudadana/o est=E1 interesada/o en saber m=E1s sobre su candidatura y = -ha utilizado votain= -teligente.cl para comunicarse con usted:
-
-*************************************************************
-me equivoqu=E9
-________________________________________
-
-y por eso estoy prbando
-
-*************************************************************
-
-Para contestar al/a ciudadana/o simplemente responda a este mail.
-
-Tanto el contenido de la pregunta como la respuesta quedar=E1 publicada en = -votainteligente.cl<= -/a>
-Muchas gracias
---
-Equipo
votaintelige= -nte.cl
-



--
Felipe =C1lvarez
Desarrollador de Aplicacion= -es Web
-Skype: luisfelipealvarezburgos
Twitter: @lfalvarez
Celular: +56973961732<= -br>
Fundaci=F3n Ciudadano Inteligente
-
Holanda 895 -= - Providencia, Santiago de Chile.=A0
CiudadanoInteligente.cl=A0|=A0@ciudadanoi=A0|=A0= -(56-2) 419 27 70
- -
- ---001a1134acb84df61604ea6180c6-- diff --git a/preguntales/tests/testing_mails/example3_ipad.txt b/preguntales/tests/testing_mails/example3_ipad.txt deleted file mode 100644 index eaf36cb3..00000000 --- a/preguntales/tests/testing_mails/example3_ipad.txt +++ /dev/null @@ -1,75 +0,0 @@ - - - - -From falvarez@votainteligente.cl Tue Nov 05 01:19:10 2013 -Received: from mail-qa0-f41.google.com ([209.85.216.41]) - by ip-10-171-123-43.us-west-1.compute.internal with esmtp (Exim 4.76) - (envelope-from ) - id 1VdVIT-0000nf-T5 - for diputados-por-distrito-23+43a16afe42f311e390aa1231400178dd@writeit.ciudadanointeligente.org; Tue, 05 Nov 2013 01:19:09 +0000 -Received: by mail-qa0-f41.google.com with SMTP id k4so717855qaq.0 - for ; Mon, 04 Nov 2013 17:19:04 -0800 (PST) -X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=1e100.net; s=20130820; - h=x-gm-message-state:subject:references:from:content-type:in-reply-to - :message-id:date:to:content-transfer-encoding:mime-version; - bh=2AABihRBKJGTyNlZDOaPIlD/j1oYm8pjVgmpstRMD20=; - b=kmbiuOYG4GMBBbrZgn3qAyxpVTNxB5wmcddszZ2RwPD7PgUL/BjABFhD5GOZ43ol4r - KewtUjZaxSEnms3FGRq+cKFRblQL0BWLrWtx9LPOW5VEjBLmhg/6Jnr4pP7Of10dKFsD - +TOFqajDd/heuPcrYUTzzHw4no6b3kXXUSEvFXd1OBluRL4FpvY2sNfZjLYJ2PHjCAUj - 9beNITZoIxHbkqmkIQmulql2TvasDMYVa+Cd8PnrztSMxZpoRf/bO3keUmQGaWA3FA3M - 84ZfZrW9VrtgD2HG1NSZtEy+NaU345D1PkZot+uky36XSxJYGDPLVLM2ZNmATbnpwBF3 - xocg== -X-Gm-Message-State: ALoCoQnb5qNexgAOfwpKLsAu40ZbaHLuxgVT6/OeRImRbIfk/hCbdyt0f/W+TSxXhMQcv6p8UJaE -X-Received: by 10.49.25.47 with SMTP id z15mr25757185qef.27.1383614344433; - Mon, 04 Nov 2013 17:19:04 -0800 (PST) -Received: from [201.188.82.241] ([201.188.82.241]) - by mx.google.com with ESMTPSA id 5sm61279953qao.3.2013.11.04.17.19.02 - for - (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); - Mon, 04 Nov 2013 17:19:03 -0800 (PST) -Subject: =?utf-8?Q?Re:_[VotaInteligente]_Un_ciudadano_est=C3=A1_interesad?= - =?utf-8?Q?o_en_saber_m=C3=A1s_informaci=C3=B3n_de_ti?= -References: <0000014213b271eb-2666a399-1d22-4088-bba3-0a3bf0771258-000000@email.amazonses.com> -From: Cristian Monckeberg -Content-Type: text/plain; - charset=utf-8 -X-Mailer: iPad Mail (10B329) -In-Reply-To: <0000014213b271eb-2666a399-1d22-4088-bba3-0a3bf0771258-000000@email.amazonses.com> -Message-Id: <7BD51311-B822-4FB4-92FF-0D76BE641755@rn.cl> -Date: Mon, 4 Nov 2013 22:18:59 -0300 -To: Cro -Content-Transfer-Encoding: quoted-printable -Mime-Version: 1.0 (1.0) - -Primero que todo los felicito por la iniciativa , ojal=C3=A1 lleguen m=C3=A1= -s preguntas . - - -> Estimada/o Cristi=C3=A1n Monckeberg Bruner: ->=20 -> Un/a ciudadana/o esta interesada/o en saber mas sobre su candidatura y ha u= -tilizado votainteligente.cl para comunicarse con usted: ->=20 -> Titulo: ->=20 -> "Codelco " ->=20 -> Contenido: ->=20 -> Cual es su postura con respecto al proyecto de expansi=C3=B3n de codelco, e= -n sector de Los Bronces, lo Barnechea? ->=20 ->=20 -> Para contestar al/a ciudadana/o simplemente responda a este mail. ->=20 -> Tanto el contenido de la pregunta como la respuesta quedara publicada en v= -otainteligente.cl ->=20 -> Muchas gracias ->=20 -> PD: Si llega a tener alg=C3=BAn problema no dude en contactar a dtejada@vo= -tainteligente.cl y lab@votainteligente.cl -> -- -> Equipo votainteligente.cl diff --git a/preguntales/tests/testing_mails/example4_hotmail.txt b/preguntales/tests/testing_mails/example4_hotmail.txt deleted file mode 100644 index 0cfc047f..00000000 --- a/preguntales/tests/testing_mails/example4_hotmail.txt +++ /dev/null @@ -1,160 +0,0 @@ - - - - -From falvarez@ciudadanointeligente.cl Wed Nov 06 03:27:50 2013 -Received: from col0-omc2-s1.col0.hotmail.com ([65.55.34.75]) - by ip-10-171-123-43.us-west-1.compute.internal with esmtp (Exim 4.76) - (envelope-from ) - id 1VdtmY-0001IE-DX - for diputados-por-distrito-14+7e460e9c462411e38ef81231400178dd@writeit.ciudadanointeligente.org; Wed, 06 Nov 2013 03:27:50 +0000 -Received: from COL126-W16 ([65.55.34.73]) by col0-omc2-s1.col0.hotmail.com with Microsoft SMTPSVC(6.0.3790.4675); - Tue, 5 Nov 2013 19:27:46 -0800 -X-TMN: [B98MV5I9yJwY2yX68bjip64TWrEGB+wb] -X-Originating-Email: [falvarez@ciudadanointeligente.cl] -Message-ID: -Content-Type: multipart/alternative; - boundary="_b0c55162-d7a5-4c0f-ba0f-b51d9bc36e80_" -From: victor ugarte -To: Wladimir - -Subject: =?iso-8859-1?Q?RE:_[VotaI?= =?iso-8859-1?Q?nteligente?= - =?iso-8859-1?Q?]_Un_ciuda?= =?iso-8859-1?Q?dano_est=E1_?= - =?iso-8859-1?Q?interesado?= =?iso-8859-1?Q?_en_saber_?= - =?iso-8859-1?Q?m=E1s_inform?= =?iso-8859-1?Q?aci=F3n_de_t?= - =?iso-8859-1?Q?i?= -Date: Wed, 6 Nov 2013 03:27:46 +0000 -Importance: Normal -In-Reply-To: - <0000014213abbaf5-21b32757-437c-433b-b129-e79d959216ee-000000@email.amazonses.com> -References: - <0000014213abbaf5-21b32757-437c-433b-b129-e79d959216ee-000000@email.amazonses.com> -MIME-Version: 1.0 -X-OriginalArrivalTime: 06 Nov 2013 03:27:46.0349 (UTC) FILETIME=[2956A5D0:01CEDAA0] - ---_b0c55162-d7a5-4c0f-ba0f-b51d9bc36e80_ -Content-Type: text/plain; charset="iso-8859-1" -Content-Transfer-Encoding: quoted-printable - -Wladimir: -Primero que todo me disculpo por la tardanza en responder tu inquietud=3B r= -especto a aquella=2C en nuestro programa de gobierno del movimiento todos a= - la moneda=2C cuyo vocero principal es Marcel Claude=2C tenemos la intenci= -=F3n de cambiar el codigo laboral=2C en direcci=F3n de fortalecer al trabaj= -ador en relaci=F3n a su empleador=2C dignificar al trabajador chileno=2C y= - en esta idea podemos presentar la iniciativa de rebajar la jornada labo= -ral=2C que sumado a los traslados desde la casa al trabajo y viceversa el= - trabajad@r chilen@ est=E1 ausente m=E1s de 10 horas de su hogar despreocup= -=E1ndose de otras labores fundamentales en la familia.=20 - -=0A= -=0A= -Victor Ugarte DuqueCandidato a Diputado por Vi=F1a del Mar y Conc=F3n -Ayudante Meritante en la l=EDnea de Am=E9rica Nacional=2C Contempor=E1nea = -e Historia Social -Estudiante de Pedagog=EDa en Historia y Geograf=EDa -Universidad de Playa Ancha=20 - -> Subject: [VotaInteligente] Un ciudadano est=E1 interesado en saber m=E1s = -informaci=F3n de ti -> From: diputados-por-distrito-14+7e460e9c462411e38ef81231400178dd@writeit.= -ciudadanointeligente.org -> To: falvarez@ciudadanointeligente.cl -> Date: Fri=2C 1 Nov 2013 12:38:11 +0000 ->=20 -> Estimada/o V=EDctor Ugarte Duque: ->=20 -> Un/a ciudadana/o esta interesada/o en saber mas sobre su candidatura y ha= - utilizado votainteligente.cl para comunicarse con usted: ->=20 -> Titulo: ->=20 -> "Disminucion de Horas de trabajo " ->=20 -> Contenido: ->=20 -> En Chile trabajamos 45 horas semanales=2C sin embargo por las altas conge= -stiones=2C los problemas de locomoci=F3n y las grandes distancias=2C las pe= -rsonas llegan muy tarde a sus casas=2C y comparten poco con la familia=2C c= -on el fin de mejorar el bienestar y mejorar la calidad de vida=2C me gustar= -=EDa saber quien tiene contemplado la disminuci=F3n de horas de trabajo.=20 ->=20 ->=20 -> Para contestar al/a ciudadana/o simplemente responda a este mail. ->=20 -> Tanto el contenido de la pregunta como la respuesta quedara publicada en = -votainteligente.cl ->=20 -> Muchas gracias ->=20 -> PD: Si llega a tener alg=FAn problema no dude en contactar a dtejada@vota= -inteligente.cl y lab@votainteligente.cl -> -- -> Equipo votainteligente.cl - = - ---_b0c55162-d7a5-4c0f-ba0f-b51d9bc36e80_ -Content-Type: text/html; charset="iso-8859-1" -Content-Transfer-Encoding: quoted-printable - - - - -
Wladimir:
Primero que todo me= - disculpo por la tardanza en responder tu inquietud=3B respecto a aquella= -=2C en nuestro programa de gobierno del movimiento todos a la moneda=2C cuy= -o vocero principal es Marcel Claude=2C  =3Btenemos la intenci=F3n de ca= -mbiar el codigo laboral=2C en direcci=F3n de fortalecer al trabajador en re= -laci=F3n a su empleador=2C dignificar al trabajador chileno=2C  =3By en= - esta idea  =3Bpodemos  =3Bpresentar la  =3Biniciativa de rebaj= -ar la jornada laboral=2C  =3Bque sumado a los traslados  =3Bdesde l= -a casa al trabajo y viceversa el trabajad@r chilen@ est=E1 ausente m=E1s de= - 10 horas de su hogar despreocup=E1ndose de otras labores fundamentales en = -la familia. =3B


=0A= -
=0A= -
Victo= -r Ugarte Duque
Candidato a Diputado por Vi=F1a del Mar y Conc=F3= -n
Ayudante Meritante en la l=EDnea de  =3BAm=E9rica Nacional=2C Cont= -empor=E1nea e Historia Social
Estudiante de Pedagog=EDa en Historia y Ge= -ograf=EDa
Universidad de Playa Ancha
 =3B


>=3B Subject: [VotaInteligente] Un ciudadano = -est=E1 interesado en saber m=E1s informaci=F3n de ti
>=3B From: diputa= -dos-por-distrito-14+7e460e9c462411e38ef81231400178dd@writeit.ciudadanointel= -igente.org
>=3B To: falvarez@ciudadanointeligente.cl
>=3B Date: Fri= -=2C 1 Nov 2013 12:38:11 +0000
>=3B
>=3B Estimada/o V=EDctor Ugar= -te Duque:
>=3B
>=3B Un/a ciudadana/o esta interesada/o en saber = -mas sobre su candidatura y ha utilizado votainteligente.cl para comunicarse= - con usted:
>=3B
>=3B Titulo:
>=3B
>=3B "Disminucion = -de Horas de trabajo "
>=3B
>=3B Contenido:
>=3B
>=3B = -En Chile trabajamos 45 horas semanales=2C sin embargo por las altas congest= -iones=2C los problemas de locomoci=F3n y las grandes distancias=2C las pers= -onas llegan muy tarde a sus casas=2C y comparten poco con la familia=2C con= - el fin de mejorar el bienestar y mejorar la calidad de vida=2C me gustar= -=EDa saber quien tiene contemplado la disminuci=F3n de horas de trabajo. >=3B
>=3B
>=3B Para contestar al/a ciudadana/o simplemente = -responda a este mail.
>=3B
>=3B Tanto el contenido de la pregunt= -a como la respuesta quedara publicada en votainteligente.cl
>=3B
&= -gt=3B Muchas gracias
>=3B
>=3B PD: Si llega a tener alg=FAn prob= -lema no dude en contactar a dtejada@votainteligente.cl y lab@votainteligent= -e.cl
>=3B --
>=3B Equipo votainteligente.cl
= -
-= - ---_b0c55162-d7a5-4c0f-ba0f-b51d9bc36e80_-- diff --git a/preguntales/tests/testing_mails/example5_michellebachelet.txt b/preguntales/tests/testing_mails/example5_michellebachelet.txt deleted file mode 100644 index 6857a15c..00000000 --- a/preguntales/tests/testing_mails/example5_michellebachelet.txt +++ /dev/null @@ -1,407 +0,0 @@ - - - - -From falvarez@ciudadanointeligente.cl Wed Nov 06 15:42:43 2013 -Received: from mail-oa0-f42.google.com ([209.85.219.42]) - by ip-10-171-123-43.us-west-1.compute.internal with esmtp (Exim 4.76) - (envelope-from ) - id 1Ve5Fi-0001c3-Ui - for presidencial+7e460e9c462411e38ef81231400178dd@writeit.ciudadanointeligente.org; Wed, 06 Nov 2013 15:42:43 +0000 -Received: by mail-oa0-f42.google.com with SMTP id l6so2356990oag.1 - for ; Wed, 06 Nov 2013 07:42:39 -0800 (PST) -X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=1e100.net; s=20130820; - h=x-gm-message-state:mime-version:in-reply-to:references:from:date - :message-id:subject:to:content-type; - bh=n1ulPQVPLFTIsofSMFoAB14yThtNeJIZ5R6dGBRygfQ=; - b=RsxfOgcOtRCeznDGCwawOriiRD6CMllycw23oOiVpIdmxOYbvDjdWuhdGoXyHpFxYo - 3Dz6tsltu98dmLsVKhU73jvwH1LtrJqLYHRkEaSP4F2pcwpH2QS01FS5/VF+oPjcEn/g - WX3s07TJQ/5BDCoj022GH+7oRNitUPZZmi2YJ06nQ1DG4oFgDaiT4MzNbT16TSfE62LF - Fjkm0R3Yd7EnQmjguNLyqH6BXrmDMKcAC3yhOUXuuQHPp7Z00JpvaogNAI6tIkDVtw16 - 3r6N5xnAVkM7IN7W6xnbPpUvsGUY65fSzucjk4D+QY+aw+bMm/kyPJJ0tkEqmMqIbB5l - lGpA== -X-Gm-Message-State: ALoCoQk5o9yYNQJBHK6pdFJ9zEDhj2syJIBjQbstXyfDLWzPnSOxsYBnc6hjHsedTPh3mUD98blX -X-Received: by 10.182.213.39 with SMTP id np7mr110555obc.92.1383752559060; - Wed, 06 Nov 2013 07:42:39 -0800 (PST) -MIME-Version: 1.0 -Received: by 10.76.168.38 with HTTP; Wed, 6 Nov 2013 07:42:18 -0800 (PST) -In-Reply-To: <00000141ffabdebe-d38326da-4946-4fde-851d-b7feeaac17f1-000000@email.amazonses.com> -References: <00000141ffabdebe-d38326da-4946-4fde-851d-b7feeaac17f1-000000@email.amazonses.com> -From: Informaciones Michelle Bachelet -Date: Wed, 6 Nov 2013 12:42:18 -0300 -Message-ID: -Subject: =?ISO-8859-1?Q?Re=3A_=5BVotaInteligente=5D_Un_ciudadano_est=E1_interesado_?= - =?ISO-8859-1?Q?en_saber_m=E1s_informaci=F3n_de_ti?= -To: Natalia Zepeda -Content-Type: multipart/alternative; boundary=001a11c2f546bd7df204ea83ff52 - ---001a11c2f546bd7df204ea83ff52 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: quoted-printable - -Estimados: - - -El Estado y la sociedad chilena mantienen una deuda hist=C3=B3rica con los -pueblos ind=C3=ADgenas y con los Mapuche. No hemos logrado el pleno -reconocimiento y por ello tenemos grandes desaf=C3=ADos en esta materia. Es -necesario trabajar con los pueblos ind=C3=ADgenas sobre la base de derechos -individuales y de derechos colectivos, con una propuesta real de -participaci=C3=B3n y superaci=C3=B3n de toda forma de marginaci=C3=B3n, rac= -ismo y -discriminaci=C3=B3n. - - - -Garantizaremos la participaci=C3=B3n plena de los Pueblos Ind=C3=ADgenas en= - todo el -proceso de debate y decisi=C3=B3n sobre una Nueva Constituci=C3=B3n, tenien= -do -presente la idea de un Estado pluricultural que garantice sus derechos -colectivos. - -Realizaremos un proceso de consulta con los Pueblos Ind=C3=ADgenas para -garantizar la participaci=C3=B3n pol=C3=ADtica de =C3=A9stos en los distint= -os niveles de -toma de decisiones. Desarrollaremos un proceso de consulta con los Pueblos -Ind=C3=ADgenas para establecer reformas que generen espacios de autonom=C3= -=ADa y -autodeterminaci=C3=B3n a nivel territorial mediante la generaci=C3=B3n de E= -statutos -Especiales de Autonom=C3=ADa. - - - -Estudiaremos mecanismos alternativos a la compra de tierras para poder -satisfacer las demandas pendientes. Se dar=C3=A1 cumplimiento al proceso de -restituci=C3=B3n de tierras ind=C3=ADgenas y se proporcionar=C3=A1n los rec= -ursos para -proteger los derechos de los Pueblos sobre sus tierras y recursos -ancestrales. Se respetar=C3=A1n todos los compromisos asumidos de compras d= -e -tierras, con un acompa=C3=B1amiento t=C3=A9cnico y productivo a las comunid= -ades. - -Se estudiar=C3=A1 especialmente la situaci=C3=B3n de las tierras fiscales q= -ue -actualmente ocupan los Pueblos Ind=C3=ADgenas y cuyo traspaso est=C3=A1 a= -=C3=BAn -pendiente. Se estudiar=C3=A1n las denuncias sobre contaminaci=C3=B3n y los = -problemas -de impacto ambiental que actualmente afectan a muchas tierras ind=C3=ADgena= -s a -objeto de adoptar las medidas de mitigaci=C3=B3n que correspondan. - - - -Por otro lado, nos comprometemos firmemente a la no aplicaci=C3=B3n de la L= -ey -Antiterrorista a miembros de los Pueblos Ind=C3=ADgenas por actos de demand= -a -social. La Ley Antiterrorista ser=C3=A1 modificada para adecuarla a los -est=C3=A1ndares internacionales, tal como le han recomendado al Estado de C= -hile -los =C3=B3rganos internacionales de protecci=C3=B3n de derechos humanos. Un= -a comisi=C3=B3n -de personalidades representativas de la sociedad chilena e ind=C3=ADgena -estudiar=C3=A1 los casos judiciales que se han producido como resultado de = -la -aplicacio=CC=81n de esta ley, investigara=CC=81 las denuncias de violencia = -y abuso -policial contra comunidades indi=CC=81genas, y sobre todo respecto de los n= -in=CC=83os -y nin=CC=83as mapuche; y dara=CC=81 especial atencio=CC=81n a las familias = -indi=CC=81genas y a -los pequen=CC=83os parceleros afectados por las situaciones de tensio=CC=81= -n vividas -en la Regio=CC=81n de la Araucani=CC=81a. Esta Comisio=CC=81n propondra=CC= -=81, en el plazo de 6 -meses desde constituido el nuevo Gobierno, las medidas y recomendaciones -necesarias para atender todas estas situaciones de manera adecuada y con -respeto a los esta=CC=81ndares internacionales de derechos humanos. - - - -Comando Michelle - - -El 28 de octubre de 2013 12:25, Natalia Zepeda< -presidencial+7e460e9c462411e38ef81231400178dd@writeit.ciudadanointeligente.= -org -> escribi=C3=B3: - -> Estimada/o Michelle Bachelet: -> -> Un/a ciudadana/o esta interesada/o en saber mas sobre su candidatura y ha -> utilizado votainteligente.cl para comunicarse con usted: -> -> Titulo: -> -> "Situacion Pueblo Mapuche " -> -> Contenido: -> -> =C2=BF Que haras para solucionar el Conflicto Mapuche? -> -> -> Para contestar al/a ciudadana/o simplemente responda a este mail. -> -> Tanto el contenido de la pregunta como la respuesta quedara publicada en -> votainteligente.cl -> -> Muchas gracias -> -> PD: Si llega a tener alg=C3=BAn problema no dude en contactar a -> dtejada@votainteligente.cl y lab@votainteligente.cl -> -- -> Equipo votainteligente.cl -> - - - ---=20 - -*Comando Michelle Bachelet* - -*Tegualda 1352* -*Providencia* -*Fono: +562 28383737* - ---001a11c2f546bd7df204ea83ff52 -Content-Type: text/html; charset=UTF-8 -Content-Transfer-Encoding: quoted-printable - -
- - - - - - - - - - - - - - - - - - - -

Estimados:


El Est= -ado y la sociedad chilena mantienen una deuda -hist=C3=B3rica con los pueblos ind=C3=ADgenas y con los Mapuche. No hemos l= -ogrado el -pleno reconocimiento y por ello tenemos grandes desaf=C3=ADos en esta mater= -ia. Es -necesario trabajar con los pueblos ind=C3=ADgenas sobre la base de derechos -individuales y de derechos colectivos, con una propuesta real de participac= -i=C3=B3n -y superaci=C3=B3n de toda forma de marginaci=C3=B3n, racismo y discriminaci= -=C3=B3n.

- -

=C2=A0

- -

Garantizaremos la participaci=C3=B3n plena de los Pueblos -Ind=C3=ADgenas en todo el proceso de debate y decisi=C3=B3n sobre una Nueva= - Constituci=C3=B3n, -teniendo presente la idea de un Estado pluricultural que garantice sus dere= -chos -colectivos.

- -

Realizaremos un proceso de consulta con los Pueblos -Ind=C3=ADgenas para garantizar la participaci=C3=B3n pol=C3=ADtica de =C3= -=A9stos en los distintos niveles -de toma de decisiones. Desarrollaremos un proceso de consulta con los Puebl= -os -Ind=C3=ADgenas para establecer reformas que generen espacios de autonom=C3= -=ADa y -autodeterminaci=C3=B3n a nivel territorial mediante la generaci=C3=B3n de E= -statutos -Especiales de Autonom=C3=ADa.

- -

=C2=A0

- -

Estudiaremos mecanismos alternativos a la compra de -tierras para poder satisfacer las demandas pendientes. Se dar=C3=A1 cumplim= -iento al -proceso de restituci=C3=B3n de tierras ind=C3=ADgenas y se proporcionar=C3= -=A1n los recursos -para proteger los derechos de los Pueblos sobre sus tierras y recursos -ancestrales. Se respetar=C3=A1n todos los compromisos asumidos de compras d= -e -tierras, con un acompa=C3=B1amiento t=C3=A9cnico y productivo a las comunid= -ades.

- -

Se estudiar=C3=A1 especialmente la situaci=C3=B3n de las tierras -fiscales que actualmente ocupan los Pueblos Ind=C3=ADgenas y cuyo traspaso = -est=C3=A1 a=C3=BAn -pendiente. Se estudiar=C3=A1n las denuncias sobre contaminaci=C3=B3n y los = -problemas de -impacto ambiental que actualmente afectan a muchas tierras ind=C3=ADgenas a= - objeto -de adoptar las medidas de mitigaci=C3=B3n que correspondan.

- -

=C2=A0

- -

Por otro lado, nos comprometemos firmemente a la no -aplicaci=C3=B3n de la Ley Antiterrorista a miembros de los Pueblos Ind=C3= -=ADgenas por -actos de demanda social. La Ley Antiterrorista ser=C3=A1 modificada para ad= -ecuarla a -los est=C3=A1ndares internacionales, tal como le han recomendado al Estado = -de Chile -los =C3=B3rganos internacionales de protecci=C3=B3n de derechos humanos. Un= -a comisi=C3=B3n de -personalidades representativas de la sociedad chilena e ind=C3=ADgena estud= -iar=C3=A1 los -casos judiciales que se han producido como resultado de la aplicacio=CC=81n= - de esta -ley, investigara=CC=81 las denuncias de violencia y abuso policial contra -comunidades indi=CC=81genas, y sobre todo respecto de los nin=CC=83os y nin= -=CC=83as mapuche; y -dara=CC=81 especial atencio=CC=81n a las familias indi=CC=81genas y a los p= -equen=CC=83os parceleros -afectados por las situaciones de tensio=CC=81n vividas en la Regio=CC=81n d= -e la -Araucani=CC=81a. Esta Comisio=CC=81n propondra=CC=81, en el plazo de 6 mese= -s desde constituido -el nuevo Gobierno, las medidas y recomendaciones necesarias para atender to= -das -estas situaciones de manera adecuada y con respeto a los esta=CC=81ndares -internacionales de derechos humanos.

- -

=C2=A0

Comando Michelle

- -

El 28 de octubre de 2013 12:25, Natalia = -Zepeda<presid= -encial+7e460e9c462411e38ef81231400178dd@writeit.ciudadanointeligente.org> escribi=C3=B3:
- -
Estimada/o Michelle Bachelet:
-
-Un/a ciudadana/o esta interesada/o en saber mas sobre su candidatura y ha u= -tilizado
votainteli= -gente.cl para comunicarse con usted:
-
-Titulo:
-
-"Situacion Pueblo Mapuche "
-
-Contenido:
-
-=C2=BF Que haras para solucionar el Conflicto Mapuche?
-
-
-Para contestar al/a ciudadana/o simplemente responda a este mail.
-
-Tanto el contenido de la pregunta como la respuesta quedara publicada en votainteligente.cl
-
-Muchas gracias
-
-PD: Si llega a tener alg=C3=BAn problema no dude en contactar a dtejada@votainteligente.cl y lab@votainteligente.cl
---
-Equipo votaintelige= -nte.cl
-



--
<= -a href=3D"http://www.michellebachelet.cl" target=3D"_blank">
Comando Michelle Bachelet - -
Tegualda 1352
Providencia
Fono: +562 28383737
<= -/div> - - -
- ---001a11c2f546bd7df204ea83ff52-- - diff --git a/preguntales/tests/testing_mails/mail.txt b/preguntales/tests/testing_mails/mail.txt deleted file mode 100644 index d88f58e3..00000000 --- a/preguntales/tests/testing_mails/mail.txt +++ /dev/null @@ -1,75 +0,0 @@ -From falvarez@votainteligente.cl Wed Jun 26 21:05:33 2013 -Received: from mail-vb0-f47.google.com ([209.85.212.47]) - by ip-10-170-133-165.us-west-1.compute.internal with esmtp (Exim 4.80) - (envelope-from ) - id 1UrwuD-0007Gc-2V - for prueba+4aaaabbb@mailit.ciudadanointeligente.org; Wed, 26 Jun 2013 21:05:33 +0000 -Received: by mail-vb0-f47.google.com with SMTP id x14so11051801vbb.20 - for ; Wed, 26 Jun 2013 14:05:31 -0700 (PDT) -X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=google.com; s=20120113; - h=mime-version:sender:x-originating-ip:date:x-google-sender-auth - :message-id:subject:from:to:content-type:x-gm-message-state; - bh=0UJB+0yWC+4zTy2FXa55TesY6fxhFS2l4GnjWtJYUPk=; - b=GiEiBbwFw9TZX+VrJFdR85QtGeKvsgsq0W+LhelPSybC9mpEbeDoeSb+lQCRVSiN0p - S8Ljmrem3htNGMFzudEyWDdeyfm6vHTybKOQgxsjQqQ3CGkJAaU1NDMSYBRxglqiffx3 - nIDV79JcAXYXyXrOf4Lbahj/iFD2yUS11z7N1pO+Cq28rKLdWcv8zJ5X3sZVCw9Kz1y7 - AGHAHeQTlM48GFHsPmP+YW5DlogwHx55fuSHIS0EiQM4RPBqXZPrrCns3cFmh1XTOmJ+ - AsRCv9U9lF/7HUpEPF92PJTwLeGv6lwHUp2KARspS8StU4rEpW8eqbgFArF0p+MH7n7e - S+LA== -MIME-Version: 1.0 -X-Received: by 10.52.21.232 with SMTP id y8mr1968542vde.6.1372280730863; Wed, - 26 Jun 2013 14:05:30 -0700 (PDT) -Sender: falvarez@votainteligente.cl -Received: by 10.220.56.203 with HTTP; Wed, 26 Jun 2013 14:05:30 -0700 (PDT) -X-Originating-IP: [200.86.239.240] -Date: Wed, 26 Jun 2013 17:05:30 -0400 -X-Google-Sender-Auth: RfE13xxH37g_NNC5sBUMhQzst3U -Message-ID: -Subject: prueba4 -From: =?ISO-8859-1?Q?Felipe_=C1lvarez?= -To: prueba+4aaaabbb@mailit.ciudadanointeligente.org -Content-Type: multipart/alternative; boundary=20cf3079baba7ee00f04e01501af -X-Gm-Message-State: ALoCoQl6etdV/szaymxUHNsvjf5BWlNkMIt7Ha8HXf/jrq+0ykO9mHBtDkbqX7jM+TFqzH3PUL5z - ---20cf3079baba7ee00f04e01501af -Content-Type: text/plain; charset=ISO-8859-1 -Content-Transfer-Encoding: quoted-printable - -prueba4lafieri - ---=20 -*Felipe =C1lvarez -* -Desarrollador de Aplicaciones Web -Skype: luisfelipealvarezburgos -Twitter: @lfalvarez -Celular: +56973961732 -*Fundaci=F3n Ciudadano Inteligente* -Holanda 895 - Providencia, Santiago de Chile. -CiudadanoInteligente.cl | -@ciudadanoi - | (56-2) 419 27 70 - ---20cf3079baba7ee00f04e01501af -Content-Type: text/html; charset=ISO-8859-1 -Content-Transfer-Encoding: quoted-printable - -
prueba4lafieri

--
Felipe =C1lvarez
Desarrollador de Aplicacion= -es Web
-Skype: luisfelipealvarezburgos
Twitter: @lfalvarez
Celular: +56973961732<= -br>
Fundaci=F3n Ciudadano Inteligente
-
Holanda 895 -= - Providencia, Santiago de Chile.=A0
CiudadanoInteligente.cl=A0|=A0@ciudadanoi=A0|=A0= -(56-2) 419 27 70
- -
- ---20cf3079baba7ee00f04e01501af-- - diff --git a/preguntales/tests/testing_mails/mail_for_no_message.txt b/preguntales/tests/testing_mails/mail_for_no_message.txt deleted file mode 100644 index 78bfdae8..00000000 --- a/preguntales/tests/testing_mails/mail_for_no_message.txt +++ /dev/null @@ -1,75 +0,0 @@ -From falvarez@votainteligente.cl Wed Jun 26 21:05:33 2013 -Received: from mail-vb0-f47.google.com ([209.85.212.47]) - by ip-10-170-133-165.us-west-1.compute.internal with esmtp (Exim 4.80) - (envelope-from ) - id 1UrwuD-0007Gc-2V - for prueba@mailit.ciudadanointeligente.org; Wed, 26 Jun 2013 21:05:33 +0000 -Received: by mail-vb0-f47.google.com with SMTP id x14so11051801vbb.20 - for ; Wed, 26 Jun 2013 14:05:31 -0700 (PDT) -X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=google.com; s=20120113; - h=mime-version:sender:x-originating-ip:date:x-google-sender-auth - :message-id:subject:from:to:content-type:x-gm-message-state; - bh=0UJB+0yWC+4zTy2FXa55TesY6fxhFS2l4GnjWtJYUPk=; - b=GiEiBbwFw9TZX+VrJFdR85QtGeKvsgsq0W+LhelPSybC9mpEbeDoeSb+lQCRVSiN0p - S8Ljmrem3htNGMFzudEyWDdeyfm6vHTybKOQgxsjQqQ3CGkJAaU1NDMSYBRxglqiffx3 - nIDV79JcAXYXyXrOf4Lbahj/iFD2yUS11z7N1pO+Cq28rKLdWcv8zJ5X3sZVCw9Kz1y7 - AGHAHeQTlM48GFHsPmP+YW5DlogwHx55fuSHIS0EiQM4RPBqXZPrrCns3cFmh1XTOmJ+ - AsRCv9U9lF/7HUpEPF92PJTwLeGv6lwHUp2KARspS8StU4rEpW8eqbgFArF0p+MH7n7e - S+LA== -MIME-Version: 1.0 -X-Received: by 10.52.21.232 with SMTP id y8mr1968542vde.6.1372280730863; Wed, - 26 Jun 2013 14:05:30 -0700 (PDT) -Sender: falvarez@votainteligente.cl -Received: by 10.220.56.203 with HTTP; Wed, 26 Jun 2013 14:05:30 -0700 (PDT) -X-Originating-IP: [200.86.239.240] -Date: Wed, 26 Jun 2013 17:05:30 -0400 -X-Google-Sender-Auth: RfE13xxH37g_NNC5sBUMhQzst3U -Message-ID: -Subject: prueba4 -From: =?ISO-8859-1?Q?Felipe_=C1lvarez?= -To: prueba@mailit.ciudadanointeligente.org -Content-Type: multipart/alternative; boundary=20cf3079baba7ee00f04e01501af -X-Gm-Message-State: ALoCoQl6etdV/szaymxUHNsvjf5BWlNkMIt7Ha8HXf/jrq+0ykO9mHBtDkbqX7jM+TFqzH3PUL5z - ---20cf3079baba7ee00f04e01501af -Content-Type: text/plain; charset=ISO-8859-1 -Content-Transfer-Encoding: quoted-printable - -prueba4lafieri este es el identifier prueba@mailit.ciudadanointeligente.org - ---=20 -*Felipe =C1lvarez -* -Desarrollador de Aplicaciones Web -Skype: luisfelipealvarezburgos -Twitter: @lfalvarez -Celular: +56973961732 -*Fundaci=F3n Ciudadano Inteligente* -Holanda 895 - Providencia, Santiago de Chile. -CiudadanoInteligente.cl | -@ciudadanoi - | (56-2) 419 27 70 - ---20cf3079baba7ee00f04e01501af -Content-Type: text/html; charset=ISO-8859-1 -Content-Transfer-Encoding: quoted-printable - -
prueba4lafieri este es el identifier prueba@mailit.ciudadanointeligente.org

--
Felipe =C1lvarez
Desarrollador de Aplicacion= -es Web
-Skype: luisfelipealvarezburgos
Twitter: @lfalvarez
Celular: +56973961732<= -br>
Fundaci=F3n Ciudadano Inteligente
-
Holanda 895 -= - Providencia, Santiago de Chile.=A0
CiudadanoInteligente.cl=A0|=A0@ciudadanoi=A0|=A0= -(56-2) 419 27 70
- -
- ---20cf3079baba7ee00f04e01501af-- - diff --git a/preguntales/tests/testing_mails/mail_from_tony.txt b/preguntales/tests/testing_mails/mail_from_tony.txt deleted file mode 100644 index 0863a2a7..00000000 --- a/preguntales/tests/testing_mails/mail_from_tony.txt +++ /dev/null @@ -1,106 +0,0 @@ -From tony@mytest.org Wed Apr 08 11:13:10 2015 -Received: from mail-perrito.google.com ([209.85.333.33]) - by localhost with esmtp (Exim 4.82) - (envelope-from ) - id 1Yfnuw-perroferoz-0d - for eduskunta-2+4aaaabbb@writeit.org; Wed, 08 Apr 2015 11:13:10 +0000 -Received: by pabsx10 with SMTP id sx10so111616881pab.3 - for ; Wed, 08 Apr 2015 04:13:04 -0700 (PDT) - X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=1e100.net; s=20130820; - h=x-gm-message-state:mime-version:in-reply-to:references:from:date - :message-id:subject:to:content-type:content-transfer-encoding; - bh=v+63Sf5uW2Dr+mz5UXgfJz5lTy2JQzYviLj/ygucDtM=; - b=br5veRFIRVB/o+asdasd - vZEHZyf8LbyJTvlM/asdasd+asdasd/5PXq+asdasd - S/asdasd+HYrdQLx6ALuE4f3zdylZGu/QJ/asdasd - asdasd/LP6oISEHe6muSWNmM - bG2/fCdVgr/aasdasd - J15A== - X-Gm-Message-State: asdasd -X-Received: by 10.70.138.38 with SMTP id qn6mr44858211pdb.119.1428491584587; - Wed, 08 Apr 2015 04:13:04 -0700 (PDT) - MIME-Version: 1.0 -Received: by 10.70.65.233 with HTTP; Wed, 8 Apr 2015 04:12:43 -0700 (PDT) -In-Reply-To: <123fiera.30633.30436@localhost> -References: <123fiera.30633.30436@localhost> -From: Tony Bowden -Date: Wed, 8 Apr 2015 12:12:43 +0100 -Message-ID: -Subject: Re: [WriteIT] Message: Will you be supporting Bill #19481-9f? -To: Tony -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: quoted-printable -Thank you for your enquiry. I am completely in favour of this measure, -and will certainly be voting for it. -2015-04-07 12:48 GMT+01:00 Tony -: -> Dear Stubb Alexander -> -> You=E2=80=99ve received a message via WriteIt, the online service that al= -lows -> anyone to write to politicians and other prominent people. -> -> -> The message is as follows: -> Subject: Will you be supporting Bill #19481-9f? -> From: Tony -> Message body: -> Maecenas ac nunc eu eros consectetur posuere. Mauris finibus velit id nis= -i porttitor mollis. Praesent suscipit lacinia sem, mattis placerat mi lobor= -tis vel. Proin dapibus tellus velit, quis dictum eros venenatis nec. Nunc e= -nim tortor, porta sit amet molestie vel, tempor quis orci. Sed rhoncus null= -a risus, non cursus quam tincidunt nec. Aliquam mattis urna ac augue suscip= -it posuere. Praesent a felis leo. Aenean pellentesque blandit metus ut conv= -allis. Quisque aliquam sem ut augue vulputate, sed dignissim quam cursus. -> -> Sed pellentesque interdum molestie. Aliquam ligula justo, ultrices a nisi= - convallis, venenatis interdum ligula. Duis euismod sed dui ut eleifend. Se= - d vehicula tortor et interdum eleifend. Aenean nunc ipsum, condimentum inte= -rdum dignissim posuere, molestie lobortis massa. In facilisis dolor eros, v= -el vehicula arcu sodales vitae. Interdum et malesuada fames ac ante ipsum p= -rimis in faucibus. Nunc arcu neque, aliquet ut nisi sed, sodales venenatis = -odio. Aenean nec diam bibendum augue sodales ullamcorper in vel ligula. Sus= -pendisse dapibus tristique nibh, non semper sem efficitur sit amet. Integer= - ornare pellentesque mollis. Vivamus a orci at libero sollicitudin vulputat= - e at dictum turpis. Proin et accumsan ipsum. Mauris arcu elit, efficitur eg= -et est vel, bibendum rhoncus leo. -> -> Etiam cursus ultricies porttitor. Donec ultrices sagittis elit id accumsa= -n. Morbi at mi elementum, fringilla nisi ac, semper arcu. Sed quis auctor a= -nte. Praesent eu placerat ex. Donec volutpat sed magna quis consequat. Cras= - aliquet fringilla sodales. In sollicitudin mauris varius commodo rutrum. V= - estibulum scelerisque arcu a nulla laoreet, in rhoncus elit sagittis. Vivam= -us pellentesque dapibus mi, eu mollis quam elementum et. Sed ullamcorper si= -t amet lectus nec tempus. Vivamus consectetur fermentum tortor id commodo. = -Mauris tincidunt justo eget est bibendum pellentesque. -> -> Suspendisse maximus est ac arcu euismod, at faucibus mauris fermentum. Vi= -vamus facilisis bibendum eros, quis tristique dolor blandit quis. Cras matt= -is luctus dolor, vel congue tellus eleifend vitae. Proin aliquet convallis = -facilisis. Ut vitae nibh justo. Duis feugiat lectus eu felis tincidunt tinc= -idunt. Donec sollicitudin nulla sapien, vitae hendrerit erat efficitur vel.= - Vivamus gravida accumsan ultrices. In vehicula, massa sit amet faucibus po= - rta, lectus nisl tristique dolor, posuere pretium sapien elit a nibh. -> -> -> -> You can respond to Tony -> simply by replying to this email. -> -> ** IMPORTANT ** Note that, as well as being sent to -> Tony, -> your response will be added to the -> Eduskunta website at http://writeit.orghttp://edusku= -nta-2.writeit.org/en/, -> where it will be public and visible to anyone. -> -> -> If there=E2=80=99s a better email address for you, please let us know at -> tony@mytest.org, -> where we=E2=80=99ll also be happy to answer any questions or problems. -> -> -> All the best, -> The WriteIt team \ No newline at end of file diff --git a/preguntales/tests/testing_mails/mail_with_attachments.txt b/preguntales/tests/testing_mails/mail_with_attachments.txt deleted file mode 100644 index 4ff8d7d4..00000000 --- a/preguntales/tests/testing_mails/mail_with_attachments.txt +++ /dev/null @@ -1,1779 +0,0 @@ -From luisfelipealvarez@gmail.com Tue Mar 03 18:21:20 2015 -Received: from mail-vc0-f178.google.com ([209.85.220.178]) - by localhost with esmtp (Exim 4.82) - (envelope-from ) - id 1YSrRY-0007fv-Ec - for prueba+4aaaabbb@writeit.ciudadanointeligente.org; Tue, 03 Mar 2015 18:21:20 +0000 -Received: by mail-vc0-f178.google.com with SMTP id hq11so13895769vcb.9 - for ; Tue, 03 Mar 2015 10:21:15 -0800 (PST) -DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=gmail.com; s=20120113; - h=mime-version:in-reply-to:references:from:date:message-id:subject:to - :content-type; - bh=pZKJupvE2vMDCQisev0qTVzr+gXPOHMecGO8KCCtLno=; - b=zchYFAszOQUxbvevwv0QnDHJjIR9iJy8zDbemDBxxUqnEq769xXeleogZyCmCm+8Nx - 8IW9Ftsf/vDHYvX+NYE8hwGqWFTQmY6wVtM3aniJGXhSRI0Bstc17TyOh/5ifpIxadDA - Hii1bYG4Wj/3nrePepJeIpXljnY678HCqETGV5TNdxA1CpxYudKCuI0DMYAbDJi9S8mM - wwAJA9yOK+sZJmpRnWn3gWrPyEK2btt1xyD5YWl1cPOvYJLArzUTT2KwwE9g1T27YkrQ - /B78GJEFZ4ua+kqViBf1ZETiMWzntK+tx28c7MI4CJ7OjeWrBRd4JVdKoqXZUkSTdYYs - jDQg== -X-Received: by 10.52.139.16 with SMTP id qu16mr157136vdb.43.1425406874896; - Tue, 03 Mar 2015 10:21:14 -0800 (PST) -MIME-Version: 1.0 -Received: by 10.52.11.41 with HTTP; Tue, 3 Mar 2015 10:20:54 -0800 (PST) -In-Reply-To: <0000014be0c7b886-351f8794-8e76-42db-b68c-fb1cbe43e178-000000@email.amazonses.com> -References: <0000014be0c7b886-351f8794-8e76-42db-b68c-fb1cbe43e178-000000@email.amazonses.com> -From: =?UTF-8?Q?Luis_Felipe_=C3=81lvarez_Burgos?= -Date: Tue, 3 Mar 2015 15:20:54 -0300 -Message-ID: -Subject: Re: [WriteIT] Message: this is an attachment test -To: Felipe Test Attachments -Content-Type: multipart/mixed; boundary=bcaec52c63897248ac051066662d - ---bcaec52c63897248ac051066662d -Content-Type: multipart/alternative; boundary=bcaec52c63897248a6051066662b - ---bcaec52c63897248a6051066662b -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: quoted-printable - -Ok this is the answer - -Luis Felipe =C3=81lvarez Burgos -Skype: luisfelipealvarezburgos -Twitter: @lfalvarez - - - -On Tue, Mar 3, 2015 at 2:56 PM, Felipe Test Attachments < -prueba+4aaaabbb@writeit.ciudadanointeligente.= -org -> wrote: - -> Hello Daniela Tejada: -> You have a new message: -> *subject:* this is an attachment test -> *content:* hello there I want to have an attachment in your answer -> If you want to see all the other messages please visit -> http://writeit.ciudadanointeligente.org/en/writeit_instances/prueba= -. -> Seeya -> -- -> -> You writeIt and we deliverit. - ---bcaec52c63897248a6051066662b -Content-Type: text/html; charset=UTF-8 -Content-Transfer-Encoding: quoted-printable - -
Ok this is the answer

Luis Fel= -ipe =C3=81lvarez Burgos
Skype: luisfelipealvarezburgos
Twitte= -r: @lfalvarez


-
On Tue, Mar 3, 2015 at 2:56 PM, Felipe Test = -Attachments <= -prueba+4aaaabbb@writeit.ciudadanointeligente.= -org> wrote:
Hello Daniela T= -ejada:
-You have a new message:
-subject: this is an attachment test
-content: hello there I want to have an attachment in your = -answer
- - -If you want to see all the other messages please visit http://writeit.ciudadanointeligente.org/en/writeit_instances/ciuda= -danoi-2.
-Seeya
---

-You writeIt and we deliverit.

- ---bcaec52c63897248a6051066662b-- ---bcaec52c63897248ac051066662d -Content-Type: image/jpeg; name="fiera_parque.jpg" -Content-Disposition: attachment; filename="fiera_parque.jpg" -Content-Transfer-Encoding: base64 -X-Attachment-Id: f_i6tmfdei0 - -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 ---bcaec52c63897248ac051066662d -Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document; - name="hello.docx" -Content-Disposition: attachment; filename="hello.docx" -Content-Transfer-Encoding: base64 -X-Attachment-Id: f_i6tmfj611 - -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 ---bcaec52c63897248ac051066662d -Content-Type: application/pdf; name="hello.pd.pdf" -Content-Disposition: attachment; filename="hello.pd.pdf" -Content-Transfer-Encoding: base64 -X-Attachment-Id: f_i6tmfq6e2 - -JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0ZpbHRlci9GbGF0ZURl -Y29kZT4+CnN0cmVhbQp4nDPQM1Qo5ypUMABCM0MjBXNLI4WiVK5wLYU8qKiBQlE6l1MIl6mZnoWC -uZEJUENIioK+m6ECUHlIWrSNgaGdrpGNgZGdoY2BsZ0RlDAxMDUwAzHMITIWdroWIEWxIV5criFc -gVyBCgBo9xppCmVuZHN0cmVhbQplbmRvYmoKCjMgMCBvYmoKMTA5CmVuZG9iagoKNSAwIG9iago8 -PC9MZW5ndGggNiAwIFIvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aDEgNzQyND4+CnN0cmVhbQp4 -nOU4bVBb15Xn3icJCYE+QChgGevJD2xAIGFkbLCxER8SwthGfDkCByMZCZDNhyLJuE6aNd3NhyvH -G2+a2nHsaZxOdyfTejYPO7tDutmYziTT7XSTZme2bdLYKbPbnd2ZmthJN9mdJsCe+/TA4CbNTLsz -+2OvpHfP9zn3nHPfu0/J+LEIZMEUcOAeHAvFCrK1agD4RwCSMziZ5Jca3TzCcwDUPBQbHitxvfcB -APffABnK4dETQ1nj3/x3AC2qqEZHIqFweLuvCsA4ioRtI0hoXzyRgfh3EC8aGUt+5Tz3wDrE/4Hh -oxODob/WvK9A/BbiprHQV2LnVY8inoMo8OOhsci+yAvPII4xqPfGJhLJMBQtAaxj9vlYPBL7uO88 -xrvuSYwviTSCHzayEFQxnHIKpSpDDf9fh/IM5IFPuQv0EJOuawZ3BQrYvHRr7XVx79Jv/zejkPP/ -LPwVvAxn4F3olxle8EMUjiFl9fgB/BNS2fBDH3wXUl9g9grMID8tF4Sn4MIXyPnhPFyDH67x4ocx -eBhj+Rt4l2yBH2GrTMBHRA1fgzfQ6kdI2/d5pqgOL0MSOLSK+h5cpKdhD/0VIhcYhzqpAV6HS+QQ -Wk7iOs+srLjud4w+AY/gtQtGYBJhaSh3ffYL0Cz9Blf1COyBP4UGGF2l8Sp5nsvE+nXD85jTH0g0 -5zIzw8cdoX9L6cI3EPkLGMZfiODa6RmuAZqVRvIygNvTG+jp7urs8Lfv37e3bU+rr8XraW5qbHDX -795Vt3NHbc32bdVbKp2OivKSzZuKi4SNNmu+yWjQ67K1mRp1hkqp4CiBco/gDfLipqCo2CT4fBUM -F0JICK0iBEUeSd61MiIflMT4tZJulBy6R9KdlnSvSBIDXwd1FeW8R+DFN5sFfob0dQQQPtMs9PLi -vATvk2DFJgnJRsRmQw3ekz/SzIskyHtE7+RIyhNsRnvT2swmoSmSWVEO05laBLUIiSVCbJqU7CYS -QEs8O6YpqLOZW5Er9oTCor8j4Gm22Gy9FeWtok5olljQJJkUVU1ihmSSj7LQ4TQ/XT6benLGAIeD -9qywEA49EBC5EOqmOE8q9YRotIulQrNY+tCv8nHlEbFcaPaIdma1rXPFT9tdl0RUFhsEPvUx4HKE -+VtrKSGZoio2fAwM9GJ6UymvwHtTwVRoZmnqsMAbhNR0VlYq5sEMgz+AWjNL3z9tEb1P9oqG4AjZ -IS/W29km5nYcDIi02MuPhJCC33rBVmOxGXuXZfxfxAZMBKYDc2qzsYWfnnHDYUTEqY5AGufhsOUq -uJ32XpEGGWd2mZPXwzhTy5wV9aCA1WzrCqRERXFrWPBgjk+HxKnD2E9HWCkEg6j7xGITUjlGvtbZ -K8nyGFVrOMqLyk2YFtRarYCdwlRSBgnRfZKe5i3oYJMxh68V0Ayz4xE8Qfk7OZKPBviKctFnT5e+ -OyC6mxFwh+QaeaYrnagRCmKJos1S+USnEBNNQuNKPVlYnmhXQFKR1URTkwjBQVlLdHqamWfekwo2 -p0NgtoSOwCvgWpqb3spbrrlgK/Q2M2FzE/bVJk8qEB4SrUFLGHfaEB+w2ER3Lxa4VwhEelmjYYZK -59CdTfIo0qbuQFuX0NbRF6iRA0kzmDlFseceM0LAkjaDLSeqi9V8gFq4XhQ0IIH3IiA01uFVzChW -48+ACZeorFUb6/gAscCyNIYhlvKeSLMsx/A1RpWsnZp8y9ZUDEU7TT6LrdeWHhXlFNm87Bg11Cyp -vmUWV4x3AqRRNCORWC7zWc/zASEi9AojvOj2B9jaWHqkLMvJkHIu16p7DbYqWZgmsCF7GWHJFL12 -y+rkii0SvoL67mG3LrP5lFpo60ox44JsEDDyVhFYC7trjBZp97P9LHhDuIlxR0v7OTXtdrO9PMK2 -bUpoDaeErkCdJI13kEcsDzFfOdBG2robK8rxZtY4LZBTHdNucqqrL/CKAY9Up7oDVymhTcHG3uki -5AVe4fFZIVEpozIiQ3iGMEudiKglecsrboApiauQCBI+OENAoqmXaQQGZ2iaZlimUaQp0jS3RGMD -q5Q/gjnG+7eHD7P6fLV3JBXsZT0OZswIfolIhN2YHWH3NKGqLDFTiDSKWqGR0esZvT5NVzF6BnYG -MZOK8odSBo/wcX6F9OiGZryElT14As4AxzQBZ93VDIV6vmpapbxRd5WjCMI0x8hKRr6aodJ8VneV -MLrLaDMW24y2ZsovFpFnF0eUPb/9XrPiTWAn0Z34FD+NZy4LnHWXqvOI2kTU2USdRdSZ5r6DRrLV -2GykxsLmwnDh64VcUeFWBLnCmaXZazt2+djsdmwu880VEuovjBVeLny7UKEp6PPTOSxFflCjoQat -mhvIVnIFZiMdMOGhub5qvqqqqt7Frjm1znni7J+v6h/ot9sfjBtu9COypfJQPw5X9Xbj5mpbXgbG -n57vy7MhzYbzzitXaMEVevwKzb9yZeE/rix8/Uq1RfGtddXV6xY+pHo2f3rYUl1todULP7ZUp3Po -X7rFebk3wAplkHRXfN1Ens0l2tzTudRs2WShmvyC/NL8C/kK9SafVau1lkM52T1Vfrn8TjlXzlbc -tMfHZvd9ZQ5fMfGdMhMz+IuLVby/wKDqMJqhfr5+fmVJuJ5D/Ya3qpyGeXlB/STPtIG6qnbT7Xk6 -TtjooNVbt7mqNtBCQjbqaJ5tq4MSRV59vH9DY+Pudfc17A9UHHshXP7W9bY/O1y7eL6mo7qAPG20 -+8i7Oa2PD+9SqjNVNXqLOdv9J98/8clHJYe+NdlJLjkPPLx378MHpIMWgVJcuAHP1xp4wl2ibLED -0QLZcRCO4rnyIigscBD+Dn4MCoZ9D7tL+7qWaNli670+NrvX1+z0ndUSClqD1q+9rBW1s1rVWQTu -aDlJsKIyLZiVbfCp/BrsJz+Xh6moqp8ndnv/gwNxu50V9sH4of4HMRXF6SpiRcnEC4sFly8Tr7eg -oqJASZd7fT/W6SrWSYuVetJd92jmM5lUmUlOqy+qaaaanFZcVFCNgjxKn6FURbFZfWADG2+jBlul -zW+bsykY5rZxO20sMHPDHt/zNhKzEbctaJuyXbYpgjYisXTFDp/ZpzL6NQaLn0sXkDjnMep43I7h -xg3vrxSP1c9EhY2bpKKZM7BYAquaXFLu6s/+5Z/feefGz37x8rpd4dY9wRqzuSa4pzW8ax157/YS -LH74wWf/9ZvQhej27dELocPPHa2tPfpcukampVu0QvE1fMu5311La9RGn0JFXrKQWQupt7RbaKau -hfObgiZqMmUAZ+B4jlNziiy/xq3R+TQZWn2esQNY8K5611v2+SriPNTvcjn7Dbiv+uNbKvvtSoza -KFTXE1eeK08wmsyuqm2sB8n+4MDDj0Tqf/7znZXFrVb9lp2Npvgw/UbF5p/+tHvhZENjpqoh06TP -lOPEs/y/YS+VgPgKZGP67GqDr9RUa6L5JqJh37wWvYGYDWWXywiUGcpmy+bKFLWXy+6U0TKWbpO9 -0ucsI4Yy4i8jsbKpsrNlHGNcs270SQL2XLMPrC1TRQSKDEV80WzR20VzRSp1UbG/BKx5hiJ/7sa8 -DUplQWemga3X6ErfR1jVWHdV2dOlY61muHEIdyGr3ZZKOzHpaMZujm22PPk2snUTK9/yTYW1o5cQ -jq73339/0ba+huL44tFHOnrW1+/elnNyMXz8SVLFfaIrsZdkG4o25G5oPNK2cI61LT3U1atSaxUL -uauaOL3vnsUezoej1xSZhM4sveN2avS+XCuZICcJR4imBXQGHa+b1b2tm9Op1DrruoF11L2OHMgd -yqW5XD5lGTFosnx4JzXo/Tl6jc6fJe+sepfTbviRq588GHeyZTr78a5pxxuMsHntou7DRdNn7TvW -u907zS8sNh4/TnI09/n7+4u4NxbH1dk5mQuNLHCOL6g4lrulfIP03wQx/vo7b56aG9DXfQzW9Hvx -W6mb5O6r3dItfGqwt0U17tf0QG6GbdED968IrZKXhobewje7H8JO7gz4aS2UKgD2M3WETQib6HdZ -3qAcvk3Wk0nyAfmANtJ3uG2SJQ3YZV8UDPgeie/UCq2qFu9ZjLqeHFjxF1zxTVAyKMMUn5wxGebw -eXdchhUo87QMK0EH35ZhFehBlOEMeAiuy7AaTKRWhjWgI/tkWIsxHFz5Z8dBlu1nwwT5SxnWwW5q -Qu9EgfdJmKWdMkyA53JkmIKOq5JhDrZxbhlWoMykDCthPXdOhlWwgbsqwxnwn9zbMqyGEsXrMqyB -9YpbMqyFGqVahrPgAeWy/Wx4X3lJhnXwVdVDTROxE/Ho8EiSLxks5asqK7fznZEw7wsly/nW8UEH -3zA6yksCCT4eSUTik5Gwg9/b2ujpbOhubd/PRxP4Sp2Mh8KRsVD8KD8xtFZ/b/RwJB5KRifG+a5I -PDrUGRk+NhqKNyQGI+PhSJyv4O+VuBc/EIknGLLFUbnd4brLvVf4SwLB6IejiWQkjsToON/j6HLw -/lAyMp7kQ+NhvntFsX1oKDoYkYiDkXgyhMITyREM9cixeDQRjg4ybwnHygqaJuKxCTmkZGQywu8L -JZORxMT4SDIZ2+F0Hj9+3BGShQdR1jE4Meb8fbzkiVgkHElEh8dx5Y6R5NjoXgxoPIGBH5M8YjSr -s+adGMfijKZlyvlEJMIz8wm0PxQJY2ix+MSRyGDSMREfdh6PHo060/ai48POu2aYFdnPH6cNTTCB -e/AExCEKwzACSeDxaTKIu56HKqjEz3aEOiECYZx9EEKJcoRaYRylHAixf5hGcb5rISFhEZwjOE9K -ukxyL2o1ggetNUA3wu2wH6lRST6EvyRKh1A2AmM4x/FExGN0Q7/X/17UPyz5YZwoyo8jt0uiRFGX -aQ7DMYyQWWxAX4NIGZe8xFGyQorr99v4Mv4BCUqscLZgXCxvDnB9ru6XWf7jMpLO/bBkJSnZTktG -Jds9KNElSfklTZaLpORtXJLq/hyP7ehxCPVZ5u5KDkq2k4inLU8gPCJn9QhmPC5FEJb0lteWQM+/ -WwPWg3Hswol7ssSim5R87pPoSamnGG9EwmKwA586TnxusI8DZdZaHpTtOiRoDCX/UL0k7pCYlMeI -VOdhlE3X3CHZHMP+2itnaFzqe5ahY6vWmM7NF/WaV5rTO2d0jR1WWTYz3eXoE3L8Q5KfdNZieJ3A -vEekbDsk6rC0xijWMIrQ6vhYxYZl2r3RLMeydj3/l745+YRjQ4+fM6Y1wddIBj6x66XrdaJw95K5 -BfKTBcIvkJOfEv+nZOqjsx/RD++UWl+6c/0Obb89cPul21zlbaK/TdQwb5j3zwfnY/OX51WZ+lsk -C35NjP86V2P9petmz/uuGz1wk9T5b07dFG9y7ATYd1Ot9d4kXM8Nzmw1zPKzlbOx2anZt2fnZu/M -qqdeO/sa/ftXnVb9q9ZXqfVa+7WT17jgi0T/ovVF6r8YvEjPXiL6S9ZLzkvccxcc1gstG6znz222 -zp27c046YFafyzZ6B75JTj791NM09vjU42cf56YeO/sYfWny+iRN+EutE+N263hLmbXAld+T4eJ6 -VNySlWk2Hy4u8QYH3NYBFDrYV2ntaym15rpyepQYrAIF9ZyVq+fauQnuKe46l6Hu9G+wduBvzn/H -T/Xt1nZnO65wzh1qs6GhPbE9U3u4Vm+p1ddSY9W3WFucLT9p+WXL7RbVQAt5Hr/el7zXvZzbW+r0 -ur0bbN71PkuP2ZXXY3DpeyiBHuKCHqd+SU/1+gH9ST2nh3qgU2aiJDPk7HR3l93eNpOx1Nkmqv0H -RXJKLO5iV3dHn6g6JUJP38HANCF/3vvYmTPQWNgmVnUFxGBhb5sYRsDNgCkEDIXTZmjsTSSSdjbw -FRfBY3gF+zEkHUqkiWBfZoM9QRIJSCSInfEkECmQsDMyozAdgpqHEsAujGuXpBiUSOQf+h/7W65l -CmVuZHN0cmVhbQplbmRvYmoKCjYgMCBvYmoKNDQ0NwplbmRvYmoKCjcgMCBvYmoKPDwvVHlwZS9G -b250RGVzY3JpcHRvci9Gb250TmFtZS9CQUFBQUErTGliZXJhdGlvblNlcmlmCi9GbGFncyA0Ci9G -b250QkJveFstMTc2IC0zMDMgMTAwNSA5ODFdL0l0YWxpY0FuZ2xlIDAKL0FzY2VudCA4OTEKL0Rl -c2NlbnQgLTIxNgovQ2FwSGVpZ2h0IDk4MQovU3RlbVYgODAKL0ZvbnRGaWxlMiA1IDAgUgo+Pgpl -bmRvYmoKCjggMCBvYmoKPDwvTGVuZ3RoIDI1OS9GaWx0ZXIvRmxhdGVEZWNvZGU+PgpzdHJlYW0K -eJxdkMtuhSAQhvc8BcvTxQloPZeFMWlsTFz0kto+AMJoSSoQxIVvXxhO26QLyDfM/DP8w9r+sTc6 -sFdv5QCBTtooD6vdvAQ6wqwNKUqqtAy3CG+5CEdY1A77GmDpzWTrmrC3mFuD3+nhQdkR7gh78Qq8 -NjM9fLRDjIfNuS9YwATKSdNQBVPs8yTcs1iAoerYq5jWYT9GyV/B++6AlhgX+SvSKlidkOCFmYHU -nDe07rqGgFH/ctesGCf5KXysLGIl59W1iVwin0+J7zO3iavMXeITcskTn5EvVeJLrsE+1/xe4vzb -pPSTtKofh1Ru3kd3uE+0lQxpA78rd9YlFZ5vRI59vwplbmRzdHJlYW0KZW5kb2JqCgo5IDAgb2Jq -Cjw8L1R5cGUvRm9udC9TdWJ0eXBlL1RydWVUeXBlL0Jhc2VGb250L0JBQUFBQStMaWJlcmF0aW9u -U2VyaWYKL0ZpcnN0Q2hhciAwCi9MYXN0Q2hhciA4Ci9XaWR0aHNbMzY1IDcyMiA0NDMgMjc3IDUw -MCAyNTAgMjc3IDUwMCAzMzMgXQovRm9udERlc2NyaXB0b3IgNyAwIFIKL1RvVW5pY29kZSA4IDAg -Ugo+PgplbmRvYmoKCjEwIDAgb2JqCjw8L0YxIDkgMCBSCj4+CmVuZG9iagoKMTEgMCBvYmoKPDwv -Rm9udCAxMCAwIFIKL1Byb2NTZXRbL1BERi9UZXh0XQo+PgplbmRvYmoKCjEgMCBvYmoKPDwvVHlw -ZS9QYWdlL1BhcmVudCA0IDAgUi9SZXNvdXJjZXMgMTEgMCBSL01lZGlhQm94WzAgMCA2MTIgNzky -XS9Hcm91cDw8L1MvVHJhbnNwYXJlbmN5L0NTL0RldmljZVJHQi9JIHRydWU+Pi9Db250ZW50cyAy -IDAgUj4+CmVuZG9iagoKNCAwIG9iago8PC9UeXBlL1BhZ2VzCi9SZXNvdXJjZXMgMTEgMCBSCi9N -ZWRpYUJveFsgMCAwIDYxMiA3OTIgXQovS2lkc1sgMSAwIFIgXQovQ291bnQgMT4+CmVuZG9iagoK -MTIgMCBvYmoKPDwvVHlwZS9DYXRhbG9nL1BhZ2VzIDQgMCBSCi9PcGVuQWN0aW9uWzEgMCBSIC9Y -WVogbnVsbCBudWxsIDBdCi9MYW5nKGVuLVVTKQo+PgplbmRvYmoKCjEzIDAgb2JqCjw8L0F1dGhv -cjxGRUZGMDA0QzAwNzUwMDY5MDA3MzAwMjAwMEMxMDA2QzAwNzYwMDYxMDA3MjAwNjUwMDdBPgov -Q3JlYXRvcjxGRUZGMDA1NzAwNzIwMDY5MDA3NDAwNjUwMDcyPgovUHJvZHVjZXI8RkVGRjAwNEMw -MDY5MDA2MjAwNzIwMDY1MDA0RjAwNjYwMDY2MDA2OTAwNjMwMDY1MDAyMDAwMzQwMDJFMDAzMj4K -L0NyZWF0aW9uRGF0ZShEOjIwMTUwMzAzMTQ0ODIwLTAzJzAwJyk+PgplbmRvYmoKCnhyZWYKMCAx -NAowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDU1NzIgMDAwMDAgbiAKMDAwMDAwMDAxOSAwMDAw -MCBuIAowMDAwMDAwMTk5IDAwMDAwIG4gCjAwMDAwMDU3MTUgMDAwMDAgbiAKMDAwMDAwMDIxOSAw -MDAwMCBuIAowMDAwMDA0NzUwIDAwMDAwIG4gCjAwMDAwMDQ3NzEgMDAwMDAgbiAKMDAwMDAwNDk2 -NiAwMDAwMCBuIAowMDAwMDA1Mjk0IDAwMDAwIG4gCjAwMDAwMDU0ODUgMDAwMDAgbiAKMDAwMDAw -NTUxNyAwMDAwMCBuIAowMDAwMDA1ODE0IDAwMDAwIG4gCjAwMDAwMDU5MTEgMDAwMDAgbiAKdHJh -aWxlcgo8PC9TaXplIDE0L1Jvb3QgMTIgMCBSCi9JbmZvIDEzIDAgUgovSUQgWyA8MjFDRTgyOUYx -MjgzQjk3MkJEMTdBODJEMEFGOENFNDU+CjwyMUNFODI5RjEyODNCOTcyQkQxN0E4MkQwQUY4Q0U0 -NT4gXQovRG9jQ2hlY2tzdW0gL0ZDNEM3MkZBNjgxNzcyNjQ3NDExNTZBMzM5NTdDRDFCCj4+CnN0 -YXJ0eHJlZgo2MTQ4CiUlRU9GCg== ---bcaec52c63897248ac051066662d-- diff --git a/preguntales/tests/testing_mails/mail_with_identifier_in_the_content.txt b/preguntales/tests/testing_mails/mail_with_identifier_in_the_content.txt deleted file mode 100644 index e07a31af..00000000 --- a/preguntales/tests/testing_mails/mail_with_identifier_in_the_content.txt +++ /dev/null @@ -1,75 +0,0 @@ -From falvarez@votainteligente.cl Wed Jun 26 21:05:33 2013 -Received: from mail-vb0-f47.google.com ([209.85.212.47]) - by ip-10-170-133-165.us-west-1.compute.internal with esmtp (Exim 4.80) - (envelope-from ) - id 1UrwuD-0007Gc-2V - for prueba+4aaaabbb@mailit.ciudadanointeligente.org; Wed, 26 Jun 2013 21:05:33 +0000 -Received: by mail-vb0-f47.google.com with SMTP id x14so11051801vbb.20 - for ; Wed, 26 Jun 2013 14:05:31 -0700 (PDT) -X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=google.com; s=20120113; - h=mime-version:sender:x-originating-ip:date:x-google-sender-auth - :message-id:subject:from:to:content-type:x-gm-message-state; - bh=0UJB+0yWC+4zTy2FXa55TesY6fxhFS2l4GnjWtJYUPk=; - b=GiEiBbwFw9TZX+VrJFdR85QtGeKvsgsq0W+LhelPSybC9mpEbeDoeSb+lQCRVSiN0p - S8Ljmrem3htNGMFzudEyWDdeyfm6vHTybKOQgxsjQqQ3CGkJAaU1NDMSYBRxglqiffx3 - nIDV79JcAXYXyXrOf4Lbahj/iFD2yUS11z7N1pO+Cq28rKLdWcv8zJ5X3sZVCw9Kz1y7 - AGHAHeQTlM48GFHsPmP+YW5DlogwHx55fuSHIS0EiQM4RPBqXZPrrCns3cFmh1XTOmJ+ - AsRCv9U9lF/7HUpEPF92PJTwLeGv6lwHUp2KARspS8StU4rEpW8eqbgFArF0p+MH7n7e - S+LA== -MIME-Version: 1.0 -X-Received: by 10.52.21.232 with SMTP id y8mr1968542vde.6.1372280730863; Wed, - 26 Jun 2013 14:05:30 -0700 (PDT) -Sender: falvarez@votainteligente.cl -Received: by 10.220.56.203 with HTTP; Wed, 26 Jun 2013 14:05:30 -0700 (PDT) -X-Originating-IP: [200.86.239.240] -Date: Wed, 26 Jun 2013 17:05:30 -0400 -X-Google-Sender-Auth: RfE13xxH37g_NNC5sBUMhQzst3U -Message-ID: -Subject: prueba4 -From: =?ISO-8859-1?Q?Felipe_=C1lvarez?= -To: prueba+4aaaabbb@mailit.ciudadanointeligente.org -Content-Type: multipart/alternative; boundary=20cf3079baba7ee00f04e01501af -X-Gm-Message-State: ALoCoQl6etdV/szaymxUHNsvjf5BWlNkMIt7Ha8HXf/jrq+0ykO9mHBtDkbqX7jM+TFqzH3PUL5z - ---20cf3079baba7ee00f04e01501af -Content-Type: text/plain; charset=ISO-8859-1 -Content-Transfer-Encoding: quoted-printable - -prueba4lafieri este es el identifier 4aaaabbb prueba+4aaaabbb@mailit.ciudadanointeligente.org - ---=20 -*Felipe =C1lvarez -* -Desarrollador de Aplicaciones Web -Skype: luisfelipealvarezburgos -Twitter: @lfalvarez -Celular: +56973961732 -*Fundaci=F3n Ciudadano Inteligente* -Holanda 895 - Providencia, Santiago de Chile. -CiudadanoInteligente.cl | -@ciudadanoi - | (56-2) 419 27 70 - ---20cf3079baba7ee00f04e01501af -Content-Type: text/html; charset=ISO-8859-1 -Content-Transfer-Encoding: quoted-printable - -
prueba4lafieri este es el identifier prueba+4aaaabbb@mailit.ciudadanointeligente.org

--
Felipe =C1lvarez
Desarrollador de Aplicacion= -es Web
-Skype: luisfelipealvarezburgos
Twitter: @lfalvarez
Celular: +56973961732<= -br>
Fundaci=F3n Ciudadano Inteligente
-
Holanda 895 -= - Providencia, Santiago de Chile.=A0
CiudadanoInteligente.cl=A0|=A0@ciudadanoi=A0|=A0= -(56-2) 419 27 70
- -
- ---20cf3079baba7ee00f04e01501af-- - diff --git a/preguntales/tests/testing_mails/reply_mail.txt b/preguntales/tests/testing_mails/reply_mail.txt deleted file mode 100644 index f17a09e2..00000000 --- a/preguntales/tests/testing_mails/reply_mail.txt +++ /dev/null @@ -1,134 +0,0 @@ -From falvarez@votainteligente.cl Tue Jul 02 23:00:45 2013 -Received: from mail-ie0-f180.google.com ([209.85.223.180]) - by ip-10-170-133-165.us-west-1.compute.internal with esmtp (Exim 4.80) - (envelope-from ) - id 1Uu9Yz-0001Qj-D6 - for devteam+bf2b64b6e34b11e2aeda1231400178dd@mailit.ciudadanointeligente.org; Tue, 02 Jul 2013 23:00:45 +0000 -Received: by mail-ie0-f180.google.com with SMTP id f4so12650964iea.25 - for ; Tue, 02 Jul 2013 16:00:58 -0700 (PDT) -X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=google.com; s=20120113; - h=mime-version:sender:x-originating-ip:in-reply-to:references:date - :x-google-sender-auth:message-id:subject:from:to:content-type - :x-gm-message-state; - bh=pjbNHC7bRrTwNqTB6ZD1D2vES17r10y475w9rrC6SQk=; - b=MrWHR5RM9aFhULy7BnxxsFfKMJLukp4/6DoF8s4pyemy9ipuZWR81CpvXFHg+luURO - abxgGFYKlW1SkOpM77MOiWEaaQ/Ll3uxEoCYwZadl/J7I5/01M69qGoXtIZDmLKNeU/d - +/eZikj+z5Q/XtDlLekKeoBZGI8JKz4USPB+wFIUg3C3rUDwRGylxT/cEYi0hVClixx2 - x1uMQKkaaX79yAdXcSDXZLKLCdu7QMHULhasx2lTMd7wt38mjNAtT8OacfW+mSt4uYl7 - qJI24fnIQj75k5X2LxT8rAzuTB9KdAVAdy9EQ+snKAMIGUkjM5sUIL0FBt2zuWj8+z8C - MLbg== -MIME-Version: 1.0 -X-Received: by 10.43.178.199 with SMTP id ox7mr586424icc.94.1372806058269; - Tue, 02 Jul 2013 16:00:58 -0700 (PDT) -Sender: falvarez@votainteligente.cl -Received: by 10.64.225.174 with HTTP; Tue, 2 Jul 2013 16:00:58 -0700 (PDT) -X-Originating-IP: [200.86.197.223] -In-Reply-To: <0000013fa0d5479f-4ed27da9-f7f5-4a59-be73-d07e41d6b1f9-000000@email.amazonses.com> -References: <0000013fa0d5479f-4ed27da9-f7f5-4a59-be73-d07e41d6b1f9-000000@email.amazonses.com> -Date: Tue, 2 Jul 2013 19:00:58 -0400 -X-Google-Sender-Auth: GK_Rj33h5PGc8cdnWGCdhMSBC30 -Message-ID: -Subject: Re: New Message on writeit -From: =?ISO-8859-1?Q?Felipe_=C1lvarez?= -To: devteam+bf2b64b6e34b11e2aeda1231400178dd@mailit.ciudadanointeligente.org -Content-Type: multipart/alternative; boundary=001a11c307fa72e44504e08f5155 -X-Gm-Message-State: ALoCoQkOx9YWoy3UVpacIgCkf099Yb9IhHvt8U/n4nsG1TFeMshoxuPLBp23wGlvcUv1ftQaHdyR - ---001a11c307fa72e44504e08f5155 -Content-Type: text/plain; charset=ISO-8859-1 -Content-Transfer-Encoding: quoted-printable - -aass =E1=E9=ED=F3=FA=F1 - - -On 2 July 2013 15:21, < -devteam+bf2b64b6e34b11e2aeda1231400178dd@mailit.ciudadanointeligente.org>wr= -ote: - -> Hello Felipe =C1lvarez: -> You have a new message on writeit: -> -> From: Felipe -> Subject: probando la respuesta -> Content: Ahora si se puede responder al mail. -> -> -> Chau -> -> You cannot answer yet, but you will soon have that oportunity (IMPLEMENT -> ME PLEASE) -> -> -> Thanks bye -> - - - ---=20 -*Felipe =C1lvarez -* -Desarrollador de Aplicaciones Web -Skype: luisfelipealvarezburgos -Twitter: @lfalvarez -Celular: +56973961732 -*Fundaci=F3n Ciudadano Inteligente* -Holanda 895 - Providencia, Santiago de Chile. -CiudadanoInteligente.cl | -@ciudadanoi - | (56-2) 419 27 70 - ---001a11c307fa72e44504e08f5155 -Content-Type: text/html; charset=ISO-8859-1 -Content-Transfer-Encoding: quoted-printable - -
Estimado Felipe:

La opini=F3n de nuestra campa=F1a es que todos deben ser felices y que d= -ios no existe.
-

Muchas gracias por tu = -inter=E9s en nuestra campa=F1a.
-
Saludo= -s


= -On 2 July 2013 15:21, <devteam+bf2b64b6e34b11e2aeda1231400178dd@mailit.ciudadanointeligente.o= -rg> wrote:
-
Hello Felipe =C1lvarez:
-You have a new message on writeit:
-
-From: Felipe
-Subject: =A0probando la respuesta
-Content: =A0Ahora si se puede responder al mail.
-
-
-Chau
-
-You cannot answer yet, but you will soon have that oportunity (IMPLEMENT ME= - PLEASE)
-
-
-Thanks bye
-



--
Felipe =C1lvarez
Desarrollador de Aplicacion= -es Web
-Skype: luisfelipealvarezburgos
Twitter: @lfalvarez
Celular: +56973961732<= -br>
Fundaci=F3n Ciudadano Inteligente
-
Holanda 895 -= - Providencia, Santiago de Chile.=A0
CiudadanoInteligente.cl=A0|=A0@ciudadanoi=A0|=A0= -(56-2) 419 27 70
- -
- ---001a11c307fa72e44504e08f5155-- - - diff --git a/preguntales/urls.py b/preguntales/urls.py deleted file mode 100644 index 729e7014..00000000 --- a/preguntales/urls.py +++ /dev/null @@ -1,34 +0,0 @@ -from django.conf import settings -from django.conf.urls import url -from preguntales.views import ( - MessageDetailView, - ElectionAskCreateView, - QuestionsPerCandidateView, - ElectionRankingView, - ConfirmationView, -) -from django.views.decorators.cache import cache_page - -new_answer_endpoint = r"^new_answer/%s/?$" % (settings.NEW_ANSWER_ENDPOINT) - -urlpatterns = [ - url(r'^election/(?P[-\w]+)/messages/(?P\d+)/?$', - MessageDetailView.as_view(template_name='elections/message_detail.html'), - name='message_detail'), - url(r'^election/(?P[-\w]+)/(?P[-\w]+)/questions?$', - QuestionsPerCandidateView.as_view(template_name='elections/questions_per_candidate.html'), - name='questions_per_candidate' - ), - #ask - url(r'^election/(?P[-\w]+)/ask/?$', - ElectionAskCreateView.as_view(template_name='elections/ask_candidate.html'), - name='ask_detail_view'), - #ranking - url(r'^election/(?P[-\w]+)/ranking/?$', - cache_page(60 * settings.CACHE_MINUTES)(ElectionRankingView.as_view(template_name='elections/ranking_candidates.html')), - name='ranking_view'), - #confirmation - url(r'^confirmation/(?P[-\w]+)/?$', - ConfirmationView.as_view(), - name='confirmation'), -] diff --git a/preguntales/views.py b/preguntales/views.py deleted file mode 100644 index 534e9e8a..00000000 --- a/preguntales/views.py +++ /dev/null @@ -1,188 +0,0 @@ -# coding=utf-8 -from django.views.generic import DetailView, CreateView -from elections.models import Election, Candidate -from preguntales.forms import MessageForm -from django.core.urlresolvers import reverse -from django.views.generic.base import View -from django.views.decorators.csrf import csrf_exempt -from django.http import HttpResponse -from django.core.mail import mail_admins -from elections.views import CandidateDetailView -from django.db.models import Q -from preguntales.models import Message, Answer -from operator import itemgetter -from django.shortcuts import get_object_or_404 - - -class MessageDetailView(DetailView): - model = Message - context_object_name = 'votainteligentemessage' - - def get_context_data(self, **kwargs): - context = super(MessageDetailView, self).get_context_data(**kwargs) - election = Election.objects.get(slug=self.kwargs['election_slug']) - context['election'] = election - return context - - -class ElectionAskCreateView(CreateView): - model = Message - form_class = MessageForm - - def dispatch(self, request, *args, **kwargs): - if 'slug' in kwargs: - self.election = Election.objects.get(slug = kwargs['slug']) - return super(ElectionAskCreateView, self).dispatch(request, *args, **kwargs) - - def get_context_data(self, **kwargs): - context = super(ElectionAskCreateView, self).get_context_data(**kwargs) - context['election'] = self.election - context['writeitmessages'] = Message.objects.filter(election=self.election) - return context - - def get_form_kwargs(self): - kwargs = super(ElectionAskCreateView, self).get_form_kwargs() - election_slug = self.kwargs['slug'] - election = Election.objects.get(slug = election_slug) - kwargs['election'] = election - return kwargs - - def get_success_url(self): - election_slug = self.kwargs['slug'] - return reverse('ask_detail_view', kwargs={'slug':election_slug,}) - - -class QuestionsPerCandidateView(CandidateDetailView): - def get_queryset(self): - queryset = super(QuestionsPerCandidateView, self).get_queryset() - election_slug = self.kwargs['election_slug'] - queryset.filter(Q(elections__slug=election_slug)) - return queryset - - def get_context_data(self, **kwargs): - context = super(QuestionsPerCandidateView, self)\ - .get_context_data(**kwargs) - messages = Message.objects.filter(people=self.object) - context['questions'] = messages - return context - - -class RankingMixin(object): - candidate_queryset = None - votainteligentemessages = None - - def __init__(self, *args, **kwargs): - super(RankingMixin, self).__init__(*args, **kwargs) - - def get_ranking(self): - return self.candidate_queryset - - def all_messages(self): - if not self.votainteligentemessages: - self.votainteligentemessages = Message.objects\ - .filter(people__in=self.candidate_queryset).distinct() - return self.votainteligentemessages - - def all_possible_answers(self): - answers = self.all_messages() - total_possible_answers = 0 - for answer in answers: - total_possible_answers += answer.people.count() - return total_possible_answers - - def actual_answers(self): - messages = self.all_messages() - actual_count = 0 - for message in messages: - actual_count += message.answers.count() - return actual_count - - def success_index(self): - all_possible_answers = float(self.all_possible_answers()) - actual_answers = float(self.actual_answers()) - return all_possible_answers/actual_answers - - def get_clasified(self): - clasified = [] - messages = self.all_messages() - if not messages: - return [] - are_there_answers = Answer.objects.\ - filter(message__in=messages).exists() - if not are_there_answers: - return [] - success_index = self.success_index() - for candidate in self.candidate_queryset: - possible_answers = Message.objects.\ - filter(Q(people=candidate)).count() - actual_answers = Answer.objects.\ - filter(Q(person=candidate) & Q(message__in=messages)).\ - count() - points = (success_index + 1)*possible_answers*actual_answers\ - - possible_answers*possible_answers - clasified.append({'id': candidate.id, - 'name': candidate.name, - 'candidate': candidate, - 'possible_answers': possible_answers, - 'actual_answers': actual_answers, - 'points': points - }) - return clasified - - def get_ordered(self): - clasified = self.get_clasified() - clasified = sorted(clasified, key=itemgetter('points'), - reverse=True) - - return clasified - - def get_good(self): - amount_of_good_ones = self.candidate_queryset.count()/2 - good = [] - ordered = self.get_ordered() - for i in range(0, min(amount_of_good_ones, len(ordered))): - if ordered[i]["actual_answers"] > 0: - good.append(ordered[i]) - return good - - def get_bad(self): - amount_of_bad_ones = -self.candidate_queryset.count()/2 - ordered = self.get_ordered()[::-1] - bad = ordered[:amount_of_bad_ones] - for item in ordered[amount_of_bad_ones:]: - if item["actual_answers"] > 0: - break - bad.append(item) - return bad - - -class ElectionRankingView(DetailView, RankingMixin): - model = Election - - def get_object(self, queryset=None): - the_object = super(ElectionRankingView, self).get_object(queryset) - queryset = the_object.candidates.all() - self.candidate_queryset = queryset - return the_object - - def get_context_data(self, **kwargs): - context = super(DetailView, self).get_context_data(**kwargs) - context['good'] = self.get_good() - context['bad'] = self.get_bad() - return context - - -class ConfirmationView(DetailView): - model = Message - template_name = 'preguntales/confirmation.html' - - def get_queryset(self): - return self.model.objects.filter(confirmation__isnull=False).filter(confirmation__when_confirmed__isnull=True) - - def get_object(self, queryset=None): - if queryset is None: - queryset = self.get_queryset() - self.key = self.kwargs['key'] - message = get_object_or_404(queryset, confirmation__key=self.key) - message.confirm() - return message diff --git a/proposal_subscriptions/migrations/0001_initial.py b/proposal_subscriptions/migrations/0001_initial.py index 6cc4313c..5142cfc3 100644 --- a/proposal_subscriptions/migrations/0001_initial.py +++ b/proposal_subscriptions/migrations/0001_initial.py @@ -1,11 +1,12 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.10.7 on 2017-06-27 21:20 +# Generated by Django 1.11.15 on 2020-05-02 23:57 from __future__ import unicode_literals from django.conf import settings from django.db import migrations, models import django.db.models.deletion import picklefield.fields +import uuid class Migration(migrations.Migration): @@ -14,9 +15,20 @@ class Migration(migrations.Migration): dependencies = [ migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('popular_proposal', '0001_initial'), ] operations = [ + migrations.CreateModel( + name='CommitmentNotification', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('notified', models.BooleanField(default=False)), + ('created', models.DateTimeField(auto_now_add=True, null=True)), + ('commitment', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='notifications', to='popular_proposal.Commitment')), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='commitment_notifications', to=settings.AUTH_USER_MODEL)), + ], + ), migrations.CreateModel( name='SearchSubscription', fields=[ @@ -25,11 +37,12 @@ class Migration(migrations.Migration): ('search_params', picklefield.fields.PickledObjectField(editable=False)), ('filter_class_module', models.CharField(max_length=254)), ('filter_class_name', models.CharField(max_length=254)), - ('oftenity', models.DurationField()), + ('oftenity', models.DurationField(help_text='Cada cuanto te notificamos?')), ('created', models.DateTimeField(auto_now_add=True, null=True)), ('updated', models.DateTimeField(auto_now=True, null=True)), ('last_run', models.DateTimeField(blank=True, null=True)), - ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ('token', models.UUIDField(default=uuid.uuid4)), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='search_subscriptions', to=settings.AUTH_USER_MODEL)), ], ), ] diff --git a/proposal_subscriptions/migrations/0002_auto_20170704_1549.py b/proposal_subscriptions/migrations/0002_auto_20170704_1549.py deleted file mode 100644 index 8c1b3128..00000000 --- a/proposal_subscriptions/migrations/0002_auto_20170704_1549.py +++ /dev/null @@ -1,28 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.7 on 2017-07-04 15:49 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion -import uuid - - -class Migration(migrations.Migration): - - dependencies = [ - ('proposal_subscriptions', '0001_initial'), - ] - - operations = [ - migrations.AddField( - model_name='searchsubscription', - name='token', - field=models.UUIDField(default=uuid.uuid4), - ), - migrations.AlterField( - model_name='searchsubscription', - name='user', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='search_subscriptions', to=settings.AUTH_USER_MODEL), - ), - ] diff --git a/proposal_subscriptions/migrations/0003_auto_20170817_1344.py b/proposal_subscriptions/migrations/0003_auto_20170817_1344.py deleted file mode 100644 index 618d2f50..00000000 --- a/proposal_subscriptions/migrations/0003_auto_20170817_1344.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.7 on 2017-08-17 13:44 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('proposal_subscriptions', '0002_auto_20170704_1549'), - ] - - operations = [ - migrations.AlterField( - model_name='searchsubscription', - name='oftenity', - field=models.DurationField(help_text='Cada cuanto te notificamos?'), - ), - ] diff --git a/proposal_subscriptions/migrations/0004_commitmentnotification.py b/proposal_subscriptions/migrations/0004_commitmentnotification.py deleted file mode 100644 index 5a8b0242..00000000 --- a/proposal_subscriptions/migrations/0004_commitmentnotification.py +++ /dev/null @@ -1,29 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.7 on 2017-09-14 18:41 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('popular_proposal', '0027_auto_20170914_1841'), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('proposal_subscriptions', '0003_auto_20170817_1344'), - ] - - operations = [ - migrations.CreateModel( - name='CommitmentNotification', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('notified', models.BooleanField(default=False)), - ('created', models.DateTimeField(auto_now_add=True, null=True)), - ('commitment', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='notifications', to='popular_proposal.Commitment')), - ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='commitment_notifications', to=settings.AUTH_USER_MODEL)), - ], - ), - ] diff --git a/requirements.txt b/requirements.txt index c74fe882..27eba8d3 100644 --- a/requirements.txt +++ b/requirements.txt @@ -19,7 +19,7 @@ django-tastypie==0.13.3 linaro-django-pagination==2.0.3 celery==3.1.18 python-memcached==1.58 --e git+https://github.com/ciudadanointeligente/django-popolo.git@areas_with_slug#egg=django_popolo-dev +-e git+https://github.com/mysociety/django-popolo.git#egg=django-popolo django-mathfilters==0.4.0 django-picklefield==0.3.2 -e git+https://github.com/dokterbob/django-newsletter#egg=django_newsletter @@ -56,7 +56,6 @@ django-robots==3.0 djangorestframework-csv==2.0.0 numpy==1.13.3 roman==2.0.0 -pandas==0.21.0 django-bootstrap4==0.0.6 requests==2.20.1 Collectfast==0.6.2 diff --git a/rioxinteiro/__init__.py b/rioxinteiro/__init__.py deleted file mode 100644 index 64b7dff8..00000000 --- a/rioxinteiro/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from forms import PersonalDataForm \ No newline at end of file diff --git a/rioxinteiro/apps.py b/rioxinteiro/apps.py deleted file mode 100644 index 9384d19f..00000000 --- a/rioxinteiro/apps.py +++ /dev/null @@ -1,8 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.apps import AppConfig - - -class RioxinteiroConfig(AppConfig): - name = 'rioxinteiro' diff --git a/rioxinteiro/carga_dados_engrasados.py b/rioxinteiro/carga_dados_engrasados.py deleted file mode 100644 index c70d18fa..00000000 --- a/rioxinteiro/carga_dados_engrasados.py +++ /dev/null @@ -1,90 +0,0 @@ -from elections.models import Candidate -import uuid -from constance import config -def crea(): - admin = User.objects.get(username="admin") - admin.set_password('a') - admin.save() - a = Area.objects.get(id=config.DEFAULT_AREA) - e = Election.objects.create(name=u"Imperador du todo mondo", area=a) - cands = [ - {'coali': "FCI", 'email':'mfreire@cidadaniainteligente.org' , 'partido': 'vermelho', 'name': 'Malu'}, - {'coali': "FCI", 'email':'alourenco@cidadaniainteligente.org' , 'partido': 'laranjo', 'name': 'Caro'}, - {'coali': "Casa Fluminense", 'email':'contato@cidadaniainteligente.org' , 'partido': 'verde', 'name': 'Enrique'}, - {'coali': "Casa Fluminense", 'email':'contato@cidadaniainteligente.org' , 'partido': 'azul', 'name': 'vitor'}, - ] - ids_candidatos = [] - ids_users = [] - ids_personal_data = [] - ids_propostas = [] - ids_incrementals = [] - for cand in cands: - candidate = Candidate.objects.create(name=cand['name']) - ids_candidatos.append(candidate.id) - e.candidates.add(candidate) - coali = PersonalData.objects.create(candidate=candidate, label=u'Coligação', value=cand['coali']) - ids_personal_data.append(coali.id) - partido = PersonalData.objects.create(candidate=candidate, label=u'Partido', value=cand['partido']) - ids_personal_data.append(partido.id) - contact = CandidacyContact.objects.create(candidate=candidate, mail=cand['email']) - user_candidate = contact.create_and_set_user() - ids_users.append(user_candidate.id) - Candidacy.objects.create(candidate=candidate, user=user_candidate) - - - u = User.objects.create_user(username='feli', password='1234') - u.email = 'falvarez@ciudadanointeligente.org' - u.save() - ids_users.append(u.id) - proposta_bicis = PopularProposal.objects.create(proposer=u, - area=a, - data={}, - title=u'+ bicis', - one_liner=u'+ bicis', - clasification=u'education' - ) - ids_propostas.append(proposta_bicis.id) - proposta_ciclovias = PopularProposal.objects.create(proposer=u, - area=a, - data={}, - title=u'+ ciclovias', - one_liner=u'+ ciclovias', - clasification=u'education' - ) - ids_propostas.append(proposta_ciclovias.id) - proposta_politicas_publica1 = PopularProposal.objects.create(proposer=u, - area=a, - data={}, - title=u'melhores politicas publicas', - one_liner=u'melhores politicas publicas', - clasification=u'education' - ) - ids_propostas.append(proposta_politicas_publica1.id) - proposta_politicas_publica2 = PopularProposal.objects.create(proposer=u, - area=a, - data={}, - title=u'+ impostos', - one_liner=u'+ impostos', - clasification=u'education' - ) - ids_propostas.append(proposta_politicas_publica2.id) - fci = IncrementalsCandidateFilter.objects.create(name='FCI', filter_qs={'personal_datas__value': "FCI"}, exclude_qs={}) - ids_incrementals.append(fci.id) - cf = IncrementalsCandidateFilter.objects.create(name='Casa Fluminense', filter_qs={'personal_datas__value': "Casa Fluminense"}, exclude_qs={}) - ids_incrementals.append(cf.id) - i1 = ProposalSuggestionForIncremental(incremental=fci, proposal=proposta_bicis) - i2 = ProposalSuggestionForIncremental(incremental=fci, proposal=proposta_ciclovias) - i3 = ProposalSuggestionForIncremental(incremental=cf, proposal=proposta_politicas_publica1) - i4 = ProposalSuggestionForIncremental(incremental=cf, proposal=proposta_politicas_publica2) - - return e, ids_candidatos, ids_users, ids_personal_data, ids_propostas, ids_incrementals - - -def delete(): - Election.objects.filter(id=e.id).delete() - Candidate.objects.filter(id__in=ids_candidatos).delete() - PopularProposal.objects.filter(id__in=ids_propostas).delete() - User.objects.filter(id__in=ids_users).delete() - PersonalData.objects.filter(id__in=ids_personal_data).delete() - -e, ids_candidatos, ids_users, ids_personal_data, ids_propostas, ids_incrementals = crea() \ No newline at end of file diff --git a/rioxinteiro/fixtures/candidatos.csv b/rioxinteiro/fixtures/candidatos.csv deleted file mode 100644 index c811f9ea..00000000 --- a/rioxinteiro/fixtures/candidatos.csv +++ /dev/null @@ -1,4 +0,0 @@ -190000626241;ANDRÉ MONTEIRO;28;LUIZ ANDRE DE MOURA MONTEIRO;MASC.;1971-04-14;1407154796;78617050370;Casado(a);PARDA;Brasileira nata;Superior completo;Policial Militar;14000000;7000000;RJ;RIO DE JANEIRO;RIO DE JANEIRO;RJ;BR;2018-08-18;http://divulgacandcontas.tse.jus.br/candidaturas/oficial/2018/BR/RJ/2022802018/190000626241/foto_1534365230452.jpg;PRTB;Governador;True;28;PRTB;Partido Renovador Trabalhista Brasileiro;a@b.com; -190000621818;ANTHONY GAROTINHO;44;ANTHONY WILLIAM GAROTINHO MATHEUS DE OLIVEIRA;MASC.;1960-04-18;69839727753;36282530370;Casado(a);BRANCA;Brasileira nata;Superior completo;Locutor e Comentarista de Rádio e Televisão e Radialista;14000000;7000000;RJ;CAMPOS DOS GOYTACAZES;RIO DE JANEIRO;RJ;BR;2018-08-19;http://divulgacandcontas.tse.jus.br/candidaturas/oficial/2018/BR/RJ/2022802018/190000621818/foto_1534291306019.jpg;Para o Povo Voltar a Ser Feliz;Governador;True;44;PRP;Partido Republicano Progressista;b@b.com;https://www.facebook.com/anthony.garotinho.1069 -190000607895;DAYSE OLIVEIRA;16;DAYSE OLIVEIRA GOMES ;FEM.;1966-05-31;91253012768;23945500388;Solteiro(a);PRETA;Brasileira nata;Superior completo;Professor de Ensino Médio;14000000;7000000;RJ;RIO DE JANEIRO;RIO DE JANEIRO;RJ;BR;2018-08-18;http://divulgacandcontas.tse.jus.br/candidaturas/oficial/2018/BR/RJ/2022802018/190000607895/foto_1533951435917.jpg;PSTU;Governador;True;16;PSTU;Partido Socialista dos Trabalhadores Unificado;c@c.com;https://www.facebook.com/DaysePstu -190000609934;EDUARDO PAES;25;EDUARDO DA COSTA PAES;MASC.;1969-11-14;1475189702;72185730329;Casado(a);BRANCA;Brasileira nata;Superior completo;Administrador;14000000;7000000;RJ;RIO DE JANEIRO;RIO DE JANEIRO;RJ;BR;2018-08-19;http://divulgacandcontas.tse.jus.br/candidaturas/oficial/2018/BR/RJ/2022802018/190000609934/foto_1534088705321.jpg;FORÇA DO RIO;Governador;True;25;DEM;Democratas;d@c.com;https://twitter.com/eduardopaes_ diff --git a/rioxinteiro/forms.py b/rioxinteiro/forms.py deleted file mode 100644 index 358722dd..00000000 --- a/rioxinteiro/forms.py +++ /dev/null @@ -1,20 +0,0 @@ -# coding=utf-8 -from django import forms - - -class PersonalDataForm(forms.Form): - lema = forms.CharField(label=u'Slogan da campanha', required=False, initial='') - ocupacion = forms.CharField(label=u'Ocupação atual', required=False, initial='') - raca = forms.CharField(label=u'Raça', required=False, initial='') - orietacion_sexual = forms.CharField(label=u'Orientação sexual', required=False, initial='') - territorio = forms.CharField(label=u'Território', required=False, initial='') - experiencia = forms.CharField(label=u'Bio', - widget=forms.Textarea(), - max_length=4096, - required=False, - initial='' - ) - telefono = forms.CharField(label=u'Número de telefone', - required=False, - initial='', - help_text=u"Existe um telefone onde os cidadãos interessados na sua campanha podem se comunicar com você?") diff --git a/rioxinteiro/migrations/__init__.py b/rioxinteiro/migrations/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/rioxinteiro/proposals_categories.py b/rioxinteiro/proposals_categories.py deleted file mode 100644 index bb53d6c4..00000000 --- a/rioxinteiro/proposals_categories.py +++ /dev/null @@ -1,27 +0,0 @@ -# coding=utf-8 -from django.utils.translation import ugettext as _ - -_TOPIC_CHOICES = (('', _(u'Selecciona una categoría')), - (u"acessibilidade", u"Acessibilidade"), - (u"cultura", u"Cultura"), - (u"direitos-humanos", u"Direitos Humanos"), - (u"direitos-lgbt", u"Direitos LGBTQI+"), - (u"educacao", u"Educação"), - (u"emprego-renda", u"Emprego & Renda"), - (u"equidade-genero", u"Equidade de gênero"), - (u"espacos-publicos", u"Espaços Públicos"), - (u"gestao-publica", u"Gestão Pública, transparência e participação"), - (u"idoso", u"Idoso"), - (u"infancia", u"Infância"), - (u"justica-racial", u"Justiça Racial "), - (u"juventude", u"Juventude"), - (u"meio-ambiente", u"Meio Ambiente "), - (u"mobilidade-urbana", u"Mobilidade Urbana"), - (u"moradia", u"Moradia "), - (u"politica-metropolitana", u"Política Metropolitana"), - (u"politica-tributaria", u"Política Tributária"), - (u"saneamento-basico", u"Saneamento Básico"), - (u"saude", u"Saúde"), - (u"seguranca-publica", u"Segurança Pública"), - (u"sistema-politico", u"Sistema Político"), -) diff --git a/rioxinteiro/static/fonts/KGHAPPYSolid.ttf b/rioxinteiro/static/fonts/KGHAPPYSolid.ttf deleted file mode 100644 index cb149df7..00000000 Binary files a/rioxinteiro/static/fonts/KGHAPPYSolid.ttf and /dev/null differ diff --git a/rioxinteiro/static/img/1-metodologia.svg b/rioxinteiro/static/img/1-metodologia.svg deleted file mode 100644 index a6fbb9fd..00000000 --- a/rioxinteiro/static/img/1-metodologia.svg +++ /dev/null @@ -1,102 +0,0 @@ - - - - Page 1 - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/2-formacion.svg b/rioxinteiro/static/img/2-formacion.svg deleted file mode 100644 index 7b17e3d0..00000000 --- a/rioxinteiro/static/img/2-formacion.svg +++ /dev/null @@ -1,46 +0,0 @@ - - - - Group 4 - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/3-activismo.svg b/rioxinteiro/static/img/3-activismo.svg deleted file mode 100644 index 5bc355f9..00000000 --- a/rioxinteiro/static/img/3-activismo.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - Group 2 - Created with Sketch. - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/a-apoya-crea.svg b/rioxinteiro/static/img/a-apoya-crea.svg deleted file mode 100644 index 45c5b206..00000000 --- a/rioxinteiro/static/img/a-apoya-crea.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - Group 18 - Created with Sketch. - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/a-apoya-h.svg b/rioxinteiro/static/img/a-apoya-h.svg deleted file mode 100644 index 12d7fd3e..00000000 --- a/rioxinteiro/static/img/a-apoya-h.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - Group 16 - Created with Sketch. - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/a-apoya.svg b/rioxinteiro/static/img/a-apoya.svg deleted file mode 100644 index 90593a20..00000000 --- a/rioxinteiro/static/img/a-apoya.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - Group 25 - Created with Sketch. - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/a-crea-h.svg b/rioxinteiro/static/img/a-crea-h.svg deleted file mode 100644 index 45c5b206..00000000 --- a/rioxinteiro/static/img/a-crea-h.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - Group 18 - Created with Sketch. - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/a-crea.svg b/rioxinteiro/static/img/a-crea.svg deleted file mode 100644 index 0001e34f..00000000 --- a/rioxinteiro/static/img/a-crea.svg +++ /dev/null @@ -1,25 +0,0 @@ - - - - Group 24 - Created with Sketch. - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/a-encuentro-h.svg b/rioxinteiro/static/img/a-encuentro-h.svg deleted file mode 100644 index 8042d355..00000000 --- a/rioxinteiro/static/img/a-encuentro-h.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - Group 19 - Created with Sketch. - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/a-encuentro.svg b/rioxinteiro/static/img/a-encuentro.svg deleted file mode 100644 index 065ee28a..00000000 --- a/rioxinteiro/static/img/a-encuentro.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - Group 21 - Created with Sketch. - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/acento-hero.svg b/rioxinteiro/static/img/acento-hero.svg deleted file mode 100644 index 9ad274f5..00000000 --- a/rioxinteiro/static/img/acento-hero.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - Group 12 - Created with Sketch. - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/activity_background.png b/rioxinteiro/static/img/activity_background.png deleted file mode 100644 index 35028b47..00000000 Binary files a/rioxinteiro/static/img/activity_background.png and /dev/null differ diff --git a/rioxinteiro/static/img/adherido.svg b/rioxinteiro/static/img/adherido.svg deleted file mode 100644 index 31a344c7..00000000 --- a/rioxinteiro/static/img/adherido.svg +++ /dev/null @@ -1,26 +0,0 @@ - - - - Artboard - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/arrow.svg b/rioxinteiro/static/img/arrow.svg deleted file mode 100644 index f4f86571..00000000 --- a/rioxinteiro/static/img/arrow.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - Shape - Created with Sketch. - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/arrow_down.svg b/rioxinteiro/static/img/arrow_down.svg deleted file mode 100644 index 4c11b9b0..00000000 --- a/rioxinteiro/static/img/arrow_down.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - Arrow_ - Created with Sketch. - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/artes.jpg b/rioxinteiro/static/img/artes.jpg deleted file mode 100644 index a0e9d5ba..00000000 Binary files a/rioxinteiro/static/img/artes.jpg and /dev/null differ diff --git a/rioxinteiro/static/img/blueline-down.svg b/rioxinteiro/static/img/blueline-down.svg deleted file mode 100644 index 0367c777..00000000 --- a/rioxinteiro/static/img/blueline-down.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - Fill 1 Copy 9 - Created with Sketch. - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/candidate-default.jpg b/rioxinteiro/static/img/candidate-default.jpg deleted file mode 100644 index 56aab698..00000000 Binary files a/rioxinteiro/static/img/candidate-default.jpg and /dev/null differ diff --git a/rioxinteiro/static/img/candidato_transparente_sc.png b/rioxinteiro/static/img/candidato_transparente_sc.png deleted file mode 100644 index ca3aec36..00000000 Binary files a/rioxinteiro/static/img/candidato_transparente_sc.png and /dev/null differ diff --git a/rioxinteiro/static/img/caro_video.jpg b/rioxinteiro/static/img/caro_video.jpg deleted file mode 100644 index c703cd45..00000000 Binary files a/rioxinteiro/static/img/caro_video.jpg and /dev/null differ diff --git a/rioxinteiro/static/img/ciudadania.svg b/rioxinteiro/static/img/ciudadania.svg deleted file mode 100644 index 0e6a8da4..00000000 --- a/rioxinteiro/static/img/ciudadania.svg +++ /dev/null @@ -1,92 +0,0 @@ - - - - Group 6 - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/compartilhar_tem_compromiso.png b/rioxinteiro/static/img/compartilhar_tem_compromiso.png deleted file mode 100644 index 6196a47e..00000000 Binary files a/rioxinteiro/static/img/compartilhar_tem_compromiso.png and /dev/null differ diff --git a/rioxinteiro/static/img/conocetucandidato_sc.png b/rioxinteiro/static/img/conocetucandidato_sc.png deleted file mode 100644 index 5f13b676..00000000 Binary files a/rioxinteiro/static/img/conocetucandidato_sc.png and /dev/null differ diff --git a/rioxinteiro/static/img/destacado.svg b/rioxinteiro/static/img/destacado.svg deleted file mode 100644 index e146c18f..00000000 --- a/rioxinteiro/static/img/destacado.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - Group 12 - Created with Sketch. - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/dummy-img.jpg b/rioxinteiro/static/img/dummy-img.jpg deleted file mode 100644 index f33e47d3..00000000 Binary files a/rioxinteiro/static/img/dummy-img.jpg and /dev/null differ diff --git a/rioxinteiro/static/img/e-1.svg b/rioxinteiro/static/img/e-1.svg deleted file mode 100644 index 456ce673..00000000 --- a/rioxinteiro/static/img/e-1.svg +++ /dev/null @@ -1,44 +0,0 @@ - - - - Group 2 - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/e-2.svg b/rioxinteiro/static/img/e-2.svg deleted file mode 100644 index 77d16e84..00000000 --- a/rioxinteiro/static/img/e-2.svg +++ /dev/null @@ -1,102 +0,0 @@ - - - - Page 1 - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/favicon-96x96.png b/rioxinteiro/static/img/favicon-96x96.png deleted file mode 100644 index c81ed23f..00000000 Binary files a/rioxinteiro/static/img/favicon-96x96.png and /dev/null differ diff --git a/rioxinteiro/static/img/favicon.ico b/rioxinteiro/static/img/favicon.ico deleted file mode 100644 index 9c8ca6fa..00000000 Binary files a/rioxinteiro/static/img/favicon.ico and /dev/null differ diff --git a/rioxinteiro/static/img/flechas-hero.svg b/rioxinteiro/static/img/flechas-hero.svg deleted file mode 100644 index d6aae2b8..00000000 --- a/rioxinteiro/static/img/flechas-hero.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - Group 18 - Created with Sketch. - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/get-down.gif b/rioxinteiro/static/img/get-down.gif deleted file mode 100644 index fecb51db..00000000 Binary files a/rioxinteiro/static/img/get-down.gif and /dev/null differ diff --git a/rioxinteiro/static/img/glyphicons-halflings-white.png b/rioxinteiro/static/img/glyphicons-halflings-white.png deleted file mode 100644 index 3bf6484a..00000000 Binary files a/rioxinteiro/static/img/glyphicons-halflings-white.png and /dev/null differ diff --git a/rioxinteiro/static/img/glyphicons-halflings.png b/rioxinteiro/static/img/glyphicons-halflings.png deleted file mode 100644 index a9969993..00000000 Binary files a/rioxinteiro/static/img/glyphicons-halflings.png and /dev/null differ diff --git a/rioxinteiro/static/img/goic.jpg b/rioxinteiro/static/img/goic.jpg deleted file mode 100644 index 0afac712..00000000 Binary files a/rioxinteiro/static/img/goic.jpg and /dev/null differ diff --git a/rioxinteiro/static/img/guillier.jpg b/rioxinteiro/static/img/guillier.jpg deleted file mode 100644 index ed3c055e..00000000 Binary files a/rioxinteiro/static/img/guillier.jpg and /dev/null differ diff --git a/rioxinteiro/static/img/h-acusete.svg b/rioxinteiro/static/img/h-acusete.svg deleted file mode 100644 index 71fa8029..00000000 --- a/rioxinteiro/static/img/h-acusete.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - Group 42 - Created with Sketch. - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/h-candidato.svg b/rioxinteiro/static/img/h-candidato.svg deleted file mode 100644 index 07baf440..00000000 --- a/rioxinteiro/static/img/h-candidato.svg +++ /dev/null @@ -1,43 +0,0 @@ - - - - Group 70 - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/h-infografias.svg b/rioxinteiro/static/img/h-infografias.svg deleted file mode 100644 index 135cd32c..00000000 --- a/rioxinteiro/static/img/h-infografias.svg +++ /dev/null @@ -1,29 +0,0 @@ - - - - Group 44 - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/h-naranja.svg b/rioxinteiro/static/img/h-naranja.svg deleted file mode 100644 index 3a5766a7..00000000 --- a/rioxinteiro/static/img/h-naranja.svg +++ /dev/null @@ -1,32 +0,0 @@ - - - - Group 39 - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/h-nna.svg b/rioxinteiro/static/img/h-nna.svg deleted file mode 100644 index 63d36e27..00000000 --- a/rioxinteiro/static/img/h-nna.svg +++ /dev/null @@ -1,78 +0,0 @@ - - - - Group 60 - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/h-perfiles.svg b/rioxinteiro/static/img/h-perfiles.svg deleted file mode 100644 index 440c250b..00000000 --- a/rioxinteiro/static/img/h-perfiles.svg +++ /dev/null @@ -1,31 +0,0 @@ - - - - Group 68 - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/h-playlist.svg b/rioxinteiro/static/img/h-playlist.svg deleted file mode 100644 index 70d82f6b..00000000 --- a/rioxinteiro/static/img/h-playlist.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - Group 48 - Created with Sketch. - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/h-pregunton.svg b/rioxinteiro/static/img/h-pregunton.svg deleted file mode 100644 index 223cd588..00000000 --- a/rioxinteiro/static/img/h-pregunton.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - Group 45 - Created with Sketch. - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/h-procom.svg b/rioxinteiro/static/img/h-procom.svg deleted file mode 100644 index feb8d2dc..00000000 --- a/rioxinteiro/static/img/h-procom.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - Group 41 - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/hero.svg b/rioxinteiro/static/img/hero.svg deleted file mode 100644 index f85a9efc..00000000 --- a/rioxinteiro/static/img/hero.svg +++ /dev/null @@ -1,105 +0,0 @@ - - - - hero - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Vota X-5 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Propuesta - - - Ciudadana - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/home-logo-fci.svg b/rioxinteiro/static/img/home-logo-fci.svg deleted file mode 100644 index e9e923b3..00000000 --- a/rioxinteiro/static/img/home-logo-fci.svg +++ /dev/null @@ -1,67 +0,0 @@ - - - - Group 2 - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/home-logo-footer.svg b/rioxinteiro/static/img/home-logo-footer.svg deleted file mode 100644 index 9ce88205..00000000 --- a/rioxinteiro/static/img/home-logo-footer.svg +++ /dev/null @@ -1,42 +0,0 @@ - - - - Group - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/hover-caraacara.png b/rioxinteiro/static/img/hover-caraacara.png deleted file mode 100644 index a4fcd197..00000000 Binary files a/rioxinteiro/static/img/hover-caraacara.png and /dev/null differ diff --git a/rioxinteiro/static/img/i-01.png b/rioxinteiro/static/img/i-01.png deleted file mode 100644 index a2dd0302..00000000 Binary files a/rioxinteiro/static/img/i-01.png and /dev/null differ diff --git a/rioxinteiro/static/img/i-02.png b/rioxinteiro/static/img/i-02.png deleted file mode 100644 index 2ff0e3af..00000000 Binary files a/rioxinteiro/static/img/i-02.png and /dev/null differ diff --git a/rioxinteiro/static/img/i-03.png b/rioxinteiro/static/img/i-03.png deleted file mode 100644 index b6039d29..00000000 Binary files a/rioxinteiro/static/img/i-03.png and /dev/null differ diff --git a/rioxinteiro/static/img/i-04.png b/rioxinteiro/static/img/i-04.png deleted file mode 100644 index f97bbdd6..00000000 Binary files a/rioxinteiro/static/img/i-04.png and /dev/null differ diff --git a/rioxinteiro/static/img/i-05.png b/rioxinteiro/static/img/i-05.png deleted file mode 100644 index f6264475..00000000 Binary files a/rioxinteiro/static/img/i-05.png and /dev/null differ diff --git a/rioxinteiro/static/img/i-06.png b/rioxinteiro/static/img/i-06.png deleted file mode 100644 index f0fa68c8..00000000 Binary files a/rioxinteiro/static/img/i-06.png and /dev/null differ diff --git a/rioxinteiro/static/img/i-07.png b/rioxinteiro/static/img/i-07.png deleted file mode 100644 index 46db6ea8..00000000 Binary files a/rioxinteiro/static/img/i-07.png and /dev/null differ diff --git a/rioxinteiro/static/img/i-08.png b/rioxinteiro/static/img/i-08.png deleted file mode 100644 index c32fcbea..00000000 Binary files a/rioxinteiro/static/img/i-08.png and /dev/null differ diff --git a/rioxinteiro/static/img/i-09.png b/rioxinteiro/static/img/i-09.png deleted file mode 100644 index 43ecf839..00000000 Binary files a/rioxinteiro/static/img/i-09.png and /dev/null differ diff --git a/rioxinteiro/static/img/i-10.png b/rioxinteiro/static/img/i-10.png deleted file mode 100644 index d5048104..00000000 Binary files a/rioxinteiro/static/img/i-10.png and /dev/null differ diff --git a/rioxinteiro/static/img/i-11.png b/rioxinteiro/static/img/i-11.png deleted file mode 100644 index 3f8135f4..00000000 Binary files a/rioxinteiro/static/img/i-11.png and /dev/null differ diff --git a/rioxinteiro/static/img/i-12.png b/rioxinteiro/static/img/i-12.png deleted file mode 100644 index 31919863..00000000 Binary files a/rioxinteiro/static/img/i-12.png and /dev/null differ diff --git a/rioxinteiro/static/img/i-13.png b/rioxinteiro/static/img/i-13.png deleted file mode 100644 index b0a524a8..00000000 Binary files a/rioxinteiro/static/img/i-13.png and /dev/null differ diff --git a/rioxinteiro/static/img/icon-difunde.svg b/rioxinteiro/static/img/icon-difunde.svg deleted file mode 100644 index 9a7d4670..00000000 --- a/rioxinteiro/static/img/icon-difunde.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - Artboard 2 Copy 3 - Created with Sketch. - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/icon-grupo.svg b/rioxinteiro/static/img/icon-grupo.svg deleted file mode 100644 index 944e0504..00000000 --- a/rioxinteiro/static/img/icon-grupo.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - Artboard 2 - Created with Sketch. - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/icon-propuesta.svg b/rioxinteiro/static/img/icon-propuesta.svg deleted file mode 100644 index 809a9c6b..00000000 --- a/rioxinteiro/static/img/icon-propuesta.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - Artboard 2 Copy - Created with Sketch. - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/icon-publicacion.svg b/rioxinteiro/static/img/icon-publicacion.svg deleted file mode 100644 index bd20bf61..00000000 --- a/rioxinteiro/static/img/icon-publicacion.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - Artboard 2 Copy 2 - Created with Sketch. - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/kast.jpg b/rioxinteiro/static/img/kast.jpg deleted file mode 100644 index 0e0babc2..00000000 Binary files a/rioxinteiro/static/img/kast.jpg and /dev/null differ diff --git a/rioxinteiro/static/img/levantalamano-logo.svg b/rioxinteiro/static/img/levantalamano-logo.svg deleted file mode 100644 index f7e3548b..00000000 --- a/rioxinteiro/static/img/levantalamano-logo.svg +++ /dev/null @@ -1,43 +0,0 @@ - - - - Page 1 - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/levantalamano-og.png b/rioxinteiro/static/img/levantalamano-og.png deleted file mode 100644 index c0a132d7..00000000 Binary files a/rioxinteiro/static/img/levantalamano-og.png and /dev/null differ diff --git a/rioxinteiro/static/img/lm-anexo2.svg b/rioxinteiro/static/img/lm-anexo2.svg deleted file mode 100644 index 1a153d18..00000000 --- a/rioxinteiro/static/img/lm-anexo2.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - Artboard 4 - Created with Sketch. - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/lm-anexo4.svg b/rioxinteiro/static/img/lm-anexo4.svg deleted file mode 100644 index d6e5b861..00000000 --- a/rioxinteiro/static/img/lm-anexo4.svg +++ /dev/null @@ -1,31 +0,0 @@ - - - - Artboard 4 Copy - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/lm-anexo5.svg b/rioxinteiro/static/img/lm-anexo5.svg deleted file mode 100644 index 17db0ad0..00000000 --- a/rioxinteiro/static/img/lm-anexo5.svg +++ /dev/null @@ -1,31 +0,0 @@ - - - - Artboard 4 Copy 2 - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/lm-anexo6.svg b/rioxinteiro/static/img/lm-anexo6.svg deleted file mode 100644 index d6696e5e..00000000 --- a/rioxinteiro/static/img/lm-anexo6.svg +++ /dev/null @@ -1,31 +0,0 @@ - - - - Artboard 4 Copy 3 - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/lm-anexo8.svg b/rioxinteiro/static/img/lm-anexo8.svg deleted file mode 100644 index 604fdaba..00000000 --- a/rioxinteiro/static/img/lm-anexo8.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - Artboard 4 Copy 4 - Created with Sketch. - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/lm-anexo9.svg b/rioxinteiro/static/img/lm-anexo9.svg deleted file mode 100644 index e9142098..00000000 --- a/rioxinteiro/static/img/lm-anexo9.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - Artboard 4 Copy 5 - Created with Sketch. - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/lm-banner.svg b/rioxinteiro/static/img/lm-banner.svg deleted file mode 100644 index 07f62507..00000000 --- a/rioxinteiro/static/img/lm-banner.svg +++ /dev/null @@ -1,43 +0,0 @@ - - - - Page 1 Copy - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/lm-blueline-down.svg b/rioxinteiro/static/img/lm-blueline-down.svg deleted file mode 100644 index 7d1e22fa..00000000 --- a/rioxinteiro/static/img/lm-blueline-down.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - Fill 1 Copy 9 - Created with Sketch. - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/lm-blueline-up.svg b/rioxinteiro/static/img/lm-blueline-up.svg deleted file mode 100644 index cc2ae725..00000000 --- a/rioxinteiro/static/img/lm-blueline-up.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - Fill 1 Copy 2 - Created with Sketch. - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/lm-footer-fci.svg b/rioxinteiro/static/img/lm-footer-fci.svg deleted file mode 100644 index 389973a1..00000000 --- a/rioxinteiro/static/img/lm-footer-fci.svg +++ /dev/null @@ -1,70 +0,0 @@ - - - - Artboard 3 Copy 20 - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/lm-footer-logo.svg b/rioxinteiro/static/img/lm-footer-logo.svg deleted file mode 100644 index 7698cc7f..00000000 --- a/rioxinteiro/static/img/lm-footer-logo.svg +++ /dev/null @@ -1,34 +0,0 @@ - - - - Group 14 - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/lm-footer-mineduc.svg b/rioxinteiro/static/img/lm-footer-mineduc.svg deleted file mode 100644 index 60c3428f..00000000 --- a/rioxinteiro/static/img/lm-footer-mineduc.svg +++ /dev/null @@ -1,75 +0,0 @@ - - - - Artboard 3 Copy 22 - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/lm-footer-unicef.svg b/rioxinteiro/static/img/lm-footer-unicef.svg deleted file mode 100644 index 5b0579ff..00000000 --- a/rioxinteiro/static/img/lm-footer-unicef.svg +++ /dev/null @@ -1,61 +0,0 @@ - - - - Artboard 3 Copy 21 - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/lm-footer-vota.svg b/rioxinteiro/static/img/lm-footer-vota.svg deleted file mode 100644 index 012d8eb8..00000000 --- a/rioxinteiro/static/img/lm-footer-vota.svg +++ /dev/null @@ -1,33 +0,0 @@ - - - - Artboard 3 - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/lm-footer.svg b/rioxinteiro/static/img/lm-footer.svg deleted file mode 100644 index 2879a1f0..00000000 --- a/rioxinteiro/static/img/lm-footer.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - Group 13 - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/lm-ingresar.svg b/rioxinteiro/static/img/lm-ingresar.svg deleted file mode 100644 index fb0a96b3..00000000 --- a/rioxinteiro/static/img/lm-ingresar.svg +++ /dev/null @@ -1,123 +0,0 @@ - - - - Artboard 8 - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/lm-manual.svg b/rioxinteiro/static/img/lm-manual.svg deleted file mode 100644 index e0468240..00000000 --- a/rioxinteiro/static/img/lm-manual.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - Group 17 - Created with Sketch. - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/lm-met.svg b/rioxinteiro/static/img/lm-met.svg deleted file mode 100644 index 5b2d9b78..00000000 --- a/rioxinteiro/static/img/lm-met.svg +++ /dev/null @@ -1,27 +0,0 @@ - - - - Group 4 - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/lm-nna.svg b/rioxinteiro/static/img/lm-nna.svg deleted file mode 100644 index d2a00d32..00000000 --- a/rioxinteiro/static/img/lm-nna.svg +++ /dev/null @@ -1,176 +0,0 @@ - - - - Group 2 - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/lm-paso2.svg b/rioxinteiro/static/img/lm-paso2.svg deleted file mode 100644 index 680e8176..00000000 --- a/rioxinteiro/static/img/lm-paso2.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - Artboard 4 Copy 6 - Created with Sketch. - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/lm-paso3.svg b/rioxinteiro/static/img/lm-paso3.svg deleted file mode 100644 index 8e9e7bb3..00000000 --- a/rioxinteiro/static/img/lm-paso3.svg +++ /dev/null @@ -1,24 +0,0 @@ - - - - Artboard 4 Copy 7 - Created with Sketch. - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/lm-paso4.svg b/rioxinteiro/static/img/lm-paso4.svg deleted file mode 100644 index efbbdfc7..00000000 --- a/rioxinteiro/static/img/lm-paso4.svg +++ /dev/null @@ -1,28 +0,0 @@ - - - - Artboard 4 Copy 8 - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/lm-paso5.svg b/rioxinteiro/static/img/lm-paso5.svg deleted file mode 100644 index ba6800a9..00000000 --- a/rioxinteiro/static/img/lm-paso5.svg +++ /dev/null @@ -1,24 +0,0 @@ - - - - Artboard 4 Copy 9 - Created with Sketch. - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/lm-purpleline.svg b/rioxinteiro/static/img/lm-purpleline.svg deleted file mode 100644 index de41c1d7..00000000 --- a/rioxinteiro/static/img/lm-purpleline.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - Fill 1 Copy 2 - Created with Sketch. - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/lm-redline.svg b/rioxinteiro/static/img/lm-redline.svg deleted file mode 100644 index 26767d9e..00000000 --- a/rioxinteiro/static/img/lm-redline.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - Fill 1 Copy 2 - Created with Sketch. - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/lm-whiteline.svg b/rioxinteiro/static/img/lm-whiteline.svg deleted file mode 100644 index 828c935b..00000000 --- a/rioxinteiro/static/img/lm-whiteline.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - Fill 1 Copy 9 - Created with Sketch. - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/lm-yellow-nna.svg b/rioxinteiro/static/img/lm-yellow-nna.svg deleted file mode 100644 index 5b45d659..00000000 --- a/rioxinteiro/static/img/lm-yellow-nna.svg +++ /dev/null @@ -1,170 +0,0 @@ - - - - Artboard 5 - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/lm-yellow-none.svg b/rioxinteiro/static/img/lm-yellow-none.svg deleted file mode 100644 index 37a8e3fc..00000000 --- a/rioxinteiro/static/img/lm-yellow-none.svg +++ /dev/null @@ -1,170 +0,0 @@ - - - - Group 2 - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/lm-yellowline-down.svg b/rioxinteiro/static/img/lm-yellowline-down.svg deleted file mode 100644 index 33f538e8..00000000 --- a/rioxinteiro/static/img/lm-yellowline-down.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - Fill 1 Copy 8 - Created with Sketch. - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/lm-yellowline-up.svg b/rioxinteiro/static/img/lm-yellowline-up.svg deleted file mode 100644 index a73ccfd3..00000000 --- a/rioxinteiro/static/img/lm-yellowline-up.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - Fill 1 Copy 3 - Created with Sketch. - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/local-meeting.svg b/rioxinteiro/static/img/local-meeting.svg deleted file mode 100644 index 159e8f29..00000000 --- a/rioxinteiro/static/img/local-meeting.svg +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - image/svg+xml - - - - - - - Artboard 5 - Created with Sketch. - - - - - - - - Gerada em uma reunião de cidadãos - - - - diff --git a/rioxinteiro/static/img/local-meeting_rpi.svg b/rioxinteiro/static/img/local-meeting_rpi.svg deleted file mode 100644 index fe60a207..00000000 --- a/rioxinteiro/static/img/local-meeting_rpi.svg +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - image/svg+xml - - Artboard 5 - - - - - - Artboard 5 - Created with Sketch. - - - - - - - - Gerada em uma reunião de cidadãos - - - - diff --git a/rioxinteiro/static/img/logo-blanco_rpi.svg b/rioxinteiro/static/img/logo-blanco_rpi.svg deleted file mode 100644 index 88d37ee6..00000000 --- a/rioxinteiro/static/img/logo-blanco_rpi.svg +++ /dev/null @@ -1,91 +0,0 @@ - - - -image/svg+xml - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/logo-ciudadanoi.png b/rioxinteiro/static/img/logo-ciudadanoi.png deleted file mode 100644 index 479bf837..00000000 Binary files a/rioxinteiro/static/img/logo-ciudadanoi.png and /dev/null differ diff --git a/rioxinteiro/static/img/logo-media-naranja.svg b/rioxinteiro/static/img/logo-media-naranja.svg deleted file mode 100644 index 1c1aebf5..00000000 --- a/rioxinteiro/static/img/logo-media-naranja.svg +++ /dev/null @@ -1,40 +0,0 @@ - - - - Group - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/logo-uchile.jpg b/rioxinteiro/static/img/logo-uchile.jpg deleted file mode 100644 index fcbb9180..00000000 Binary files a/rioxinteiro/static/img/logo-uchile.jpg and /dev/null differ diff --git a/rioxinteiro/static/img/logo.png b/rioxinteiro/static/img/logo.png deleted file mode 100644 index 3405e256..00000000 Binary files a/rioxinteiro/static/img/logo.png and /dev/null differ diff --git a/rioxinteiro/static/img/logo_casa_fluminens.svg b/rioxinteiro/static/img/logo_casa_fluminens.svg deleted file mode 100644 index 06607335..00000000 --- a/rioxinteiro/static/img/logo_casa_fluminens.svg +++ /dev/null @@ -1,147 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/rioxinteiro/static/img/logo_media_naranja_og.jpg b/rioxinteiro/static/img/logo_media_naranja_og.jpg deleted file mode 100644 index 6d20a2bc..00000000 Binary files a/rioxinteiro/static/img/logo_media_naranja_og.jpg and /dev/null differ diff --git a/rioxinteiro/static/img/logo_rioxinteiro.svg b/rioxinteiro/static/img/logo_rioxinteiro.svg deleted file mode 100644 index e5d0d803..00000000 --- a/rioxinteiro/static/img/logo_rioxinteiro.svg +++ /dev/null @@ -1,75 +0,0 @@ - - - - - - image/svg+xml - - - - - - - logo - Created with Sketch. - - - - Weyni queridaeste é o logo - diff --git a/rioxinteiro/static/img/logo_rpi.svg b/rioxinteiro/static/img/logo_rpi.svg deleted file mode 100644 index 11343c16..00000000 --- a/rioxinteiro/static/img/logo_rpi.svg +++ /dev/null @@ -1,89 +0,0 @@ - - - -image/svg+xml - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/logo_rpi_og.png b/rioxinteiro/static/img/logo_rpi_og.png deleted file mode 100644 index 0c19ba4b..00000000 Binary files a/rioxinteiro/static/img/logo_rpi_og.png and /dev/null differ diff --git a/rioxinteiro/static/img/logo_rpi_preto.svg b/rioxinteiro/static/img/logo_rpi_preto.svg deleted file mode 100644 index 092463ae..00000000 --- a/rioxinteiro/static/img/logo_rpi_preto.svg +++ /dev/null @@ -1,89 +0,0 @@ - - - -image/svg+xml - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/logo_rrss.png b/rioxinteiro/static/img/logo_rrss.png deleted file mode 100644 index 0c19ba4b..00000000 Binary files a/rioxinteiro/static/img/logo_rrss.png and /dev/null differ diff --git a/rioxinteiro/static/img/logo_tem_compromiso.svg b/rioxinteiro/static/img/logo_tem_compromiso.svg deleted file mode 100644 index 368b2c1d..00000000 --- a/rioxinteiro/static/img/logo_tem_compromiso.svg +++ /dev/null @@ -1 +0,0 @@ -logo \ No newline at end of file diff --git a/rioxinteiro/static/img/logo_vi_og.jpg b/rioxinteiro/static/img/logo_vi_og.jpg deleted file mode 100644 index 281493b9..00000000 Binary files a/rioxinteiro/static/img/logo_vi_og.jpg and /dev/null differ diff --git a/rioxinteiro/static/img/logotipo_rioporinteiro_para_fundo_de_cor.svg b/rioxinteiro/static/img/logotipo_rioporinteiro_para_fundo_de_cor.svg deleted file mode 100644 index 598509c9..00000000 --- a/rioxinteiro/static/img/logotipo_rioporinteiro_para_fundo_de_cor.svg +++ /dev/null @@ -1,401 +0,0 @@ - - - -image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/logotipo_rioxinteiro.png b/rioxinteiro/static/img/logotipo_rioxinteiro.png deleted file mode 100644 index 6b27e981..00000000 Binary files a/rioxinteiro/static/img/logotipo_rioxinteiro.png and /dev/null differ diff --git a/rioxinteiro/static/img/logotipo_rioxinteiro.svg b/rioxinteiro/static/img/logotipo_rioxinteiro.svg deleted file mode 100644 index 22441a10..00000000 --- a/rioxinteiro/static/img/logotipo_rioxinteiro.svg +++ /dev/null @@ -1,415 +0,0 @@ - - - -image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/lupa_sc.png b/rioxinteiro/static/img/lupa_sc.png deleted file mode 100644 index 33499c6c..00000000 Binary files a/rioxinteiro/static/img/lupa_sc.png and /dev/null differ diff --git a/rioxinteiro/static/img/mano.svg b/rioxinteiro/static/img/mano.svg deleted file mode 100644 index 6d851e76..00000000 --- a/rioxinteiro/static/img/mano.svg +++ /dev/null @@ -1,113 +0,0 @@ - - - - Group 3 - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/map-home.svg b/rioxinteiro/static/img/map-home.svg deleted file mode 100644 index 9f3d88cd..00000000 --- a/rioxinteiro/static/img/map-home.svg +++ /dev/null @@ -1,619 +0,0 @@ - - - - Page 1 - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/material_cidadao/1.jpg b/rioxinteiro/static/img/material_cidadao/1.jpg deleted file mode 100644 index b52ad5ea..00000000 Binary files a/rioxinteiro/static/img/material_cidadao/1.jpg and /dev/null differ diff --git a/rioxinteiro/static/img/material_cidadao/1_thumb.jpg b/rioxinteiro/static/img/material_cidadao/1_thumb.jpg deleted file mode 100644 index e84cfcb0..00000000 Binary files a/rioxinteiro/static/img/material_cidadao/1_thumb.jpg and /dev/null differ diff --git a/rioxinteiro/static/img/material_cidadao/2.jpg b/rioxinteiro/static/img/material_cidadao/2.jpg deleted file mode 100644 index 6d063ad7..00000000 Binary files a/rioxinteiro/static/img/material_cidadao/2.jpg and /dev/null differ diff --git a/rioxinteiro/static/img/material_cidadao/2_thumb.jpg b/rioxinteiro/static/img/material_cidadao/2_thumb.jpg deleted file mode 100644 index a57b06dd..00000000 Binary files a/rioxinteiro/static/img/material_cidadao/2_thumb.jpg and /dev/null differ diff --git a/rioxinteiro/static/img/material_cidadao/3.jpg b/rioxinteiro/static/img/material_cidadao/3.jpg deleted file mode 100644 index 2920f38d..00000000 Binary files a/rioxinteiro/static/img/material_cidadao/3.jpg and /dev/null differ diff --git a/rioxinteiro/static/img/material_cidadao/3_thumb.jpg b/rioxinteiro/static/img/material_cidadao/3_thumb.jpg deleted file mode 100644 index a00eb3ec..00000000 Binary files a/rioxinteiro/static/img/material_cidadao/3_thumb.jpg and /dev/null differ diff --git a/rioxinteiro/static/img/material_cidadao/4.jpg b/rioxinteiro/static/img/material_cidadao/4.jpg deleted file mode 100644 index 360508b3..00000000 Binary files a/rioxinteiro/static/img/material_cidadao/4.jpg and /dev/null differ diff --git a/rioxinteiro/static/img/material_cidadao/4_thumb.jpg b/rioxinteiro/static/img/material_cidadao/4_thumb.jpg deleted file mode 100644 index 7c68aeb1..00000000 Binary files a/rioxinteiro/static/img/material_cidadao/4_thumb.jpg and /dev/null differ diff --git a/rioxinteiro/static/img/material_cidadao/5.png b/rioxinteiro/static/img/material_cidadao/5.png deleted file mode 100644 index b3e35ddc..00000000 Binary files a/rioxinteiro/static/img/material_cidadao/5.png and /dev/null differ diff --git a/rioxinteiro/static/img/material_cidadao/5_thumb.png b/rioxinteiro/static/img/material_cidadao/5_thumb.png deleted file mode 100644 index d31ece14..00000000 Binary files a/rioxinteiro/static/img/material_cidadao/5_thumb.png and /dev/null differ diff --git a/rioxinteiro/static/img/material_cidadao/6.png b/rioxinteiro/static/img/material_cidadao/6.png deleted file mode 100644 index 266b65d4..00000000 Binary files a/rioxinteiro/static/img/material_cidadao/6.png and /dev/null differ diff --git a/rioxinteiro/static/img/material_cidadao/6_thumb.png b/rioxinteiro/static/img/material_cidadao/6_thumb.png deleted file mode 100644 index ad62e3ab..00000000 Binary files a/rioxinteiro/static/img/material_cidadao/6_thumb.png and /dev/null differ diff --git a/rioxinteiro/static/img/meo.jpg b/rioxinteiro/static/img/meo.jpg deleted file mode 100644 index ddcb4368..00000000 Binary files a/rioxinteiro/static/img/meo.jpg and /dev/null differ diff --git a/rioxinteiro/static/img/navarro.jpg b/rioxinteiro/static/img/navarro.jpg deleted file mode 100644 index df776c67..00000000 Binary files a/rioxinteiro/static/img/navarro.jpg and /dev/null differ diff --git a/rioxinteiro/static/img/nna-proposal.svg b/rioxinteiro/static/img/nna-proposal.svg deleted file mode 100644 index 5a348de4..00000000 --- a/rioxinteiro/static/img/nna-proposal.svg +++ /dev/null @@ -1,164 +0,0 @@ - - - - Group 35 - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/oque-e.jpg b/rioxinteiro/static/img/oque-e.jpg deleted file mode 100644 index b14976d2..00000000 Binary files a/rioxinteiro/static/img/oque-e.jpg and /dev/null differ diff --git a/rioxinteiro/static/img/org-default.png b/rioxinteiro/static/img/org-default.png deleted file mode 100644 index d82f95c6..00000000 Binary files a/rioxinteiro/static/img/org-default.png and /dev/null differ diff --git a/rioxinteiro/static/img/pinera.jpg b/rioxinteiro/static/img/pinera.jpg deleted file mode 100644 index 1b120705..00000000 Binary files a/rioxinteiro/static/img/pinera.jpg and /dev/null differ diff --git a/rioxinteiro/static/img/plantilla.png b/rioxinteiro/static/img/plantilla.png deleted file mode 100644 index e61286b1..00000000 Binary files a/rioxinteiro/static/img/plantilla.png and /dev/null differ diff --git a/rioxinteiro/static/img/plantilla_llm.png b/rioxinteiro/static/img/plantilla_llm.png deleted file mode 100644 index 6396665d..00000000 Binary files a/rioxinteiro/static/img/plantilla_llm.png and /dev/null differ diff --git a/rioxinteiro/static/img/plantilla_naranja.png b/rioxinteiro/static/img/plantilla_naranja.png deleted file mode 100644 index ebedc9a1..00000000 Binary files a/rioxinteiro/static/img/plantilla_naranja.png and /dev/null differ diff --git a/rioxinteiro/static/img/plantilla_naranja_no_img.png b/rioxinteiro/static/img/plantilla_naranja_no_img.png deleted file mode 100644 index f03aeaa7..00000000 Binary files a/rioxinteiro/static/img/plantilla_naranja_no_img.png and /dev/null differ diff --git a/rioxinteiro/static/img/plantilla_org.png b/rioxinteiro/static/img/plantilla_org.png deleted file mode 100644 index 01d20250..00000000 Binary files a/rioxinteiro/static/img/plantilla_org.png and /dev/null differ diff --git a/rioxinteiro/static/img/preguntale_a_tucandidato_sc.png b/rioxinteiro/static/img/preguntale_a_tucandidato_sc.png deleted file mode 100644 index 6cc62294..00000000 Binary files a/rioxinteiro/static/img/preguntale_a_tucandidato_sc.png and /dev/null differ diff --git a/rioxinteiro/static/img/preloader.gif b/rioxinteiro/static/img/preloader.gif deleted file mode 100644 index 53f5beb1..00000000 Binary files a/rioxinteiro/static/img/preloader.gif and /dev/null differ diff --git a/rioxinteiro/static/img/presidencia.svg b/rioxinteiro/static/img/presidencia.svg deleted file mode 100644 index 4502820b..00000000 --- a/rioxinteiro/static/img/presidencia.svg +++ /dev/null @@ -1,46 +0,0 @@ - - - - Group 9 - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/que-es.svg b/rioxinteiro/static/img/que-es.svg deleted file mode 100644 index d8feea90..00000000 --- a/rioxinteiro/static/img/que-es.svg +++ /dev/null @@ -1,429 +0,0 @@ - - - - Group 31 - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/referencia.png b/rioxinteiro/static/img/referencia.png deleted file mode 100644 index 9437a729..00000000 Binary files a/rioxinteiro/static/img/referencia.png and /dev/null differ diff --git a/rioxinteiro/static/img/retangulo_BAIXO.svg b/rioxinteiro/static/img/retangulo_BAIXO.svg deleted file mode 100644 index 7a44a6bc..00000000 --- a/rioxinteiro/static/img/retangulo_BAIXO.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - Group 6 Copy - Created with Sketch. - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/retangulo_CIMA.svg b/rioxinteiro/static/img/retangulo_CIMA.svg deleted file mode 100644 index 76a4f5a3..00000000 --- a/rioxinteiro/static/img/retangulo_CIMA.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - Group 6 Copy - Created with Sketch. - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/ribbon-deco-median.png b/rioxinteiro/static/img/ribbon-deco-median.png deleted file mode 100644 index a98a5f85..00000000 Binary files a/rioxinteiro/static/img/ribbon-deco-median.png and /dev/null differ diff --git a/rioxinteiro/static/img/ribbon-deco-median.svg b/rioxinteiro/static/img/ribbon-deco-median.svg deleted file mode 100644 index d03b8195..00000000 --- a/rioxinteiro/static/img/ribbon-deco-median.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - Artboard 5 - Created with Sketch. - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/ribbon-deco-right-median.png b/rioxinteiro/static/img/ribbon-deco-right-median.png deleted file mode 100644 index baf2870c..00000000 Binary files a/rioxinteiro/static/img/ribbon-deco-right-median.png and /dev/null differ diff --git a/rioxinteiro/static/img/ribbon-deco-right-median.svg b/rioxinteiro/static/img/ribbon-deco-right-median.svg deleted file mode 100644 index 87c1cbdf..00000000 --- a/rioxinteiro/static/img/ribbon-deco-right-median.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - Artboard 5 Copy - Created with Sketch. - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/ribbon-deco-right.svg b/rioxinteiro/static/img/ribbon-deco-right.svg deleted file mode 100644 index 87c1cbdf..00000000 --- a/rioxinteiro/static/img/ribbon-deco-right.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - Artboard 5 Copy - Created with Sketch. - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/ribbon-deco.svg b/rioxinteiro/static/img/ribbon-deco.svg deleted file mode 100644 index d03b8195..00000000 --- a/rioxinteiro/static/img/ribbon-deco.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - Artboard 5 - Created with Sketch. - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/sanchez.jpg b/rioxinteiro/static/img/sanchez.jpg deleted file mode 100644 index 9219e648..00000000 Binary files a/rioxinteiro/static/img/sanchez.jpg and /dev/null differ diff --git a/rioxinteiro/static/img/temcompromisso_header.svg b/rioxinteiro/static/img/temcompromisso_header.svg deleted file mode 100644 index 08e760e2..00000000 --- a/rioxinteiro/static/img/temcompromisso_header.svg +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cultura e tempo livreDemocratizar os equipamentos culturais e estruturar política de fomentoPrograma de fomento à produção audiovisual do rio de janeiro – funcultura independenteEducaçãoAdotar política pública intersetorial para a redução da evasão escolar.A incorporação de isenção das taxas de inscrição em concursos públicos também para provas de vestibulares de instituições privadas.Equidade de gêneroPromover redes de diálogos e compromisso entre mulheres e o parlamento.Gestão Pública, transparência e participaçãoTornar a transparência regra na administração pública.Meio Ambiente Impedir a falta d'água em territórios periféricos.Mobilidade UrbanaEstruturar sistema integrado de transportes.Criação de projeto de ampliação do sistema de transporte aquaviário na baía de guanabara.Licitar o bilhete único e tornar as tarifas transparentes.Conferir aos trens metropolitanos a qualidade de serviço do metrô.Barcas em são gonçalo.Política MetropolitanaAprovar a governança metropolitana na alerj.Desenvolver política habitacional de interesse social.Saneamento BásicoLixo zero na baía de guanabara.Saneamento da baía de guanabara.SaúdeGarantir os direitos reprodutivos das mulheres.Segurança PúblicaGarantir a rede especializada de enfrentamento à violência contra a mulher.Reduzir as mortes violentas, com foco na baixada fluminense.Assegurar a responsabilização do estado diante da necessária reparação à mães e familiares de vítimas de violência de estado. - - - diff --git a/rioxinteiro/static/img/the_end_mail/image1.png b/rioxinteiro/static/img/the_end_mail/image1.png deleted file mode 100644 index 881cef1a..00000000 Binary files a/rioxinteiro/static/img/the_end_mail/image1.png and /dev/null differ diff --git a/rioxinteiro/static/img/the_end_mail/image2.png b/rioxinteiro/static/img/the_end_mail/image2.png deleted file mode 100644 index 8fbe9237..00000000 Binary files a/rioxinteiro/static/img/the_end_mail/image2.png and /dev/null differ diff --git a/rioxinteiro/static/img/the_end_mail/image3.png b/rioxinteiro/static/img/the_end_mail/image3.png deleted file mode 100644 index e241df44..00000000 Binary files a/rioxinteiro/static/img/the_end_mail/image3.png and /dev/null differ diff --git a/rioxinteiro/static/img/verde_top.svg b/rioxinteiro/static/img/verde_top.svg deleted file mode 100644 index 139e18ed..00000000 --- a/rioxinteiro/static/img/verde_top.svg +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - image/svg+xml - - Fill 1 Copy 2 - - - - - - Fill 1 Copy 2 - Created with Sketch. - - - - - diff --git a/rioxinteiro/static/img/vota-title-home.svg b/rioxinteiro/static/img/vota-title-home.svg deleted file mode 100644 index 9967bf01..00000000 --- a/rioxinteiro/static/img/vota-title-home.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - Group 13 - Created with Sketch. - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/votai-1024.png b/rioxinteiro/static/img/votai-1024.png deleted file mode 100644 index 8d04a7ff..00000000 Binary files a/rioxinteiro/static/img/votai-1024.png and /dev/null differ diff --git a/rioxinteiro/static/img/votai-1024.xcf b/rioxinteiro/static/img/votai-1024.xcf deleted file mode 100644 index b1b464bf..00000000 Binary files a/rioxinteiro/static/img/votai-1024.xcf and /dev/null differ diff --git a/rioxinteiro/static/img/votai-16.png b/rioxinteiro/static/img/votai-16.png deleted file mode 100644 index c7455db5..00000000 Binary files a/rioxinteiro/static/img/votai-16.png and /dev/null differ diff --git a/rioxinteiro/static/img/votai-16.xcf b/rioxinteiro/static/img/votai-16.xcf deleted file mode 100644 index ce143acf..00000000 Binary files a/rioxinteiro/static/img/votai-16.xcf and /dev/null differ diff --git a/rioxinteiro/static/img/votai-196.png b/rioxinteiro/static/img/votai-196.png deleted file mode 100644 index a2adc0e6..00000000 Binary files a/rioxinteiro/static/img/votai-196.png and /dev/null differ diff --git a/rioxinteiro/static/img/welcome.svg b/rioxinteiro/static/img/welcome.svg deleted file mode 100644 index a301ccb6..00000000 --- a/rioxinteiro/static/img/welcome.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - Group 8 - Created with Sketch. - - - - - - - - - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/img/white.svg b/rioxinteiro/static/img/white.svg deleted file mode 100644 index d2048914..00000000 --- a/rioxinteiro/static/img/white.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - Rectangle 4 Copy 2 - Created with Sketch. - - - - - \ No newline at end of file diff --git a/rioxinteiro/static/material-ciudadao/ativismo.pdf b/rioxinteiro/static/material-ciudadao/ativismo.pdf deleted file mode 100644 index 291b40d9..00000000 Binary files a/rioxinteiro/static/material-ciudadao/ativismo.pdf and /dev/null differ diff --git a/rioxinteiro/static/material-ciudadao/metodologia.pdf b/rioxinteiro/static/material-ciudadao/metodologia.pdf deleted file mode 100644 index 88c3f148..00000000 Binary files a/rioxinteiro/static/material-ciudadao/metodologia.pdf and /dev/null differ diff --git a/rioxinteiro/static/sass/_2017sitio1.scss b/rioxinteiro/static/sass/_2017sitio1.scss deleted file mode 100644 index 2a9ca286..00000000 --- a/rioxinteiro/static/sass/_2017sitio1.scss +++ /dev/null @@ -1,1371 +0,0 @@ -/*Home temporal*/ -html .navbar_visible, body .navbar_visible{ - padding-top: 55px; -} -html .navbar_invisible, body .navbar_invisible{ - padding-top: 0px; -} -.navbar{ - min-height: 55px; -} - -.high-home{ - font-family: 'Arvo', serif; - font-size: 18px; -} - -#video-home{ - background-color: #FEC70D; - padding: 40px 0 30px 0} -#text-home{ - background-color: #4A90E2; - color: #233346; - padding: 50px 0 30px 0; -} - -.text-box{ - background-image: url("../img/white.svg"); - padding: 30px 30px 20px 30px; -} - -#calendar-home{ - background-color: #233346; - color: white; - font-family: 'Arvo', serif; - padding: 40px 0 40px 0; -} -#map-home{ - background-color: #F1ECE1; - padding: 70px 0 70px; -} -#bye-home{ - background-color: #FEC70D; - padding: 40px 0 30px 0; -} - -.videoWrapper { - position: relative; - padding-bottom: 56.25%; /* 16:9 */ - padding-top: 25px; - height: 0; -} -.videoWrapper iframe { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; -} - -td.cal-date{ - color: #FEC70D; - text-transform: uppercase; - font-family: 'Montserrat', sans-serif; - letter-spacing: 1.4px; -} - -.landing-phrase{ - padding: 20px 0 20px 0; - margin: 0 auto; -} - -/*Home sitio1*/ -.grey-one{ - background-color: $grey-one; -} -.blue{ - background-color: $blue; - .bajada{ - color: white; - } -} -.blue-light{ - background-color: $blue-light; -} -.blue-light-txt{ - color: $blue-light; -} - -#home-elected-candidate{ - background: $yellow ; - background-size: cover; - padding: 20px 0 70px; - .panel-default{ - border: none; - } - .panel{ - box-shadow: none; - } - .panel-body{ - margin: 48px 0 0; - } - h1{ - text-transform: uppercase; - letter-spacing: 6px; - margin: 50px 0 20px; - } - h2{ - margin: 50px 0 -40px; - font-family: 'Montserrat', sans-serif; - font-size: 25px; - } - h3{ - font-weight: 700; - font-size: 78px; - color: white; - text-transform: uppercase; - letter-spacing: 3px; - margin: -12px 0 0; - } - .commitments-home{ - font-family: 'Montserrat', sans-serif; - font-size: 13px; - font-weight: 700; - letter-spacing: 2px; - text-transform: uppercase; - color: $grey-one; - line-height: 1.3; - } -} - - -#home-results { - background: $yellow ; - background-size: cover; - padding: 20px 0 20px; - .panel-default{ - border: none; - } - .panel{ - box-shadow: none; - } - h1{ - text-transform: uppercase; - letter-spacing: 6px; - margin: 50px 0 20px; - } - h2{ - font-family: 'Nunito Sans', sans-serif; - font-weight: 700; - text-transform: none; - letter-spacing: 0; - margin: 10px 0 40px; - font-weight: 400; - font-size: 24px; - } - h3{ - font-weight: 700; - font-size: 28px; - color: white; - text-transform: uppercase; - letter-spacing: 3px; - } - .commitments-home{ - font-family: 'Montserrat', sans-serif; - font-size: 13px; - font-weight: 700; - letter-spacing: 2px; - text-transform: uppercase; - color: $grey-one; - line-height: 1.3; - } -} - -#candidatos{ - background: $yellow ; - padding: 30px 0 30px; - h1 { - font-size: 32px; - } - a { - color: $grey-one; - font-weight: bold; - } -} - -.hashtag{ - font-family: 'Montserrat', sans-serif; - color: white; - font-weight: 700; - text-transform: none; - letter-spacing: 0; - font-size: 30px; - margin: -40px 0 60px; -} - -.presidents{ - position: relative; - margin: 0 auto; - bottom: -166px; -} - -#proposals-counter{ - min-height: 60px; - color: white; - font-family: 'Montserrat', sans-serif; - font-weight: 700; - text-transform: uppercase; - letter-spacing: 2px; - font-size: 12px; - padding-top: 18px; -} - -.counter-number{ - font-family: 'Arvo', serif; - color: $blue; - font-weight: 700; - font-size: 44px; - position: relative; - top: 9px; - &:hover{ - color: $blue-light; - } -} - -.bajada{ - font-size: 19px; - font-family: 'Arvo', sans-serif; - color: $grey-three; - margin: -30px 0 20px; -} -.bajada-cores { - b { - color: $grey-one; - } - font-size: 19px; - font-family: 'Arvo', sans-serif; - color: $grey-three; - padding-top: 15px; - a { - color: $grey-three; - text-decoration: underline; - } -} - -#highlighted-proposals{ - padding: 70px 0 50px; - .bajada { - margin: 0 0 10px; - } -} - -#home-search-candidate{ - padding: 60px 0 90px; - h2 { - margin: 0px; - font-weight: 700; - text-transform: uppercase; - letter-spacing: 3px; - } -} - -#you-org{ - @extend .small-basic; - min-height: 60px; - color: white; - font-size: 10px; - padding-top: 12px; - line-height: 12px; - margin-top: 50px; - .btn{ - font-size: 10px; - } -} - -#actions{ - margin: 70px 0 60px; - h3 > a{ - color: $grey-one; - &:hover{ - color: $blue; - } - } - .bajada { - margin: 0 0 10px; - } -} -.action{ - font-family: 'Montserrat', sans-serif; - font-weight: 700; - letter-spacing: 1.3px; - text-transform: uppercase; - font-size: 12px; - line-height: 1.2; -} - -.action-encuentro{ - color: $grey-two; - background: url("../img/a-encuentro.svg") no-repeat; - height: 170px; - background-position: center; - padding-top: 180px; - margin: 40px 0 110px; -} - -.action-crea{ - color: $grey-two; - background: url("../img/a-crea.svg") no-repeat; - height: 170px; - background-position: center; - padding-top: 180px; - margin: 40px 0 110px; -} - -.action-apoya{ - color: $grey-two; - background: url("../img/a-apoya.svg") no-repeat; - height: 170px; - background-position: center; - padding-top: 180px; - margin: 40px 0 110px; -} - -#home-search-candidate { - .bajada { - margin: 0 0 10px; - } -} - -#education{ - margin-bottom: 60px; - padding-top: 40px; - .btn{ - font-size: 11px; - } - h3 > a{ - color: $grey-one; - &:hover{ - color: $blue; - } - } - .bajada { - margin: 0 0 10px; - } -} - -.edu-1{ - height: 250px; - padding-top: 40px; - background: url("../img/e-1.svg") no-repeat $blue; - background-position: center 120px; -} - -.edu-2{ - height: 250px; - padding-top: 40px; - background: url("../img/e-2.svg") no-repeat $blue-light; - background-position: center 110px; -} - - -.logo-org-home{ - background: #9BA9C1; - width: 100px; - height: 100px; - margin: 10px; - margin: 0 auto; - margin-bottom: 10px; - &:hover{ - background: transparent; - } - img{ - mix-blend-mode: screen; - -webkit-filter: grayscale(1) contrast(100%) opacity(1); - filter: grayscale(1) contrast(100%) opacity(1); - &:hover{ - -webkit-filter: opacity(1); - filter: opacity(1); - mix-blend-mode: normal; - } - } -} - -/*Perfil organizaciones*/ -.org-background{ - background-position: center; - background-size: cover; - background-repeat: no-repeat; - padding-bottom: 10px; - margin-top: 50px; - min-height: 400px; -} - -.landing-org{ - position: relative; - top: 270px; -} - -.org-info{ - h2{ - font-weight: 700; - margin-top: 70px; - } - p{ - font-size: 20px; - line-height: 25px; - } -} - -.org-rrss{ - font-family: 'Arvo', serif; - font-weight: 700; - a{ - color: white; - &:hover{ - color: $grey-one; - } - } -} - -.edit-org{ - height: 250px; - width: 250px; -} - -.edit-bg-org{ - max-width: 70%; - max-height: 50%; -} - -#difunde { - padding: 15px 0; - background-color: #233346; - p { - font-family: 'Montserrat', sans-serif; - text-transform: uppercase; - color: #FFF; - font-weight: 700; - letter-spacing: 2px; - line-height: 1.3; - font-size: 12px; - } -} - -/*Forms*/ -.form-control{ - background-color: $grey-five; - border-radius: 10px; -} - -.help-block{ - margin: 0; -} - -input[type=checkbox], input[type=radio]{ - margin: 0; -} - -input[type=file]{ - display: initial; -} - -.has-success .form-control{ - border-color: transparent; - box-shadow: none; - &:focus{ - border-color: transparent; - box-shadow: none; - } -} - -.has-success .checkbox, .has-success .checkbox-inline, .has-success .control-label, .has-success .help-block, .has-success .radio, .has-success .radio-inline, .has-success.checkbox label, .has-success.checkbox-inline label, .has-success.radio label, .has-success.radio-inline label{ - color: $grey-one; -} - -/*General*/ -.img-responsive{ - margin: 0 auto; -} - -.bg-info{ - padding: 5px; - border-radius: 8px; -} - -.modal-body{ - text-align: left; -} - -/*Detalle*/ -#proposal-details{ - h3{ - text-transform: none; - font-weight: 300; - letter-spacing: 0; - color: $grey-one; - } -} -.nav-detalle-propuesta{ - border: none; - margin-top: -55px; - border-bottom: 1px solid $grey-four; - border-radius: 0; -} - -.apoyo-orgs{ - background-color: $blue; - padding: 20px; - margin-top: -90px; - h4{ - color: white; - font-family: 'Montserrat', sans-serif; - text-transform: uppercase; - font-weight: 700; - font-size: 18px; - letter-spacing: 1.2px; - } -} - -.apoyo-ciudadano{ - color: $grey-one; -} - -.apoya-comparte{ - background-color: $yellow; - color: $grey-one; - padding: 0px 0 10px 0; - position: -webkit-sticky; - position: sticky; - bottom: 0; - width: 100%; -} - -.light-text{ - color: $grey-three; - h3{ - color: $grey-three; - } -} - -.detalle-propuesta{ - box-shadow: none; - h1{ - font-family: 'Montserrat', sans-serif; - margin: 0; - text-transform: none; - letter-spacing: 0; - } - .proposal-tools { - padding-top: 20px; - margin-bottom: -15px; - i { - font-size: 1.5em; - } - } -} - -.llamado{ - font-family: 'Arvo', sans-serif; - font-weight: 700; - margin-top: 20px; -} - -.share-detail{ - .btn-apoyo{ - background-color: $yellow; - top: 11px; - width: 100%; - &:hover{ - color: white; - background-color: $grey-one; - } - } - .btn-no-apoyo{ - width: 100%; - } -} - -.fa-stack{ - top: 8px; -} - -.share-detail .fa-inverse { - color: white; -} - -.share-detail a .fa-stack { - color: $blue; - top: 7px; -} - -.share-detail a .fa-stack:hover { - color: $grey-one; -} - -#proposal-side { - .apoyo-btn { - .btn-apoyo { - background-color: $blue; - } - } - ul.social-buttons>li { - a>.fa-stack { - color: $blue; - } - } -} - -a.candidate-commit-name { - font-weight: 700; - font-family: 'Arvo', sans-serif; - color: $grey-three; - font-size: 13px; - &:hover{ - color: $blue; - } -} - -/*Propuestas*/ -.badge{ - font-size: 11px; - font-weight: 700; - color: white; - background-color: $yellow; - border-radius: 5px; - text-transform: uppercase; - letter-spacing: 1px; - font-family: 'Montserrat',sans-serif; - &:hover{ - background-color: $blue; - } -} - - -/*filters*/ -.filter { - padding: 20px 0px 20px; - margin-bottom: 10px; - select.form-control{ - background-color: white; - } - .form-control{ - background-color: white; - } -} - -.propuesta{ - border: 3px solid $grey-one; - min-height: 550px; - padding: 0; - position: relative; - border-radius: 10px; -} - -.propuesta-content{ - padding: 25px 20px 35px; - .logo-ong{ - position: absolute; - right: 8%; - } -} - -.label-default{ - background-color: $blue; - color: white; -} -.label-success{ - background-color: $blue-light; - color: white; -} -.label-warning{ - background-color: $yellow; - color: white; -} -.label-danger{ - background-color: $red; - color: white; -} -.propuesta:after{ - display: none; -} - -.share{ - text-align: right; -} - -.share-card{ - background-color: $grey-one; - min-height: 122px; - padding: 5px 17px 5px; - position: absolute; - bottom: 0; - width: 100%; -} - -.share-card .fa-inverse { - color: $grey-one; -} - -.share-card a .fa-stack { - color: white; - margin-left: -10px; -} - -.share-card a .fa-stack:hover { - color: $yellow; -} - -.apoyo{ - min-height: 38px; -} - -.apoyo-contador{ - padding-left: initial; - max-width: initial; -} - -.nota{ - font-size: 14px; - color: white; - margin-top: -6px; -} - -.conteo{ - font-family: 'Arvo', sans-serif; - font-size: 26px; - font-weight: 700; - position: relative; - top: 5px; -} - -.btn-apoyo{ - background-color: $yellow; - color: white; - position: relative; - top: 0; - &:hover{ - color: $grey-one; - } -} - -.btn-no-apoyo{ - background-color: $blue; - color: white; - position: relative; - top: 9px; - &:hover{ - color: $grey-one; - } -} - -.propuesta h4{ - margin: 0 0 20px; - font-family: 'Montserrat', sans-serif; - font-weight: 700; - line-height: 1.3; -} - -p.intro{ - line-height: 1.3; -} -.logo-ong img{ - max-width: inherit; - max-height: inherit; - margin-left: inherit; -} - -.logo-color{ - background: #9BA9C1; - width: 70px; - height: 70px; - margin: 0 auto; - &:hover{ - background: transparent; - } - img{ - mix-blend-mode: screen; - -webkit-filter: grayscale(1) contrast(100%) opacity(1); - filter: grayscale(1) contrast(100%) opacity(1); - &:hover{ - -webkit-filter: grayscale(0%) contrast(100%) opacity(100%); - filter: grayscale(0) contrast(100%) opacity(100%); - mix-blend-mode: normal; - } - } -} - -#raiseToTop { - bottom: 15px; - display: block; - position: sticky; - width: 100%; - a { - color: white; - i { - background-color: $blue-light; - padding: 10px; - border-radius: 30px; - } - } -} - -/*Material ciudadano*/ -#video-encuentro{ - margin-bottom: 40px; -} - -#manual-encuentro{ - margin: 70px 0 80px; -} - -.set-guide{ - background-color: $blue-light; - border-radius: 10px; - height: 230px; - padding: 30px 15px; - font-family: 'Montserrat', sans-serif; - font-weight: 700; - letter-spacing: 1.3px; - text-transform: uppercase; - font-size: 12px; - line-height: 1.2; - color: $grey-one; - &:hover{ - color: $blue; - } - img{ - margin: 0 auto; - height: 140px; - margin-bottom: 15px; - } -} - -.set-guide-rep{ - background-color: $blue-light; - border-radius: 10px; - padding: 30px 15px; - line-height: 1.4; - color: $main-landing-section-color; - margin-bottom: 10px; - .content { - min-height: 340px; - } - h2{ - font-family: 'Montserrat', sans-serif; - font-weight: 700; - font-size: 12px; - letter-spacing: 1.3px; - text-transform: uppercase; - line-height: 1.2; - color: $main-landing-section-color; - margin: 0 0 15px 0; - } - img{ - margin: 0 auto; - height: 140px; - margin-bottom: 15px; - } - .btn{ - font-size: 11px; - &.btn-lg { - padding: 10px 16px; - height: 36px; - } - } -} - - -/*Botones*/ -.btn-dark{ - background-color: $grey-one; - color: white; - &:hover{ - background-color: $yellow; - color: white; - } -} - -.btn-blue{ - background-color: $blue; - color: white; - &:hover{ - background-color: white; - color: $blue; - } -} - -.btn-white{ - background-color: white; - color: $grey-one; - &:hover{ - background-color: $grey-one; - color: white; - } -} - -.btn-line{ - background-color: white; - color: $grey-one; - border: 3px solid $grey-five; - &:hover{ - border: 3px solid $grey-one; - background-color: $grey-one; - color: white; - } -} - -.btn{ - word-wrap: break-word; - white-space: normal; - &:hover{ - box-shadow: none; - } -} - -/*RIBBONS*/ -.product { - margin: 50px auto; - width: 280px; - height: 370px; - background: white; - border: 1px solid #333; - position: relative; - z-index: 90; -} -.ribbon-wrapper { - width: 303px; - height: 198px; - overflow: hidden; - position: absolute; - top: 0; - right: 0; - z-index: -1; - .ribbon { - font-weight: 700; - line-height: 1; - text-align: center; - -webkit-transform: rotate(45deg); - -moz-transform: rotate(45deg); - -ms-transform: rotate(45deg); - -o-transform: rotate(45deg); - position: relative; - padding: 6px 40px 4px 40px; - top: 41px; - right: 122px; - width: 270px; - background-color: #FF645B; - color: white; - } -} -.pill-clasification { - z-index: -2; -} - -.ribbon-wrapper-candidate { - width: 333px; - height: 288px; - overflow: hidden; - position: absolute; - top: 0; - right: 0; - .ribbon-candidate { - font-weight: 700; - line-height: 1.2; - text-align: center; - -webkit-transform: rotate(-45deg); - -moz-transform: rotate(-45deg); - -ms-transform: rotate(-45deg); - -o-transform: rotate(-45deg); - position: relative; - padding: 6px 0 5px 0; - top: 107px; - right: -93px; - width: 188px; - color: white; - word-wrap: break-word; - white-space: normal; - background-color: #FF645B; - border-radius: 6px; - a { - color: white; - span.no-commitments{ - padding: 5px; - text-transform: uppercase; - letter-spacing: 1px; - font-weight: 700; - font-family: 'Montserrat', sans-serif; - font-size: 13px; - } - } - } -} -/*Pasos creando propuesta*/ -.tips, .tips-invert{ - background: $grey-one; - margin: 10px 0 0 0; - border-radius: 10px; - .main-title{ - color: $yellow; - font-family: 'Montserrat', sans-serif; - font-weight: 700; - letter-spacing: 1.4px; - text-transform: uppercase; - font-size: 12px; - } - .step-title{ - font-family: 'Arvo', serif; - font-weight: 700; - } -} - -.tips:after{ - display: none; -} - -label{ - @extend .small-basic; - color: $grey-one; - margin: 10px 0 0 0; - line-height: 1.3; - font-size: 11px; -} - -.proposal-step{ - margin-top: 30px; - h2{ - margin: 0 0 40px 0; - } -} - -.wizard{ - font-family: 'Arvo', serif; - font-weight: 700; - color: $grey-one; - .badge{ - padding: 6px 10px; - background-color: $grey-one; - font-size: 14px; - margin-bottom: 10px; - border-radius: 14px; - } -} - -.preview.fondo-blanco{ - margin: 30px 0 30px 0; -} - -.panel{ - border-radius: 10px; -} - -.small{ - line-height: 1.4; -} - -.small-basic{ - font-family: 'Montserrat', sans-serif; - text-transform: uppercase; - letter-spacing: 2px; - font-weight: 700; - line-height: 1.3; -} - -/*LOGIN*/ -.nav-pills.list-inline{ - margin-bottom: 40px; -} - -.line-space{ - height: 30px; -} - -/*CANDIDATES*/ -#candidato-programa { - background-color: $blue-light; - color: $grey-one; - padding-top: 15px; - text-transform: uppercase; - font-weight: bold; - @extend .small-basic; - font-size: 11px; -} -.content_padding #agenda-candidato li.impar{ - background-color: white; -} -.content_padding #agenda-candidato li.par{ - border-top: 1px solid $grey-one; - margin-top: 10px; - padding-top: 14px; -} -.candidate-name{ - margin: 30px 0 -10px; -} -.candidate-diary{ - color: $grey-one; -} - -/*MEDIA NARANJA*/ -.media-naranja{ - background-color: #646F9D; - background-image: url("../img/temcompromisso_header.svg"); - background-size: 100%; - background-repeat: no-repeat; - padding-top: 60px; - h2{ - font-family: 'Montserrat', sans-serif; - font-size: 20px; - margin: 0 0 10px; - font-weight: 700; - line-height: 1; - } -} -.media-naranja-info{ - margin-top: 30px; - h4{ - font-family: 'Montserrat', sans-serif; - font-size: 14px; - line-height: 28px; - font-weight: 700; - letter-spacing: 2px; - margin: 22px 0 0; - } -} -.tem-compromisso-info { - margin-top: 30px; - color: white; - h2 { - color: white; - } - h4{ - font-family: 'Montserrat', sans-serif; - font-size: 14px; - line-height: 28px; - // font-weight: 700; - // letter-spacing: 2px; - margin: 22px 0 0; - } -} - -.naranja-form{ - background-color: white; - padding: 20px; - border-radius: 10px; - margin-bottom: 60px; - h1{ - text-transform: none; - letter-spacing: 0; - } - .checkbox label, .radio label{ - font-family: 'Nunito', sans-serif; - text-transform: none; - letter-spacing: 0; - font-weight: 400; - font-size: 14px; - line-height: 1; - } - .badge{ - font-size: 30px; - color: $grey-one; - background-color: $blue-light; - border-radius: 45px; - text-transform: uppercase; - letter-spacing: 1px; - font-family: 'Montserrat', sans-serif; - padding: 4px 13px; - } - .label-default{ - background-color: $yellow; - color: white; - padding: 2px 5px; - font-family: 'Montserrat', sans-serif; - text-transform: uppercase; - letter-spacing: 2px; - font-size: 11px; - border-bottom: 5px solid; - } - .label-warning{ - @extend .label-default; - background-color: $yellow; - } - .pregunta{ - border: 3px solid $yellow; - border-radius: 10px; - padding: 15px; - margin-bottom: 20px; - } - .candidate-result-name{ - font-family: 'Arvo', sans-serif; - font-weight: 700; - color: $grey-one; - a{ - color: $grey-one; - &:hover{ - color: $blue; - } - } - } - .candidate-result-value{ - font-family: 'Arvo', serif; - font-size: 30px; - font-weight: 700; - margin: 40px 0 10px; - color: $yellow; - } - h3{ - letter-spacing: 0; - text-transform: none; - } - .bajada{ - font-family: 'Arvo', serif; - font-size: 16px; - } -} - -.resultado.ayuda { - background-color: $yellow; - border-radius: 5px; - padding: 10px 15px; - margin-top: 15px; - color: $grey-one; -} -.exp_orgs { - font-size: 15px; -} - -.mano{ - background-image: url("../img/mano.svg"); - min-height: 410px; - background-repeat: no-repeat; - background-position: 90%; - margin-bottom: -70px; - margin-top: -40px; -} - -.naranja-medida{ - .small-basic, #you-org, label, #candidato-programa{ - font-family: 'Nunito', sans-serif; - text-transform: none; - letter-spacing: 0; - font-weight: 400; - font-size: 14px; - line-height: 1; - } -} - -/*IMAGE GALLERY*/ -.gallery { - margin: 0 auto; - padding: 5px; -} - -.gallery > div { - position: relative; - float: left; - padding: 5px; -} - -.gallery > div > img { - display: block; - width: 100%; - transition: .1s transform; - transform: translateZ(0); /* hack */ -} - -.gallery > div:hover { - z-index: 1; -} - -.gallery > div:hover > img { - transform: scale(2,2); - transition: .3s transform; -} - -.cf:before, .cf:after { - display: table; - content: ""; - line-height: 0; -} - -.cf:after { - clear: both; -} - -/*CANDIDATE CARD*/ -.candidate-name-card{ - font-family: 'Montserrat', sans-serif; - text-align: center; -} - -.candidate-commitment-card{ - font-family: 'Montserrat', sans-serif; - font-weight: 700; - text-align: center; - color: white; - background-color: $blue; - letter-spacing: 1.5px; - text-transform: uppercase; - padding: 5px; - border-radius: 6px; - font-size: 13px; -} - -.candidate-elected-card{ - font-family: 'Montserrat', sans-serif; - font-weight: 700; - text-align: center; - color: white; - background-color: $yellow; - letter-spacing: 1.5px; - text-transform: uppercase; - padding: 5px; - border-radius: 6px; - font-size: 13px; -} - -img.img-responsive.img-circle.no-gano-na{ - -webkit-filter: grayscale(1); - filter: grayscale(1); -} - -#other-commitments{ - margin: 60px 0 40px; - .candidate-name-card{ - font-size: 14px; - margin: -20px 0 10px; - } - .candidate-commitment-card{ - font-size: 9px; - } - .panel-default{ - box-shadow: none; - } -} - -#you-proposal{ - background-color: $yellow; - padding: 5px 0 15px; - h2{ - color: $main-landing-section-color; - margin: 40px 0 10px; - } -} - -#orgs-repo{ - padding: 60px 0 20px; -} - -#welcome { - background: $yellow ; - background-size: cover; - padding: 20px 0 20px; - h1{ - text-transform: uppercase; - letter-spacing: 6px; - margin: 50px 0 20px; - } - h3{ - font-family: 'Nunito Sans', sans-serif; - font-weight: 700; - text-transform: none; - letter-spacing: 0; - margin: 10px 0 40px; - font-weight: 400; - } - .tool-description{ - color: $grey-one; - font-weight: 700; - line-height: 1.2; - margin: 10px 0 40px; - } -} -@import 'activities'; diff --git a/rioxinteiro/static/sass/_activities.scss b/rioxinteiro/static/sass/_activities.scss deleted file mode 100644 index 7f3b3e45..00000000 --- a/rioxinteiro/static/sass/_activities.scss +++ /dev/null @@ -1,32 +0,0 @@ -.activity{ - margin-bottom: 10px; - .title-and-location { - position: absolute; - bottom: 33%; - .title{ - font-weight: bold; - font-size: large; - - } - .location{ - - } - } - .body{ - background-size: cover; - background-blend-mode: screen; - background-color: currentColor; - min-height:300px; - cursor: pointer; - } - .date{ - } - p { - color: #FFF; - background-color: hsla(0, 0, 0, 0.6); - padding-left: 10px; - } -} -.inner-activity-image { - max-height: 300px; -} diff --git a/rioxinteiro/static/sass/_colors.scss b/rioxinteiro/static/sass/_colors.scss deleted file mode 100644 index 3c30beaf..00000000 --- a/rioxinteiro/static/sass/_colors.scss +++ /dev/null @@ -1,43 +0,0 @@ -/* ========================================================================== - Definición de los colores - ========================================================================== */ -$letters-color: #323a45; -$hover-letters: #0e778a; -$anchor-color: #14b9d5; -$main-background-color: #fff; -$main-landing-section-color: #000; -$footer-background-color: #fff; -$warning-text: #b79800; -$alert-info-background: #DDF6FA; -$alert-warning-background: #FFED93; -$alert-warning-border: #ffd200; -$btn-success-background-color: #3ee0cb; -$btn-success-hover-background-color: #44938e; -$btn-danger-hover-background-color: #af373c; -$nav-anchor-background-color: #e8cc14; -$navbar-color: #000; -$elections-result-list: #a38400; -$alert-info-border-color: #AFE9F3; -$question-answer-background: #ebedf2; -$progress-bar-background: #000; -$footer-color: #000; -$myCandidate-modal-footer: #4b4b4b; -$category_name_background_color: #41FF35; -$proposal-card-background-color: #fff; -$responden-span: #006577; -$no-responden-span: #920006; -$ribbon-color: #9e8000; - -$grey-one: #3d5144; -$grey-two: #5E6D82; -$grey-three: #9BA9C1; -$grey-four: #D1D8E6; -$grey-five: #EAEDF2; - -$blue: #6b77af; -$blue-light: #6b77af; -$red: #FE635F; -$yellow: #e8cc14; -$yellow-dark: #E6B408; -$light-green: #a3b74f; -$laranja: #F0992E; diff --git a/rioxinteiro/static/sass/_media-2017sitio1.scss b/rioxinteiro/static/sass/_media-2017sitio1.scss deleted file mode 100644 index c4f7fe40..00000000 --- a/rioxinteiro/static/sass/_media-2017sitio1.scss +++ /dev/null @@ -1,241 +0,0 @@ -@media screen and (max-width: 1199px) { - .presidents{ - bottom: -250px; - } - - .ribbon-wrapper-candidate { - .ribbon-candidate { - padding: 6px 0 5px 0; - top: 84px; - right: -118px; - width: 188px; - } - } -} - -@media screen and (max-width: 991px) { - - #home-elected-candidate{ - .panel-body{ - margin: 10px 0 0; - } - } - .fa-stack{ - top: 0; - } - .presidents{ - bottom: -20px; - margin-top: -20px; - } - - .action-encuentro{ - margin: 40px 0 130px; - } - .action-crea{ - margin: 180px 0 130px; - } - .action-apoya{ - margin: 180px 0 130px; - } - - .apoya-comparte{ - text-align: center; - } - - .share-detail{ - text-align: center; - } - .share-detail{ - .btn-apoyo{ - background-color: $grey-one; - top: 11px; - width: initial; - &:hover{ - color: $grey-one; - background-color: white; - } - } - .btn-no-apoyo{ - width: initial; - } - } - - .share-detail .fa-inverse { - color: $yellow; - } - - .share-detail a .fa-stack { - color: white; - top: 7px; - } - - .share-detail a .fa-stack:hover { - color: $grey-one; - } - - .naranja-form{ - .candidate-result-value{ - margin: 60px 0 10px; - } - } - - .mano{ - display: none; - } - .gallery > div:hover > img { - transform: none; - } - - .ribbon-wrapper-candidate { - width: 100%; - .ribbon-candidate { - right: -38%; - top: 47%; - } - } -} - -@media screen and (max-width: 900px) { - .fondo-blanco{ - border: none; - } -} - -@media screen and (max-width: 900px) { - #home-search:after{ - display: none; - } -} - -@media screen and (max-width: 784px) { - #home-search input{ - width: 90%; - } -} - -@media screen and (max-width: 630px) { - .ribbon-wrapper-candidate { - width: 100%; - .ribbon-candidate { - right: -36%; - top: 49%; - } - } -} - -@media screen and (max-width: 560px) { - #welcome{ - h1{ - font-size: 28px; - font-weight: 700; - } - h2{ - line-height: 1.2; - } - .hashtag{ - font-size: 22px; - } - } - .ribbon-wrapper-candidate { - width: 100%; - .ribbon-candidate { - right: -27%; - top: 49%; - } - } -} - - -@media screen and (max-width: 495px) { - #you-org{ - .btn{ - margin-top: 10px; - } - } -} - -@media screen and (max-width: 425px) { - .content_padding { - padding-top: 20px; - } - .org-background{ - min-height: 200px; - } - .landing-org{ - position: relative; - top: 90px; - } - .wizard { - .paso { - font-size: 11px; - } - } -} - -@media screen and (max-width: 397px) { - .counter-number{ - font-size: 32px; - top: 5px; - } -} - -@media screen and (max-width: 388px) { - .org-info h2{ - margin-top: 120px; - } -} - -@media screen and (max-width: 360px) { - #actions { - margin: 20px 0px; - h2 { - font-size: 30px; - margin: 20px 0px; - } - } - .bajada { - margin: 0px; - } - .ribbon-wrapper-candidate { - width: 100%; - .ribbon-candidate { - right: -23%; - top: 47%; - } - } -} - - -@media screen and (max-width: 320px) { - #you-org{ - font-size: 10px; - } - - .fondo-blanco{ - h1{ - text-transform: uppercase; - } - } - - .propuesta-content{ - margin-bottom: 130px; - } - - .share{ - text-align: center; - } - - .share-card a .fa-stack{ - margin: 10px 0 10px; - } -} - -@media screen and (max-width: 320px) { - .ribbon-wrapper-candidate { - width: 100%; - .ribbon-candidate { - right: -19%; - top: 41%; - } - } -} diff --git a/rioxinteiro/static/sass/_media-print.scss b/rioxinteiro/static/sass/_media-print.scss deleted file mode 100644 index 996a38f4..00000000 --- a/rioxinteiro/static/sass/_media-print.scss +++ /dev/null @@ -1,64 +0,0 @@ -@media print { - @page {size: landscape} - html .navbar_visible { - padding-top: 5px; - } - .print_hidden { - display: None; - } - .fondo-blanco { - padding: 0px 15px; - border: 0px; - margin-bottom: 0px; - &.text-width { - max-width: initial; - } - h1 { - font-weight: 500; - font-size: 36px; - letter-spacing: 3px; - } - #proposal-details { - h2 { - margin-top: 20px; - margin-bottom: 10px; - } - } - } - .container { - width: 90%; - } - .print-share-urls { - display: block; - transform: rotate(90deg); - position: absolute; - top: -144px; - border-left: 1px dashed; - padding-left: 10px; - margin-left: 382px; - li { - padding: 2px 0px; - margin: 2px 0px; - border-top: 1px dashed; - } - } - .invitacion { - top: 200px; - position: absolute; - } - .print_only { - display:block; - } - .proposal-banner-org { - display: none; - } - .proposal-tools { - display: none; - } - .apoya-comparte { - display: none; - } - .llamado { - display: none; - } -} diff --git a/rioxinteiro/static/sass/_mediaqueries.scss b/rioxinteiro/static/sass/_mediaqueries.scss deleted file mode 100644 index 2a5dc23b..00000000 --- a/rioxinteiro/static/sass/_mediaqueries.scss +++ /dev/null @@ -1,124 +0,0 @@ -@media screen and (max-width: 1024px) { - - section#hero { - background: $yellow; - } - -} - -@media screen and (min-width: 768px) { - li.destacado:before { - content: url(../img/destacado.svg); - position: absolute; - top: -10px; - left: 90px; - } - .img-candidato { - width: initial; - margin: 0 auto; - height: initial; - } -} - -@media screen and (max-width: 900px) { - .fondo-blanco{ - border: none; - } -} - -@media screen and (max-width: 767px) { - h1 { - letter-spacing: 3px; - } - .navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus, .navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover { - color: $yellow; - } -} - -@media screen and (max-width: 320px) { - - h1 { - font-size: 28px; - text-transform: capitalize; - letter-spacing: 0px; - font-weight: 300; - line-height: 40px; - } - - h2 { - font-size: 22px; - } - - .btn { - font-size: 11px; - padding: 7px 10px; - width: 100%; - } - - .btn.arrow { - width: initial; - } - - .small { - font-size: 11px; - } - - section#hero { - padding: 50px 0; - } - - #hero h1 .small { - font-size: 11px; - line-height: 21px; - letter-spacing: 2px; - } - - #hero .input-group-lg > .input-group-addon { - width: 0; - } - - #home-search:before { - display: none; - } - - .elections-results { - bottom: -60px; - } - - section#como-funciona { - padding: 50px 0; - } - - section#que-hago { - padding: 50px 0; - } - - .tips { - padding: 15px; - } - - .fondo-blanco { - padding: 15px; - } - - .wizard .pull-right { - width: 100%; - } - - #footer .col-md-6.col-sm-6.col-xs-12 { - text-align: center; - } - - .tooltip-inner { - max-width: 200px; - } - - .propuesta { - min-height: 300px; - } - - .ribbon { - left: 70px; - } - -} diff --git a/rioxinteiro/static/sass/_navbar.scss b/rioxinteiro/static/sass/_navbar.scss deleted file mode 100644 index 079de459..00000000 --- a/rioxinteiro/static/sass/_navbar.scss +++ /dev/null @@ -1,91 +0,0 @@ -/*Header*/ - -.yellow .navbar-brand { - background: url(../img/logo-blanco_rpi.svg) center center no-repeat; - max-width: 294px; - min-width: 200px; - background-size: contain; -} - -.yellow .navbar-brand img { - display: none; -} - -.navbar-inverse .navbar-toggle .icon-bar { - background-color: $grey-three; -} - -.navbar-inverse.yellow .navbar-toggle .icon-bar { - background-color: white; -} - -.navbar-inverse .navbar-toggle { - border-color: transparent; -} - -.navbar-inverse .navbar-toggle:focus, .navbar-inverse .navbar-toggle:hover { - background-color: $grey-five; -} - -.navbar-inverse.yellow .fa-inverse { - color: $navbar-color; -} -/*Menu*/ -.navbar { - min-height: 50px; - background-color: $main-background-color; - .important { - background-color: $blue-light; - } -} -.navbar-inverse .navbar-nav > li > a { - color: $grey-three; - border: none; - font-family: 'Montserrat', sans-serif; - font-size: 9px; - text-transform: uppercase; - letter-spacing: 1px; - text-align: right; -} - -.navbar-inverse .navbar-nav>li>a:hover { - color: $grey-two; -} - -.navbar-inverse.yellow .navbar-nav > li > a { - color: $navbar-color; -} - -.navbar-inverse.yellow .navbar-nav>li>a:hover { - color: white; -} - -.navbar-nav { - float: right; -} - -.navbar-brand { - padding: 10px 15px; -} - -.navbar-inverse{ - border-bottom: 1px solid $grey-five; -} - -.navbar-inverse.white { - color: $grey-three; - background-color: white; -} - -.navbar-inverse.yellow { - color: white; - background-color: $yellow; -} - -.navbar-inverse.yellow { - border-bottom: 0px solid darken($yellow,10%); -} - -.navbar .btn { - margin-bottom: 0px; -} diff --git a/rioxinteiro/static/sass/_rioxinteiro.scss b/rioxinteiro/static/sass/_rioxinteiro.scss deleted file mode 100644 index 5da5535e..00000000 --- a/rioxinteiro/static/sass/_rioxinteiro.scss +++ /dev/null @@ -1,34 +0,0 @@ -.pull-bottom -{ - float: none; - display: table-cell; - vertical-align: bottom; -} -#call-to-action{ - @extend .small-basic; - background-color: $laranja; - min-height: 60px; - color: white; - font-size: 10px; - padding-top: 12px; - line-height: 12px; - .btn{ - font-size: 10px; - } -} -.logo_landing { - max-width: 54%; -} -.green-up-section { - background-image: url("../img/retangulo_CIMA.svg"); - background-repeat: repeat; - min-height: 66px; - background-color: $yellow; - // margin-top: 60px; -} -.green-bottom-section { - background-image: url("../img/retangulo_BAIXO.svg"); - background-repeat: repeat; - min-height: 28px; - background-color: transparent; -} diff --git a/rioxinteiro/static/sass/main_rioporinteiro.scss b/rioxinteiro/static/sass/main_rioporinteiro.scss deleted file mode 100644 index 27367a70..00000000 --- a/rioxinteiro/static/sass/main_rioporinteiro.scss +++ /dev/null @@ -1,2140 +0,0 @@ - - -/* ========================================================================== - Author's custom styles - ========================================================================== */ - -@import 'colors'; -@import 'rioxinteiro'; - -html, body { - color: $grey-two; - height: 100%; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - font-family: 'Nunito Sans', sans-serif; - font-size: 14px; - line-height: 24px; - .navbar_visible { - padding-top: 25px; - } -} - -#wrapper { - min-height: 100%; - height: auto !important; - height: 100%; - /* Negative indent footer by its height */ - margin: 0 auto -60px; - /* Pad bottom by footer height */ - padding: 0px; -} - -.text-width { - max-width: 800px; - margin: 0 auto; -} - -.rotate { - -ms-transform: rotate(-180deg); /* IE 9 */ - -webkit-transform: rotate(-180deg); /* Chrome, Safari, Opera */ - transform: rotate(-180deg); - margin-right: 5px; -} - -h1 { - font-weight: 700; - font-family: 'Arvo', serif; - letter-spacing: 6px; - font-size: 34px; - text-transform: uppercase; - color: $grey-one; - margin: 40px 0; -} - -h2 { - font-weight: 300; - font-family: 'Arvo', serif; - font-size: 32px; - color: $grey-one; - line-height: 33px; - margin: 40px 0; -} - -h3 { - font-family: 'Arvo', serif; - font-weight: 700; - font-size: 22px; - color: $grey-one; - text-transform: uppercase; - letter-spacing: 3px; -} - -h4 { - font-family: 'Arvo', serif; - font-size: 18px; - line-height: 28px; -} - -h5 { - font-family: 'Montserrat', sans-serif; - letter-spacing: 2px; - font-weight: 700; - font-size: 12px; - text-transform: uppercase; - color: $grey-one; - line-height: 24px; -} - - -a { - color: $blue; -} - -a:hover { - color: darken($blue,15%); - text-decoration: none; -} - -strong { - font-weight: 900; -} - -.small { - font-family: 'Montserrat', sans-serif; - text-transform: uppercase; - letter-spacing: 2px; - font-size: 11px; -} - -h1 .small { - font-size: 11px; - line-height: 31px; - color: #9BA9C1; -} - -hr { - border-top: 1px solid $grey-five; -} - -.width-cien { - width: 100%; -} - -.epigrafe { - margin-bottom: -35px; -} - -.line-space { - height: 60px; -} - -.text-light { - color: $grey-three; -} - -.text-white { - color: white; -} - -.text-dark { - color: $grey-one; -} - -.content_padding { - padding-top: 40px; - padding-bottom: 0; - #info-candidato { - color: #233346; - a { - color: #233346; - &hover { - color: #233346; - } - } - .table>tbody>tr>td { - border: 0px; - } - } - #agenda-candidato { - background-color: #FFF; - padding: 10px 15px; - border-radius: 10px; - li { - &.impar { - background-color: #DDD; - } - &.par { - background-color: #FFF; - } - } - } -} - -.fondo-blanco { - background: white; - padding: 60px 60px 100px; - box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.17); - margin-bottom: 50px; -} - -.fondo-blanco h1 { - margin: 0 0 30px; -} - -.text-warning { - color: $warning-text; -} - -.alert-info { - color: $anchor-color; - background-color: $alert-info-background; - border-color: $alert-info-border-color; -} - -.alert-warning { - color: $warning-text; - background-color: $alert-warning-background; - border-color: $alert-warning-border; -} - -.form-control::-webkit-input-placeholder { - font-weight: 300; -} - -.form-control:-moz-placeholder { /* Firefox 18- */ - font-weight: 300; -} - -.form-control::-moz-placeholder { /* Firefox 19+ */ - font-weight: 300; -} - -.form-control:-ms-input-placeholder { - font-weight: 300; -} - -.img-fluid { - max-width: 100%; - height: auto; -} - -select.form-control { - background: #EAEDF2; - border-radius: 30px; - font-family: Montserrat; - text-transform: uppercase; - letter-spacing: 2px; - font-size: 12px; - color: $grey-two; -} - -.right { - float: right; -} - -/*Breadcrumb*/ - -.breadcrumb { - padding: 8px 0px; - background-color: transparent; - border-radius: 0; - color: $grey-three; -} - -.breadcrumb a { - color: $grey-three; -} - -.breadcrumb>.active { - color: $grey-three; -} - -.breadcrumb>li+li:before { - padding: 0 5px; - color: $grey-three; - content: "/\00a0"; -} - -.yellow-breadcrumbs .breadcrumb a, .yellow-breadcrumbs .breadcrumb>.active, .yellow-breadcrumbs .breadcrumb>li+li:before { - color: white; -} - -/*FORM*/ - -.form-control { - height: 38px; - color: $grey-one; - border: 1px solid $grey-five; - border-radius: 0px; - -webkit-box-shadow: none; - box-shadow: none; - -webkit-transition: none; - -o-transition: none; - transition: none; -} - -.form-control::-webkit-input-placeholder { - color: $grey-three; -} - -.form-control:-moz-placeholder { /* Firefox 18- */ - color: $grey-three; -} - -.form-control::-moz-placeholder { /* Firefox 19+ */ - color: $grey-three; -} - -.form-control:-ms-input-placeholder { - color: $grey-three; -} - -label.control-label { - font-family: 'Montserrat', sans-serif; - font-size: 12px; - text-transform: uppercase; - letter-spacing: 2px; -} - -/*Selector*/ - -.chosen-container-single .chosen-single { - background: $grey-five; - box-shadow: none; - color: $grey-two; - font-weight: 700; - padding: 6px 0px 0px 15px; - height: 38px; - border: 0px; - border-radius: 30px; - font-family: 'Montserrat', sans-serif; - text-transform: uppercase; - letter-spacing: 2px; -} - -.chosen-container-single.chosen-container-active.chosen-with-drop .chosen-single { - background: $grey-five; - box-shadow: none; - color: $grey-two; - font-weight: 700; - padding: 6px 0px 0px 15px; - height: 38px; - border: 0px; - border-radius: 30px 30px 0px 0; -} - -.chosen-container-single .chosen-single div b { - display: block; - width: 100%; - height: 100%; - background: url("../img/arrow_down.svg") no-repeat 0px 15px; -} - -.chosen-container-single .chosen-single div { - width: 34px; -} - -.chosen-container .chosen-drop { - border-top: 0; - background: $grey-five; - box-shadow: none; - border-radius: 0 0 30px 30px; - padding: 15px; - color: $grey-three; - border: none; -} - -.chosen-container-single .chosen-search { - margin-bottom: 15px; -} - -.chosen-container-single .chosen-search input[type=text] { - border: 1px solid $grey-four; - box-shadow: none; - height: 38px; -} - -.chosen-container .chosen-results li { - line-height: 24px; - color: $grey-two; -} - -.chosen-container .chosen-results li.highlighted { - background: $yellow; - border-radius: 30px; -} - - - - -/*Section Hero*/ - -#hero { - /*background: url(../img/hero.svg) bottom right no-repeat $yellow;*/ - /*color: white;*/ - padding: 90px 0; - min-height: 450px; -} - -#hero h1 { - margin: 0 0 40px; -} - -#hero h1 .small { - color: white; - font-size: 14px; - letter-spacing: 4px; -} - -#hero .btn { - margin-right: 6px; - margin-bottom: 11px; -} - -.extra { - background: #4A90E2; - padding-top: 11px; -} - -/*Section banner*/ - -section.banner { - background: $grey-one; - padding: 15px 0 0px; -} - -.counter span { - background: white; - margin-right: 3px; - padding: 6px; - border-radius: 3px; -} - -.inner-banner { - background: $grey-four; - padding: 15px; -} - -/*Section como funciona*/ - -section#como-funciona { - padding: 80px 0; -} - -#como-funciona img { - width: 100%; - max-width: 63px; -} - -#como-funciona .item { - height: 220px; -} - -/*Section que hago*/ - -section#que-hago { - background: $blue; - padding: 15px 0 21px; -} - -#que-hago .arrow { - margin-left: 10px; -} - -#que-hago .col-md-1.col-xs-2 { - margin-top: 13px; -} - -/*Section propuestas en home*/ - -section#propuestas-mas-apoyo { - padding: 60px 0; -} - -/*Elecciones destacadas*/ - -.text-center.intro-home { - margin: 65px 0px 45px; -} - -.paginasPlanasDestacadas { - *zoom: 1; - margin: 20px 0 60px; - padding: 30px; - &:after { - content: ""; - display: table; - clear: both; - } -} - -.contenedorDestacado { - *zoom: 1; - padding: 30px; -} - -.contenedorDestacado:after { - content: ""; - display: table; - clear: both; -} - -.accordion -{ - position:relative; - overflow:hidden; -} - - -.accordion .panel -{ - background-color:$progress-bar-background; - background-image:url(../img/preloader.gif); - background-repeat:no-repeat; - background-position:center center; - position:absolute; - overflow:hidden; -} - - -.accordion .shadow -{ - background:url(accordion-assets/images/shadow.png) repeat-Y; - position:absolute; - right:0px; - width:25px; - height:100%; -} - - -.accordion .preloader -{ - background:url(accordion-assets/images/preloader2.gif) no-repeat; - width:62px; - height:14px; - position:absolute; - z-index:15; -} - - -.accordion .caption -{ - overflow:hidden; - position:absolute; - z-index:20; -} - - -.accordion .caption-background -{ - background:transparent url(accordion-assets/images/captionBg.png); - background:rgba(0,0,0,0.5); - position:absolute; - width:100%; - height:100%; -} - - -.accordion .caption p -{ - color:$main-background-color; - margin:0px; - padding:10px; -} - - -.accordion .caption p a -{ - color:$main-background-color; -} - -/*Home search*/ - -#home-search { - position: relative; -} - -#home-search input { - padding: 14px 10px; - margin-left: 10px; - color: #5E6D82; - position: relative; - width: 100%; -} - -#home-search:before { - /*content: url(../img/flechas-hero.svg);*/ - position: absolute; - bottom: -90px; - left: 0px; -} - -#home-search:after { - content: url(../img/acento-hero.svg); - position: absolute; - top: 0px; - right: -45px; -} - -.elections-results { - left: 15px; - margin: 40px 0px; -} - -.elections-results .list-inline>li { - margin-right: 5px; - a { - color: inherit; - } -} - - -/*Botones*/ - -.btn { - font-family: 'Montserrat', sans-serif; - text-transform: uppercase; - letter-spacing: 2px; - border-radius: 30px; - font-size: 12px; - padding: 9px 14px; - margin-bottom: 7px; -} - -.btn:hover { - box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.4); -} - -.disabled { - opacity: 0.4; -} - -.btn img { - margin-left: 15px; -} - -.btn svg { - vertical-align: bottom; -} - -.arrow.btn img { - margin-left: 0; -} - -.btn-lg { - height: 55px; - padding: 17px; -} - - -.btn-sm { -} - - -.btn-xs { - padding: 2px 7px; - font-size: 11px; - letter-spacing: 1px; -} - -.btn-success { - background-color: $yellow; - border: 3px solid $yellow; -} - -.btn-success:hover, .btn-success.active.focus, .btn-success.active:focus, .btn-success.active:hover, .btn-success:active.focus, .btn-success:active:focus, .btn-success:active:hover, .open>.dropdown-toggle.btn-success.focus, .open>.dropdown-toggle.btn-success:focus, .open>.dropdown-toggle.btn-success:hover, .btn-success.active, .btn-success:active, .open>.dropdown-toggle.btn-success, .btn-success.focus, .btn-success:focus { - background-color: lighten($yellow,10%); - border: 3px solid lighten($yellow,10%); -} - -.btn-primary { - background-color: $grey-five; - border: 3px solid $grey-five; - color: $grey-two; -} - -.btn-primary:hover, .btn-primary:focus, .btn-primary.active.focus, .btn-primary.active:focus, .btn-primary.active:hover, .btn-primary:active.focus, .btn-primary:active:focus, .btn-primary:active:hover, .open>.dropdown-toggle.btn-primary.focus, .open>.dropdown-toggle.btn-primary:focus, .open>.dropdown-toggle.btn-primary:hover { - background-color: lighten($grey-five,5%); - border: 3px solid lighten($grey-five,5%); - color: $grey-two; -} - -.btn-danger { - background-color: transparent; - color: $grey-one; - border: 3px solid white; -} - - -.btn-danger:hover, .btn-danger:focus, .btn-danger.active.focus, .btn-danger.active:focus, .btn-danger.active:hover, .btn-danger:active.focus, .btn-danger:active:focus, .btn-danger:active:hover, .open>.dropdown-toggle.btn-danger.focus, .open>.dropdown-toggle.btn-danger:focus, .open>.dropdown-toggle.btn-danger:hover { - background-color: lighten($yellow,5%); - color: lighten($grey-two,5%); - border: 3px solid white; -} - -.btn-default { - color: $grey-two; - background-color: white; - border: 3px solid $grey-five; -} - -.btn-default:hover, .btn-default:focus, .btn-default.active.focus, .btn-default.active:focus, .btn-default.active:hover, .btn-default:active.focus, .btn-default:active:focus, .btn-default:active:hover { - color: $grey-three; - background-color: white; - border: 3px solid $grey-five; -} - -.btn-info { - background: $grey-one; - border: 3px solid $grey-one; - color: white; -} - -.btn-info:hover, .btn-info:focus, .btn-info.active.focus, .btn-info.active:focus, .btn-info.active:hover, .btn-info:active.focus, .btn-info:active:focus, .btn-info:active:hover { - background: lighten($grey-one,10%); - border: 3px solid lighten($grey-one,10%); -} - -.btn-warning { - background-color: white; - border: 3px solid white; - color: $grey-two; -} - -.btn-warning:hover, .btn-warning:focus, .btn-warning.active.focus, .btn-warning.active:focus, .btn-warning.active:hover, .btn-warning:active.focus, .btn-warning:active:focus, .btn-warning:active:hover { - background-color: white; - border: 3px solid white; - color: $grey-three; -} - -.fa-stack { - color: $yellow; -} - -/*Labels*/ - -.label { - padding: 0.4em .6em .3em; - TEXT-TRANSFORM: uppercase; - letter-spacing: 1px; - font-family: 'Montserrat', sans-serif; -} - -.label-default { - background-color: $grey-five; - color: $grey-two; -} - -.label-danger { - background-color: $red; -} - -@import "navbar"; -/*Nav-pills*/ - -.nav-pills>li { - padding-right: 0px; - padding-left: 0px; -} - -.nav-pills>li.active{ - border-bottom: 3px solid $yellow; - margin-bottom: -3px; -} - -.nav-pills>li>a { - border-radius: 0px; - color: $grey-two; - padding: 10px 12px; -} - -.nav-pills>li.active>a, .nav-pills>li.active>a:focus, .nav-pills>li.active>a:hover { - background-color: transparent; - color: $grey-one; -} - -.nav>li>a:focus, .nav>li>a:hover { - text-decoration: none; - background-color: transparent; - color: $grey-one; -} - -.nav-pills.list-inline { - border-bottom: 3px solid $grey-five; - margin-bottom: 70px; - margin-left: 0; -} - -/*Menu Interno*/ - - -/* Wizard creacion propuesta */ -.panel.panel-default.pasos{ - border: none; -} - -.list-unstyled{ - margin-bottom: 5px; -} - -.paso { - border-bottom: 9px solid $grey-five; - margin-bottom: 20px; -} - -.paso.paso_completado { - border-bottom: 9px solid $yellow; -} - -.well { - margin: 20px 0; - background-color: darken($grey-two,10%); - border: none; - border-radius: 0px; - box-shadow: none; -} - -.well li { - margin-bottom: 10px; -} - -p.destacado-tips { - color: lighten($blue,25%); -} - -.nota { - font-size: 12px; - color: $grey-three; - line-height: 18px; -} - -.terms label { - font-weight: 300; -} - -section.terms { - margin-bottom: 40px; -} - -.wizard { - margin-top: 20px; -} - - -/*Perfiles*/ - -.img-candidato { - width: 96px; - margin: 0 auto; - height: 96px; -} - -.img-candidato { - width: initial; - margin: 0 auto; - height: initial; -} - - - -.img-candidato-small { - max-width: 60px; - margin: 0 auto; -} - -.btn-bajada { - margin-top: -20px; -} - -.bajada .btn { - margin: 16px 0; -} - -.small-bajada { - margin-top: -10px; -} - -.bajada { - margin-top: -30px; - margin-bottom: 70px; -} - -p.answer { - margin-bottom: 40px; -} - -/*Perfil candidato*/ - -.profile { - background: $yellow; -} - -.profile h1 { - margin: -10px 0 20px; -} - -ul.profile.dropdown-menu { - top: 79%; - left: 7%; - background: rgb(255, 255, 255); -} - -.social-link-candidate { - color: $main-background-color; -} - -.container-candidates p { - background: $main-background-color; - padding: 5px; -} - -.icon-quote-left, .icon-quote-right { - color: $grey-five; -} - -.question { - margin: 50px 0 0; -} - - -/* Frente a frente*/ -.progress-bar .fondo { - background-color: $progress-bar-background -} -/*EOF frente a frente*/ - - - -/*Media naranja*/ - -input[type=checkbox], input[type=radio] { - margin: 15px 10px 0px 0px; -} - -/*Media naranja - Resultado */ - -#soulmate-result { - padding: 55px 25px; - border: 1px solid $grey-five; -} - -#soulmate-result h2 { - margin: 10px 0px 20px; - line-height: 44px; -} - -#candidate-img-profile svg { - position: absolute; - top: 0px; - right: 50px; -} - -.progress { - height: 26px; - margin-bottom: 5px; - background-color: $grey-five; -} - -.progress-bar-success { - background-color: $btn-success-background-color; -} - -.progress-bar-warning { - background-color: $alert-warning-border; -} - -.progress-bar-danger { -} - -#soulmate-result .container-progress p span { - float: right; -} - -#other-soulmate h3 { - margin: 70px 0; -} - -.other-soulmate-box { - margin-bottom: 70px; -} - -.other-soulmate-box h4 { - color: $grey-one; - margin: 0px; -} - -#form-soulmate label { - font-weight: normal; -} - -.other-soulmate-box h2 { - margin: 0; -} - -/*Frente a frente*/ - -.porcentaje-similitud { - background: $anchor-color; - color: $main-background-color; - border-radius: 6px; -} - -.porcentaje-similitud h3 { - padding: 10px; -} - -.panel-default>.panel-heading { - color: $main-background-color; - background-color: $letters-color; - border-color: transparent; - -} -.panel-heading.extra-info { - background-color: $blue; - border-top-left-radius: 0px; - border-top-right-radius: 0px; - - } -#compare-candidates i { - color: $grey-five; -} - -#compare-candidates .text-center i { - color: $anchor-color; -} - -#compare-candidates div.col-md-12:first-child { - margin-top: 20px; -} - -#compare-candidates div.col-md-6:last-child { -margin-bottom: 20px; -} - -.globo-texto, .globo-texto-right { - border: 1px solid $grey-five; - padding: 20px; - position: relative; - margin-bottom: 30px; -} - -.globo-texto:after, .globo-texto:before { - top: 100%; - left: 10%; - border: solid transparent; - content: " "; - height: 0; - width: 0; - position: absolute; - pointer-events: none; -} - -.globo-texto-right:after, .globo-texto-right:before { - top: 100%; - left: 90%; - border: solid transparent; - content: " "; - height: 0; - width: 0; - position: absolute; - pointer-events: none; -} - -.globo-texto:after, .globo-texto-right:after { - border-color: rgba(255, 255, 255, 0); - border-top-color: #ffffff; - border-width: 20px; - margin-left: -20px; -} -.globo-texto:before, .globo-texto-right:before { - border-color: rgba(234, 237, 242, 0); - border-top-color: #EAEDF2; - border-width: 21px; - margin-left: -21px; -} - -/*Cuestionario*/ - -.questionary .col-md-4 { - float: right; - padding: 5px 0px 5px 15px; -} - -div.question-answer div.row.hidden-xs { - border-top: 1px solid $main-background-color; - padding: 10px 0px; -} - -div.question-answer div.row.hidden-xs:nth-of-type(2), div.question-answer div.row.hidden-xs:nth-of-type(1) { - border-top: none; -} - -.tooltip-inner { - max-width: 500px; -} - -/* Footer */ - -#footer { - padding: 30px 0; - color: $footer-color; - background-color: $footer-background-color; - margin: 0px 0px 0px; - border-top: 0px solid #EAEDF2; -} - -#footer a { - color: $footer-color; -} - -#footer a:hover { - color: $yellow; -} - -#footer ul { - list-style: none; -} - -#footer i { - margin-right: 15px; -} - -#footer img { - opacity: 0.6; -} - -#footer svg { - vertical-align: middle; - margin-left: 10px; -} - -#footer img:hover { - opacity: 1; -} - -#footer .col-md-4:nth-child(2) { - text-align: center; -} - -.extra-footer .col-md-4 { - padding: 10px; -} - -#footer .extra-footer img { - opacity: 1; - width: 100%; -} - -.redes { - margin-top: 17px; -} - -.read-more a, .read-less a, .read-more a:hover, .read-less a:hover { - display: block; - text-align: center; - margin: 0px 0px -28px; - color: $yellow-dark; -} - -.social-side button.btn-success { - margin: 10px 0; -} - -.social-side button.btn-primary { - margin: 10px 0 25px; -} - -.social-link-candidate { - color: $main-background-color; -} - -.social-link-candidate:hover { - color: $btn-success-background-color; -} - - -/*Ranking*/ - -.panel-primary>.panel-heading { - background-color: $hover-letters; - border-color: transparent; -} - -.panel-primary { - border-color: transparent; - background-color: transparent; - - -} - -.responden .panel-body { - background: $anchor-color; - color: $main-background-color; - border-radius: 0px 0px 6px 6px; -} - -.responden .panel-body p span { - color: $responden-span; -} - -.responden .panel-body p a { - color: $main-background-color; - font-size: 12px; -} - -.no-responden .panel-body p span { - color: $no-responden-span; -} - -.no-responden .panel-body p a { - color: $main-background-color; - font-size: 12px; -} - -.responden .table tbody>tr>td { - border-bottom: none; - border-top: none; - border-left: none; - border-right: none; -} - -.responden .table tbody>tr>td.second { - border-bottom: 1px solid $hover-letters; -} - -.no-responden .table tbody>tr>td { - border-bottom: none; - border-top: none; - border-left: none; - border-right: none; -} - -.no-responden .table tbody>tr>td.second { - border-top: none; - border-left: none; - border-right: none; -} - -.no-responden .panel-body { - color: $main-background-color; - border-radius: 0px 0px 6px 6px; -} - -.panel-danger>.panel-heading { - color: $main-background-color; - border-color: transparent; -} - -.panel-danger { - border-color: transparent; - background-color: transparent; -} - -.table>tbody>tr.danger>td { - background-color: transparent; -} - -.responden .icon-smile { - font-size: 18px; -} - -.no-responden .icon-frown { - font-size: 18px; -} - -.table tbody>tr>td.ranking-icon { - padding: 8px 4px 8px 0px; -} - -.responden tr.primary:first-child, .no-responden tr.danger:first-child { - font-size: 18px; -} - -tr.primary p:first-child, tr.danger p:first-child { - margin: 0 0 0px; -} - -.responden tr.primary:first-child .icon-smile, .no-responden tr.danger:first-child .icon-frown { - font-size: 26px; -} - -.bt-twitter { - background: white; - border-radius: 6px; - color: $letters-color; - text-align: center; - font-size: 12px; - padding: 3px 6px; - cursor: pointer; - display: inline-flex; -} - -.bt-twitter:hover { - background: $letters-color; - color: white; -} - -.bt-twitter i { - margin: 3px 3px 0px 0px; -} - -.responden h4, .no-responden h4 { - font-weight: 900; -} - -/*Preguntales*/ - -.ask-form { - background: $main-background-color; - border-radius: 6px; - padding: 20px; - *zoom: 1; - margin-bottom: 40px; -} - -.ask-form:after { - content: ""; - display: table; - clear: both; -} - -.ask-form .form-control { - background-color: white; - border: none; - border-radius: 0px; - -webkit-box-shadow: none; - box-shadow: none; -} - -.recent-questions h3 { - margin-top: 0px; - margin-bottom: 20px; -} - -.search-questions .form-control { - color: $main-background-color; - background-color: $grey-five; - border: none; - border-radius: 0px; - -webkit-box-shadow: none; - box-shadow: none; -} - -.search-questions .input-group-addon { - background-color: $nav-anchor-background-color; - border: none; - border-radius: 0px; - color: $main-background-color; -} - -.panel-heading .text-right { - color: $grey-five; -} - -.candidate-answer .btn-primary { - padding: 3px 6px; - font-size: 12px; - float: right; -} - -.search-questions .form-control::-webkit-input-placeholder { - color: white; -} - -.search-questions .form-control:-moz-placeholder { /* Firefox 18- */ - color: white; -} - -.search-questions .form-control::-moz-placeholder { /* Firefox 19+ */ - color: white; -} - -.search-questions .form-control:-ms-input-placeholder { - color: white; -} - -/*No responde*/ - -.not_answered_small a:after { - content: url(../img/no-responde-small.png); - position: absolute; - top: 35px; - left: 16px; -} - -.not_answered:after { - content: url(../img/no-responde.png); - position: absolute; - top: 52px; - left: 8px; -} - -/*breadscrumb-social*/ -.breadscrumb-social .social-button { - padding-top: 8px; -} - - -/*404*/ - -.ups.fondo-blanco { - text-align: center; - margin: 40px 0px; -} - -.ups p { - font-weight: 200; -} -.ups i { -} - -#apoya { - position: absolute; - top: 0px; - left: 15px; - width: 253px; - height: 253px; - display: none; -} - -/*Cara a cara*/ -.container_pic #text-support { - position: absolute; - z-index: 10; - right: 15px; -} - -#myCandidate .modal-header { - background-color: $letters-color; - border-radius: 3px 3px 0px 0px; - border-bottom: 0px; -} - -#myCandidate .modal-footer { - background-color: $myCandidate-modal-footer; - margin-top: -4px; -} - -@keyframes doscaras -{ -0% {background-color: $main-background-color;} -50% {background-color: $main-background-color;} -75% {background-color: $alert-warning-border;} -100% {background-color: $main-background-color;} -} - -@-webkit-keyframes doscaras /* Safari and Chrome */ -{ -0% {background-color: $main-background-color;} -50% {background-color: $main-background-color;} -75% {background-color: $alert-warning-border;} -100% {background-color: $main-background-color;} -} - -/*video*/ -#videocontainer, canvas { - position: absolute; - top: 50%; - left: 50%; - min-width: 578px; - min-height: 450px; - -webkit-transform: translate(-50%, -50%); - -moz-transform: translate(-50%, -50%); - -ms-transform: translate(-50%, -50%); - -o-transform: translate(-50%, -50%); - transform: translate(-50%, -50%); -} -#videocontainer img { - position: absolute; - display: block; - bottom: -5px; - left: 0px; -} -.container_pic { - overflow: hidden; - width: 578px; - height: 450px; -} - -/*Custom ribbon */ - -.ribbon { - position: absolute; - transform: rotate(-25deg); - -ms-transform: rotate(-45deg); - -webkit-transform: rotate(-25deg); - top: 44px; - left: 110px; -} - -.ribbon-noimg { - top: 3px; - transform: rotate(-20deg); -} - -#candidate-img-profile > .ribbon { - left: 27px; -} - -/*percentage facetoface*/ -#compare-candidates .candidate-percentage-txt { - background: $anchor-color; - border-radius: 3px; -} - -#compare-candidates .candidate-percentage-txt p.text-center { - color: $main-background-color; - font-size: 14px; - font-weight: bolder; - padding: 5px 0px; -} -/*login form*/ -.base-login { - margin-top: 45px; -} - -.base-login form { - margin-bottom: 15px; -} - -.base-login form .btn-default.btn-lg { - padding: 5px 16px; -} - -@media (max-width: 480px) { - - .carousel.candidato{ - min-height: 712px; - } - - .profile-candidate { - min-height: 425px; - } - - .other-soulmate-box { - margin-top: 5px; - } - - .not_answered_small a:after { - top: 65px; - left: 75px; - } - - .not_answered_small a:after { - content: url(../img/no-responde.png); - position: absolute; - top: 55px; - left: 30px; - } - #hero { - padding: 0 !important; - min-height: 258px; - } - #home-search::after { - content: none; - } - -} - -@media (max-width: 604px) { - - .nav-candidator ul.list-inline { - background: transparent; - } - - .nav-candidator .list-inline>li { - padding: 1px 0px; - } - -} - -@media (max-width: 800px) { - .not_answered:after { - /*top: 75px; - left: 35px;*/ - } - - .not_answered_small a:after { - content: url(../img/no-responde.png); - position: absolute; - top: 80px; - left: 30px; - } -} - - -.explanation-container { - color: $letters-color; -} -.category_name .red { -} -.category_name .green { - background-color: $category_name_background_color; -} - -/*Wizard*/ - -.tips, .tips-invert { - background: $grey-two; - padding: 30px; - color: white; - margin: 30px 0; - position: relative; -} - -.tips:after { - top: 100%; - left: 50%; - border: solid transparent; - content: " "; - height: 0; - width: 0; - position: absolute; - pointer-events: none; - border-color: rgba(120, 130, 145, 0); - border-top-color: $grey-two; - border-width: 20px; - margin-left: -20px; -} - -.tips-invert:before { - bottom: 100%; - left: 50%; - border: solid transparent; - content: " "; - height: 0; - width: 0; - position: absolute; - pointer-events: none; - border-color: rgba(120, 130, 145, 0); - border-bottom-color: $grey-two; - border-width: 20px; - margin-left: -20px; -} - -.tips a, .tips-invert a { - color: $yellow; -} - -.tips-invert a.btn-primary { - color: $grey-two; -} - -.tips-invert a.btn-success { - color: white; -} - -.tips a.btn { - color: white; -} - -.example { - color: $grey-one; -} - -span.number { - background: $yellow; - border-radius: 30px; - padding: 1px 6px 3px; - color: white; - font-family: monospace; - font-weight: 800; - font-size: 14px; -} - -input#id_4-title { - text-align: center; -} - -/*Propuesta*/ - -.propuesta { - border: 2px solid $blue; - border-radius: 5px; - padding: 25px 20px 35px; - border-bottom: 18px solid $blue; - position: relative; - min-height: 510px; -} - -.propuesta:after { - content: 'Propuesta local'; - font-family: 'Montserrat', sans-serif; - color: white; - font-size: 10px; - letter-spacing: 2px; - position: absolute; - bottom: -21px; - left: 0; - width: 100%; - text-align: center; - text-transform: uppercase; -} - -.propuesta .btn-primary { - width: 100%; -} - -.propuesta.transversal { - border: 2px solid $grey-four; - border-bottom: 18px solid $grey-four; -} - -.propuesta.transversal:after { - content: 'Propuesta para todas las comunas'; - font-family: 'Montserrat', sans-serif; - color: white; - font-size: 10px; - letter-spacing: 2px; - position: absolute; - bottom: -21px; - left: 0; - width: 100%; - text-align: center; - text-transform: uppercase; -} - -.propuesta hr, .electo hr { - max-width: 20%; -} - -.logo-ong { - margin: 20px 0px 0px; -} - -.logo-ong img { - max-width: 140px; - max-height: 65px; - margin-left: 5px; -} - -.propuesta h4 a { - color: $grey-one; -} - - -.propuesta h4 a:hover { - color: $blue; -} - -.propuesta h4 { - margin: 0px 0 20px; - &.modal-title { - margin:0; - } -} - -.propuesta .small { - margin: 25px 0 0px; -} - -.share a .fa-stack { - color: $grey-four; -} - -.share a .fa-stack:hover { - color: $yellow; -} - -.btn-apoyo .fa-heart { - font-size: 14px; -} - -.btn-apoyo { - color: $yellow; - cursor: pointer; -} - - -.btn-apoyo:hover { - color: $yellow-dark; -} - -.apoyo { - margin-top: 5px; - min-height: 60px; -} - -.apoyo-contador { - padding-top: 12px; - padding-left: 60px; - max-width: 200px; - text-align: center; -} - -.detail-number h3 { - margin: 6px 0; -} - -.detail-numbers .col-md-4:nth-child(2) { - border-right: 1px solid $grey-five; - border-left: 1px solid $grey-five; -} - -.detail-numbers .row { - margin-top: 17px; -} - -.compromiso { - margin-bottom: 40px; -} - -.compromiso h5 { - margin: -3px 0; -} - -/*Pagination*/ - -.pagination>.active>a, .pagination>.active>a:focus, .pagination>.active>a:hover, .pagination>.active>span, .pagination>.active>span:focus, .pagination>.active>span:hover { - color: $grey-two; - background-color: $grey-five; - border-color: $grey-five; -} - -.pagination>li>a, .pagination>li>span { - margin-left: -2px; - color: #9BA9C1; - border: 2px solid #EAEDF2; - font-family: 'Montserrat', sans-serif; -} - -.pagination>li>a:focus, .pagination>li>a:hover, .pagination>li>span:focus, .pagination>li>span:hover { - color: $grey-one; - background-color: $grey-five; - border-color: $grey-five; -} - -.pagination-sm>li:last-child>a, .pagination-sm>li:last-child>span { - border-top-right-radius: 13px; - border-bottom-right-radius: 13px; -} - -.pagination-sm>li:first-child>a, .pagination-sm>li:first-child>span { - border-top-left-radius: 13px; - border-bottom-left-radius: 13px; -} - -/*Comuna*/ - -.comuna-concejales { - background: $grey-two; - padding: 40px 0 60px; - color: white; -} - -.ranking { - max-width: 200px; - margin: 0 auto; -} - -.small.ranking { - font-size: 9px; - letter-spacing: 1px; - line-height: 14px; -} - -.ranking-content { - position: relative; - background: #8EC2FF; - height: 37px; - padding: 5px 0; -} - -.ranking.small .num { - font-size: 24px; - margin-top: 7px; -} - -.ranking-content:after { - content: url(../img/ribbon-deco-right.svg); - position: absolute; - bottom: -9px; - right: -15px; -} - -.ranking-content:before { - content: url(../img/ribbon-deco.svg); - position: absolute; - bottom: -9px; - left: -15px; -} - -.ribbon-medianaranja { - @extend .ranking-content; - padding: 0px; - background: $yellow; - &:before { - content: url(../img/ribbon-deco-median.png); - } - &:after { - content: url(../img/ribbon-deco-right-median.png); - } -} -.medianaranja { - @extend .wizard; - .checkbox{ - label { - text-transform: none; - } - - } - .paso_title { - font-size: 2em; - .badge { - background-color: $blue-light; - - } - } - .pregunta { - border: 3px solid $blue-light; - border-radius: 10px; - padding: 0 5px; - margin-bottom: 5px; - } -} -/*Tabs*/ - -.nav-tabs.nav-justified li.active a{ - border-bottom: 3px solid $yellow; - color: #233346; -} - -.nav-tabs.nav-justified li a{ - border-bottom: 3px solid #EAEDF2; - color: #5E6D82; -} - -.nav-tabs>li>a:hover { - border-color: transparent transparent $grey-five; - color: $grey-one; -} - -.nav-tabs.nav-justified>.active>a, .nav-tabs.nav-justified>.active>a:focus, .nav-tabs.nav-justified>.active>a:hover { - border-color: transparent transparent $yellow; - border-width: 3px; - border-right: none; - border-left: none; -} - -.nav-tabs.nav-justified>li>a { - border-radius: 0px; -} - -/*Input*/ - -.input-group-lg>.form-control, .input-group-lg>.input-group-addon, .input-group-lg>.input-group-btn>.btn { - border-radius: 30px; - border-top-right-radius: 0; - border-bottom-right-radius: 0; - height: 55px; - padding: 15px 16px; - font-size: 12px; - line-height: initial; - background: $grey-one; - border: 3px solid $grey-one; - color: white; -} - -/*Panel*/ - -.panel { - background-color: transparent; - border: 3px dotted transparent; - -} - - -.panel-default { - border-color: #fff; -} -.extra-info { - border: 3px solid $blue; - } -/*Slides*/ - -.carousel-control.left,.carousel-control.right {background:none;width:25px;} - -.broun-block { - padding-bottom: 34px; -} - -.block { - display: block; -} -.zmin { - z-index: 1; -} - -.person-text { - padding: 10px 0 0; - text-align: center; - z-index: 2; -} -.person-text a { - color: #ffcc00; - display: block; - font-size: 14px; - margin-top: 3px; - text-decoration: underline; -} -.person-text i { - color: #fff; - font-family: Georgia; - font-size: 13px; -} -.rel { - position: relative; -} - -.carousel-control { - opacity: 1; -} - -.block-text .btn { - margin-top: 50px; -} - -.carousel-indicators li { - background: $grey-four; -} - -.carousel-indicators .active { - background-color: $yellow; -} - -.carousel-indicators { - top: -40px; -} - - -.print_only { - display:none; -} -/*Masonry*/ - -/* Grid */ - -#posts { margin: 30px auto 0; } -.post { - margin: 0 0 50px; - width: 100%; -} - -#grid.container .post img { padding: 0; } - - -/*Post elecciones*/ - -.post.electo { - border: 1px solid $grey-five; - border-radius: 6px; - padding: 40px 15px; -} - -/*Profile Organization*/ -.button-org { - position: sticky; - bottom: 10px; - background-color: $yellow; - width: 50px; - padding: 8px 8px 8px 11px; - border-radius: 40px; - color: white; - left: 90%; - a { - color: $grey-two; - } -} -.propuesta.popular_proposal { - -} -.post.propuesta.votita { - background-image: url(../img/nna-proposal.svg); - background-position: 24% 78%; - background-repeat: no-repeat; - .ribbon{ - display: none; - } -} - -.agenda-rio-ribbon { - background-color: $laranja; -} - -.fixed_recomendations { - float: right; - width: 40px; /* Set the width of the sidebar */ - padding-top: 10px; - padding-bottom: 10px; - position: fixed; /* Fixed Sidebar (stay in place on scroll) */ - // z-index: -1; /* Stay on top */ - top: 33%; /* Stay at the top */ - right: 0; - background-color: $laranja; - font-size: 15px; - overflow-x: hidden; - display: block; - writing-mode: tb-rl; - transform: rotate(-180deg); - -} - -.material_ciudadano_information { - cursor: pointer; -} - .material_cidadao_container { - margin-bottom: 10px; - } - -/* Medium devices */ - -@media (min-width: 768px) { - #grid > #posts .post { width: 335px; } - #grid > #posts .post.cs2 { width: 100%; } - .post img { padding: 0; } -} - - - -/* Medium devices */ - -@media (min-width: 992px) { - #grid > #posts .post { width: 445px; } - #grid > #posts .post.cs2 { width: 100%; } -} - - - -/* Large devices */ - -@media (min-width: 1200px) { - #grid > #posts .post { width: 346px; } - #grid > #posts .post.cs2 { width: 742px; } -} - - - -/* Large devices min-width (1200px) + a .post margin (50px) * 2 (100px) = 1300px */ -/* 1300px gives me the clearance I need to keep the margins of the entire #grid (the -bleed if you will) the same width as the .post margins posts (50px). Basically I'm -being really picky about whitespace. If you don't care, no problem, just delete this. -Can this be done with Masonry options? */ - -@media (min-width: 1300px) { - #grid { - position: relative; - } - #grid.container { - left: auto; - padding-left: 15px; - padding-right: 15px; - } -} - -.print-share-urls { display:none; } - -@import 'mediaqueries'; -@import '2017sitio1'; -@import 'media-2017sitio1'; -@import 'media-print' diff --git a/rioxinteiro/templates/_candidate_small.html b/rioxinteiro/templates/_candidate_small.html deleted file mode 100644 index 34b8bd9f..00000000 --- a/rioxinteiro/templates/_candidate_small.html +++ /dev/null @@ -1,25 +0,0 @@ -{% load thumbnail %} -{% load static %} -{% load i18n %} - diff --git a/rioxinteiro/templates/_footer.html b/rioxinteiro/templates/_footer.html deleted file mode 100644 index ab5657af..00000000 --- a/rioxinteiro/templates/_footer.html +++ /dev/null @@ -1,27 +0,0 @@ -{% load staticfiles %} -{% load i18n %} -{% load votainteligente_extras %} -
- {% block extrafooter %} - {% endblock extrafooter %} -
-
-
- Um projeto de {% include '_logo_fci.html' %} -
-
-
    -
  • -
  • -
  • -
  • -
-
-
-
- {% if "extra_footer.html"|template_exists %} - {% include 'extra_footer.html' %} - {% endif %} -
-
-
diff --git a/rioxinteiro/templates/_head_organizations.html b/rioxinteiro/templates/_head_organizations.html deleted file mode 100644 index e3760d78..00000000 --- a/rioxinteiro/templates/_head_organizations.html +++ /dev/null @@ -1,66 +0,0 @@ -{% load staticfiles %} -{% load i18n %} -{% load votainteligente_extras %} -{% load sass_tags %} - - - {% if title %}{{title}}{% else %}{{organization}}{% endif %} em Rio Por Inteiro - - - - - - - - {% block ogp %} - - - - - - - - - - - - - - {% endblock ogp %} - - - - - - - - - - - - - - - - - - - - - - - - - - {% block extra_css %} - {% endblock extra_css %} - diff --git a/rioxinteiro/templates/_login_tabs.html b/rioxinteiro/templates/_login_tabs.html deleted file mode 100644 index 1f9ea5fa..00000000 --- a/rioxinteiro/templates/_login_tabs.html +++ /dev/null @@ -1,51 +0,0 @@ -{% load i18n %} -{% load bootstrap3 %} -{% load votainteligente_extras %} -{% load staticfiles %} -{% load markdown_deux_tags %} - -
-
-
- - - -
-
-
- {% trans "Términos y Condiciones" %}: - {% markdown %} - {% include 'terms_and_conditions/for_all_users.md' %} - {% endmarkdown %} -
-
-
Se você for um candidato, clique aqui.
- {% include '_social_login_buttons.html' with url=next %} -
-

{% trans 'O regístrate con un usuario y contraseña' %}

- {% user_register %} -
- {% if not hide_organization_tab %} -
-

{% trans 'Registrate como organización' %}

- - {% group_register %} -
- {% endif %} - -
-

{% trans 'Ingresa tu usuario y contraseña' %}

- {% basic_login url=next %} -
-
-
-
-
-
diff --git a/rioxinteiro/templates/_logo_fci.html b/rioxinteiro/templates/_logo_fci.html deleted file mode 100644 index 2f592d50..00000000 --- a/rioxinteiro/templates/_logo_fci.html +++ /dev/null @@ -1,18 +0,0 @@ - - - - Logo Ciudadanía Inteligente - - - - - - - - - - - - - - diff --git a/rioxinteiro/templates/_navbar.html b/rioxinteiro/templates/_navbar.html deleted file mode 100644 index 36387c38..00000000 --- a/rioxinteiro/templates/_navbar.html +++ /dev/null @@ -1,64 +0,0 @@ -{% load staticfiles %} -{% load i18n %} -{% load thumbnail %} -{% load votainteligente_extras %} -{% load cache %} - -{% block entire_navbar %} - -{% endblock entire_navbar %} diff --git a/rioxinteiro/templates/backend_candidate/_info_for_candidates.html b/rioxinteiro/templates/backend_candidate/_info_for_candidates.html deleted file mode 100644 index 032fa54d..00000000 --- a/rioxinteiro/templates/backend_candidate/_info_for_candidates.html +++ /dev/null @@ -1,6 +0,0 @@ -{% url 'auth_password_reset' as auth_pwd_reset_url %} -
    -
  • Verifique seu e-mail e procure por um e-mail com o assunto "Bem-vinda/o à Rio por Inteiro!", Lá você encontrará mais informações.
  • -
  • Se você esqueceu sua senha, você pode modificá-la aqui
  • -
  • Se nenhum dos itens acima funcionar para você, preencha este formulário.
  • -
diff --git a/rioxinteiro/templates/backend_candidate/_suggestions_formset.html b/rioxinteiro/templates/backend_candidate/_suggestions_formset.html deleted file mode 100644 index 5c49afcc..00000000 --- a/rioxinteiro/templates/backend_candidate/_suggestions_formset.html +++ /dev/null @@ -1,40 +0,0 @@ -{% load i18n %} -{% load thumbnail %} -{% load votainteligente_extras %} -

Se você estiver em um celular clique aqui

-
- {{ formset.management_form }} - {% for form in formset %} - {% if not candidate|has_commited_with:form.proposal %} -
-

- {% blocktrans with id=form.proposal.id proposer=form.proposal.proposer%} - Proposta Nº{{id}} - Uma proposta de {{proposer}} - {% endblocktrans %} -

-

{{form.proposal.title}}

- {% if form.proposal.proposer.profile.is_organization %} - {% thumbnail form.proposal.proposer.organization_templat.logo "100x100" as im %} - - {% endthumbnail %} - {% endif %} -

{{form.summary|linebreaksbr}}

-
-

-

{{form.detail}} - -

{{form.commited}} -

- {% if not forloop.last %} - {% endif %} -
- {% endif %} - {% endfor %} - -
diff --git a/rioxinteiro/templates/backend_candidate/complete_profile.html b/rioxinteiro/templates/backend_candidate/complete_profile.html deleted file mode 100644 index 431cb527..00000000 --- a/rioxinteiro/templates/backend_candidate/complete_profile.html +++ /dev/null @@ -1,50 +0,0 @@ -{% extends "backend_base.html" %} -{% load staticfiles %} -{% load i18n %} -{% load thumbnail %} -{% load bootstrap3 %} - -{% block extrajs %} -{% endblock extrajs %} - -{% block main_content %} - -
{% csrf_token %} - {% with user.candidacies.first as candidacy %} -

- {% blocktrans with candidate_name=candidacy.candidate.name %} - Información para el perfil de {{candidate_name}} - {% endblocktrans %} -

{% include '_profile_info.html' with user=user %} - - -

- {% trans 'Ir a ver mi perfil' %}

- {% endwith %} - - - {% if candidate.image %} - {% thumbnail candidate.image "135x135" crop="center" as im %} - {{candidate.name}} - {% endthumbnail %} - {% else %} - {{candidate.name}} - {% endif %} - - {% bootstrap_field form.image %} - {% for field in form %} - {% ifnotequal field.name 'image' %} - - {% ifequal field.name 'program_link' %} - {% bootstrap_label "Adicione um link sobre sua candidatura" %} - {% bootstrap_field field show_label=False %} - {% else %} - {% bootstrap_field field %} - {% endifequal %} - {% endifnotequal %} - {% endfor %} - - -
- -{% endblock main_content %} diff --git a/rioxinteiro/templates/base.html b/rioxinteiro/templates/base.html deleted file mode 100644 index 0f32b89b..00000000 --- a/rioxinteiro/templates/base.html +++ /dev/null @@ -1,159 +0,0 @@ - -{% load staticfiles %} -{% load flatpages %} -{% load sass_tags %} -{% load i18n %} -{% load thumbnail %} -{% load votainteligente_extras %} -{% load cache %} - - - Rio Por Inteiro{% block title %}: {{ config.WEBSITE_GENERAL_SETTINGS_HOME_TITLE }}{% endblock title %} - {% cache 1000 landing_meta_1 %} - - - - - - - {% endcache %} - - {% block ogp %} - {% cache 1000 social_meta %} - - - - - - - - - - - - - - {% endcache %} - {% endblock ogp %} - - - - - - - - - - - - - - - - - - - - - - - - - {% block extra_css %} - {% endblock extra_css %} - - - {% cache 5000 FACEBOOK_INIT %} - - {% endcache %} - {% block _everything %} -
- {% block navbar %} - {% include '_navbar.html' %} - {% endblock navbar %} - {% block everything %} -
- {% block content %} - {% endblock content %} -
- {% endblock everything %} -
- {% endblock _everything %} - {% include '_footer.html' %} - - - - - - - - - - {% block extra_scripts %} - {% endblock extra_scripts %} - - {% cache 5000 analytics_bottom %} - - {% endcache %} - - - diff --git a/rioxinteiro/templates/elections/candidate_detail.html b/rioxinteiro/templates/elections/candidate_detail.html deleted file mode 100644 index 1291948e..00000000 --- a/rioxinteiro/templates/elections/candidate_detail.html +++ /dev/null @@ -1,206 +0,0 @@ -{% extends "elections/election_base.html" %} -{% load staticfiles %} -{% load i18n %} -{% load thumbnail %} -{% load markdown_deux_tags %} -{% load votainteligente_extras %} -{% load thumbnail %} -{% load ogp_tags %} -{% load cache %} - -{% block url_face_to_face %}{% url 'face_to_face_one_candidate_detail_view' slug=election.slug slug_candidate_one=candidate.slug %}{% endblock url_face_to_face %} - -{% block title %} - {{election}} - {{candidate.name}}{% endblock title%} -{% block navbar_background %}yellow{% endblock navbar_background %} - -{% block tab_profile %}class="active"{% endblock %} -{% block content_container %}{% endblock content_container %} -{% block election_breadcrumbs %}{% endblock %} - -{% block ogp %} - {% render_ogp candidate %} -{% endblock ogp %} - -{% block extrakeywords %}{{candidate.name}},{{candidate.election.position}} para {{candidate.election.area.name}},{% get_personal_data candidate=candidate personal_data='Partido' as partido %}{% if partido.value %} {{partido.value}}, {% endif %}{% endblock extrakeywords %} - -{% block mainelection %} -
-

{{ candidate.name }} - {% get_personal_data candidate=candidate personal_data='Numero' as numero %} {{numero.value}}

- -

{% get_personal_data candidate=candidate personal_data='lema' as lema %}{{lema.value}}

- {% if user|is_candidate %} - {% with user.candidacies.first as candidacy %} - {% if candidacy.candidate == candidate %} - {% url 'backend_candidate:complete_profile' slug=candidacy.candidate.election.slug candidate_slug=candidacy.candidate.slug as complete_profile %} - {% trans "Modificar mi perfil" %} - {% endif %} - {% endwith%} -{% endif %} -
- -
-
-
-
-
- {% if candidate.image %} - {% thumbnail candidate.image "135x135" crop="center" as im %} - {{candidate.name}} - {% endthumbnail %} - {% else %} - {{candidate.name}} - {% endif %} - {% if config.SHOW_RIBBON_IN_CANDIDATE and not candidate.commitments.count %}
Esse candidato ainda não se compromete com propostas
{% endif %} -
-

- {% get_personal_data candidate=candidate personal_data='Numero' as numero %} {{numero.value}} -

-
-
- - - - {% get_personal_data candidate=candidate personal_data='Coligação' as coag %} - {% if coag.value %} - - {% endif %} - - - - {% get_personal_data candidate=candidate personal_data='raca' as raca %} - {% if raca.value %} - - {% endif %} - - - - - - - - - {% get_personal_data candidate=candidate personal_data='territorio' as territorio %} - {% if territorio %} - - {% endif %} - - - - {% get_personal_data candidate=candidate personal_data='experiencia' as experiencia %} - {% if experiencia.value %} - - - - {% endif %} - - - - -
- {% get_personal_data candidate=candidate personal_data='Partido' as partido %} - {% if partido.value %} -

Partido

-

{{partido.value}}

- {% endif %} -
-

Coligação

-

{{coag.value}}

-
- {% get_personal_data candidate=candidate personal_data='ocupacion' as ocupacion %} - {% if ocupacion.value %} -

Ocupação atual

-

{{ocupacion.value}}

- {% endif %} -
-

Raça

-

{{raca.value}}

-
- {% get_personal_data candidate=candidate personal_data='orietacion_sexual' as orietacion_sexual %} - {% if orietacion_sexual.value %} -

Orientação sexual

-

{{orietacion_sexual.value}}

- {% endif %} -
- {% if candidate.elections.count %} -

Candidatura

-
    - {% for e in candidate.elections.all %} -
  • {{e.position}}
  • - {% endfor %} -
- {% endif %} -
-

Território

-

{{territorio.value}}

-
-

{% trans "Reseña Biográfica" %}

- {{ experiencia.value|markdown }} -
-

Propostas comprometidas

- {% if candidate.commitments.committed.count %} -

{% blocktrans with commitment_count=candidate.commitments.committed.count %} - {{commitment_count}} compromissos cidadãos - {% endblocktrans %}

- {% else %} -

Esse candidato ainda não se compromete com propostas

- {% endif %} -
- {% if candidate.contact_details.count %} -

Contatos

-
    - {% include 'elections/candidates/social_media.html' with candidate=candidate %} -
- {% endif %} -
-
-
- {% include 'elections/candidates/agenda.html' with candidate=candidate election=election %} -
-
-
-
-{% get_personal_data candidate=candidate personal_data='program_link' as program_link %} -{% if program_link.value %} -
- -

{% ifequal candidate.election.position 'Presidenta o Presidente' %} - Revisa su programa - {% else %} - {% trans "Revisa sus ideas y planteamientos" %} - {% endifequal %}{% trans "aquí" %}

-
-{% endif %} - -
-

{% trans "Compromisos Ciudadanos" %}

- {% if candidate.commitments.committed.count %} -

{% blocktrans with proposals_committed=candidate.commitments.committed.count candidate_name=candidate.name %} - Acá encontrarás un total de {{proposals_committed}} propuestas a las que {{candidate_name}} se comprometió en VotaInteligente a cumplir dentro del plan de gobierno. - {% endblocktrans %}

- {% include 'elections/candidates/propuestas_a_las_que_se_ha_comprometido.html' with candidate=candidate election=election %} - {% else %} - {% if user|is_candidate %} - {% blocktrans with candidate_name=candidate.name %} - {{candidate_name}} aún no te haz comprometido en VotaInteligente! - {% endblocktrans %} - - {% else %} -

Esse candidato ainda não se compromete com propostas

- {% endif %} - {% endif %} - -
- {% if user|is_candidate %} - {% with user.candidacies.first as candidacy %} - {% if candidacy.candidate == candidate and not candidate.commitments.count %} - {% url 'backend_candidate:proposals_for_me' slug=candidacy.candidate.election.slug candidate_slug=candidacy.candidate.slug as proposals_for_me %} - Conferir propostas - {% endif %} - {% endwith%} - {% endif %} -
-
- -{% endblock mainelection %} - -{% block extrajs %}{% endblock extrajs %} diff --git a/rioxinteiro/templates/elections/election_base.html b/rioxinteiro/templates/elections/election_base.html deleted file mode 100644 index 05f6951a..00000000 --- a/rioxinteiro/templates/elections/election_base.html +++ /dev/null @@ -1,41 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} -{% load votainteligente_extras %} -{% load ogp_tags %} - -{% block extrajs %} -{% endblock extrajs %} - -{% block title %} - {{candidate.name}} - {{election}} - {% trans "Perfiles"%}{% endblock title%} - -{% block keywords %}{% for tag in election.tags.all %}, {{tag}}{% endfor %}{% endblock keywords %} - -{% block description %}{% trans "Conoce los candidatos a Senador, Diputado y Presidente para las elecciones de Chile 2017" %}{% endblock description %} - -{% block ogp %} - {% render_ogp election %} -{% endblock ogp %} - -{% block content %} -
-
- - {% if candidate.election.area.get_related %} - {% trans "También te podría interesar:" %} - {% for area in candidate.election.area.get_related %} - {% if area.elections.count %} - {{area.name}} - {% endif %} - {% endfor %} - {% endif %} -
- - {% block mainelection %} - {% endblock mainelection %} - -
-{% endblock content %} diff --git a/rioxinteiro/templates/elections/election_card.html b/rioxinteiro/templates/elections/election_card.html deleted file mode 100644 index 9ff6c0b6..00000000 --- a/rioxinteiro/templates/elections/election_card.html +++ /dev/null @@ -1,61 +0,0 @@ -{% load thumbnail %} -{% load static %} -{% load i18n %} - -
- {% if election %} -
-

{{election.name}}

-
-
- {% for candidate in election.candidates.all %} - - {% if forloop.counter|divisibleby:4 %} -
- {% endif %} - {% endfor %} - {% if user.is_staff %} - {% trans "Ayudanos!" %} - {% endif %} -
- {% else %} - {% endif %} -
diff --git a/rioxinteiro/templates/index.html b/rioxinteiro/templates/index.html deleted file mode 100644 index 5248cdb8..00000000 --- a/rioxinteiro/templates/index.html +++ /dev/null @@ -1,64 +0,0 @@ -{% extends "base.html" %} -{% load staticfiles %} -{% load votainteligente_extras %} -{% load i18n %} - -{% load thumbnail %} -{% load cache %} - -{% block everything %} - -
- - - -
-
-
-
-
-
-

Encontre o ponto em comum entre você e sua candidatura #TemCompromisso

-
-
-
-
-
- -{% cache 600 featured_p %} -{% if featured_proposals.count %} -
-
-

Temos {{total_proposals}} propostas cidadãs

-

{% trans "Te invitamos a filtrar y encontrar propuestas ciudadanas en las siguientes áreas" %}

- {% include 'popular_proposal/_filter_tag_form.html' %} - {% include 'popular_proposal/_lista_propuestas.html' with popular_proposals=featured_proposals form=Nil hide_proposal_list_header=True hidden_search=True %} - -
-
-{% endif %} -{% endcache %} -{% cache 600 organization_logos %} -{% organization_logos %} -{% endcache %} - -{% endblock everything %} diff --git a/rioxinteiro/templates/know_your_candidates.html b/rioxinteiro/templates/know_your_candidates.html deleted file mode 100644 index bea9491d..00000000 --- a/rioxinteiro/templates/know_your_candidates.html +++ /dev/null @@ -1,37 +0,0 @@ -{% extends "base.html" %} -{% load staticfiles %} -{% load i18n %} -{% load thumbnail %} -{% load votainteligente_extras %} -{% load bootstrap3 %} -{% load cache %} - - -{% block title %}- {% trans "Candidatos Chile 2017" %}{% endblock title %} -{% block description %}{% trans "Conoce tus congresistas y sus compromisos" %}{% endblock description %} -{% block everything %} -
-

Candidatos Comprometidos

-

Aqui você pode encontrar os candidatos envolvidos no RioPorInteiro

- -
- -
-{% for pos in positions %} - {% if pos.candidates.exists %} -

{{pos.name}}

- {% endif %} -
- {% for candidate in pos.candidates %} - {% include "_candidate_small.html" with candidate=candidate%} - {% if forloop.counter|divisibleby:6 %} -
- - {% endif %} - - {% endfor %} -
- -{% endfor %} -
-{% endblock everything %} diff --git a/rioxinteiro/templates/mails/candidates/join_us_pls/body.txt b/rioxinteiro/templates/mails/candidates/join_us_pls/body.txt deleted file mode 100644 index 8352bea0..00000000 --- a/rioxinteiro/templates/mails/candidates/join_us_pls/body.txt +++ /dev/null @@ -1,12 +0,0 @@ -{% load votainteligente_extras %} -Olá! {{contact.candidate.name}}: -Somos da equipe Rio por Inteiro e estamos te escrevendo para -informar que você já pode subir seus dados na nossa plataforma! - -Para fazer isso, você só precisa entrar no link e responder as perguntas: - -{{contact.get_absolute_url}} - -Muito obrigado desde já ;) - -{% mail_signature_txt %} diff --git a/rioxinteiro/templates/mails/candidates/join_us_pls/subject.txt b/rioxinteiro/templates/mails/candidates/join_us_pls/subject.txt deleted file mode 100644 index 7ddefaf9..00000000 --- a/rioxinteiro/templates/mails/candidates/join_us_pls/subject.txt +++ /dev/null @@ -1 +0,0 @@ -Junte-se! diff --git a/rioxinteiro/templates/mails/candidates/mail_with_user_and_password/body.html b/rioxinteiro/templates/mails/candidates/mail_with_user_and_password/body.html deleted file mode 100644 index 6aa164bf..00000000 --- a/rioxinteiro/templates/mails/candidates/mail_with_user_and_password/body.html +++ /dev/null @@ -1,25 +0,0 @@ -{% load votainteligente_extras %} -

Olá

-

-

Estamos te escrevendo para convida-lx a participar da plataforma Rio por Inteiro: https://rioporinteiro.org.br, que busca aproximar as candidaturas da sociedade nas eleições de 2018!

-

-

A #RioporInteiro é uma iniciativa sem fins lucrativos, que recebe propostas cidadãs e da sociedade civil para as eleições estaduais do Rio de Janeiro de 2018.

-

-

Cada candidatura conta com um perfil básico, que pode ser acessado para divulgar informações sobre sua campanha e comprometer-se com as propostas publicamente na plataforma.

-

-

Enviamos aos e-mails de todas/os as/os candidatas/os as informações para acessar a plataforma e completar seu perfil, mas queríamos facilitar sua participação, já te conferindo os dados para isso!

-

-

Se você já está participando da plataforma, a partir daqui você pode continuar atualizando as informações e se comprometendo com as propostas.

-

-

Como acessar o perfil?

-

-

Basta fazer login no http://{{site.domain}}/candidatos/login com o seguinte nome de usuário e senha (você pode modificá-la entrando no site).

-

-

Seu usuário é: {{contact.candidacy.user.username}}

-

Sua senha é: {{contact.initial_password}}

-

-

obs: Se você deseja que utilizemos outro e-mail para nos comunicarmos com você ou com outra pessoa responsável por esses temas, você poderá responder a este mesmo e-mail com o contato para modificação, além de dúvidas que possa ter ;)

-

-

Junte-se à Rio por Inteiro!

- -{% mail_signature_html %} \ No newline at end of file diff --git a/rioxinteiro/templates/mails/candidates/mail_with_user_and_password/body.txt b/rioxinteiro/templates/mails/candidates/mail_with_user_and_password/body.txt deleted file mode 100644 index 9b2e0557..00000000 --- a/rioxinteiro/templates/mails/candidates/mail_with_user_and_password/body.txt +++ /dev/null @@ -1,25 +0,0 @@ -{% load votainteligente_extras %} -Olá - -Estamos te escrevendo para convida-lx a participar da plataforma Rio por Inteiro: https://rioporinteiro.org.br, que busca aproximar as candidaturas da sociedade nas eleições de 2018! - -A #RioporInteiro é uma iniciativa sem fins lucrativos, que recebe propostas cidadãs e da sociedade civil para as eleições estaduais do Rio de Janeiro de 2018. - -Cada candidatura conta com um perfil básico, que pode ser acessado para divulgar informações sobre sua campanha e comprometer-se com as propostas publicamente na plataforma. - -Enviamos aos e-mails de todas/os as/os candidatas/os as informações para acessar a plataforma e completar seu perfil, mas queríamos facilitar sua participação, já te conferindo os dados para isso! - -Se você já está participando da plataforma, a partir daqui você pode continuar atualizando as informações e se comprometendo com as propostas. - -Como acessar o perfil? - -Basta fazer login no https://rioporinteiro.org.br/candidatos/login com o seguinte nome de usuário e senha (você pode modificá-la entrando no site). - -**Seu usuário é: {{contact.candidacy.user.username}} -**Sua senha é: {{contact.initial_password}} - -obs: Se você deseja que utilizemos outro e-mail para nos comunicarmos com você ou com outra pessoa responsável por esses temas, você poderá responder a este mesmo e-mail com o contato para modificação, além de dúvidas que possa ter ;) - -Junte-se à Rio por Inteiro! - -{% mail_signature_txt %} diff --git a/rioxinteiro/templates/mails/candidates/mail_with_user_and_password/subject.txt b/rioxinteiro/templates/mails/candidates/mail_with_user_and_password/subject.txt deleted file mode 100644 index 14b3dd9a..00000000 --- a/rioxinteiro/templates/mails/candidates/mail_with_user_and_password/subject.txt +++ /dev/null @@ -1 +0,0 @@ -Bem-vinda/o à Rio por Inteiro! diff --git a/rioxinteiro/templates/mails/commitments_summary/README.md b/rioxinteiro/templates/mails/commitments_summary/README.md deleted file mode 100644 index 2cfe1158..00000000 --- a/rioxinteiro/templates/mails/commitments_summary/README.md +++ /dev/null @@ -1,2 +0,0 @@ -Este es un mail semanal que les llega a las personas comentandoles sobre cambios -en las propuestas que apoyan. diff --git a/rioxinteiro/templates/mails/commitments_summary/body.html b/rioxinteiro/templates/mails/commitments_summary/body.html deleted file mode 100644 index 26916a2e..00000000 --- a/rioxinteiro/templates/mails/commitments_summary/body.html +++ /dev/null @@ -1,31 +0,0 @@ -{% load votainteligente_extras %} -

Olá {{user}}:

-

Este e-mail é para te contar que temos notícias de algumas propostas que você apoiou:

- - - - - - - {% for commitment in commitments %} - - {%if commitment.commited %} - - - {% else %} - - - {% endif %} - - {% endfor %} -
Candidata/oProposta
{{commitment.candidate}}{{commitment.proposal}}{{commitment.candidate}}{{commitment.proposal}}
- -

Isso não teria sido possível sem o seu apoio, por isso, queremos convidá-la/lo para fazer parte da ação coletiva.

- -

- PS: -
- Se você não quiser mais receber esses e-mails, clique aqui. -

- -{% mail_signature_html %} diff --git a/rioxinteiro/templates/mails/commitments_summary/body.txt b/rioxinteiro/templates/mails/commitments_summary/body.txt deleted file mode 100644 index 786fede2..00000000 --- a/rioxinteiro/templates/mails/commitments_summary/body.txt +++ /dev/null @@ -1,16 +0,0 @@ -{% load votainteligente_extras %}Olá {{user}}: -Esse e-mail é para te contar que temos novidades sobre algumas propostas cidadãs -que você apoiou: -{% for commitment in commitments %}{%if commitment.commited %} -- {{commitment.candidate}} se comprometeu com {{commitment.proposal}} e -você pode ver o compromisso no seguinte link: https://{{site.domain}}{{commitment.get_absolute_url}} -{% else %} -- {{commitment.candidate}} rejeitou a proposta {{commitment.proposal}} e -você pode ver o compromisso no seguinte link: https://{{site.domain}}{{commitment.get_absolute_url}} -{% endif %}{% endfor %} - -Isso não teria sido possível sem o seu apoio, por isso queremos convidá-la/lo para fazer parte da ação -coletiva -PS: -Se você não quiser mais receber esses e-mails, clique aqui https://{{site.domain}}{{user.profile.get_unsubscribe_url}}. -{% mail_signature_txt %} diff --git a/rioxinteiro/templates/mails/commitments_summary/subject.txt b/rioxinteiro/templates/mails/commitments_summary/subject.txt deleted file mode 100644 index 1abfec72..00000000 --- a/rioxinteiro/templates/mails/commitments_summary/subject.txt +++ /dev/null @@ -1 +0,0 @@ -Novos compromissos de candidatas/os com propostas que você apoia em RioPorInteiro.org.br diff --git a/rioxinteiro/templates/mails/genia_lo_sentimos/README.md b/rioxinteiro/templates/mails/genia_lo_sentimos/README.md deleted file mode 100644 index 7aed53a4..00000000 --- a/rioxinteiro/templates/mails/genia_lo_sentimos/README.md +++ /dev/null @@ -1 +0,0 @@ -Este mail llega cuando un candidato NO se compromete con una propuesta. diff --git a/rioxinteiro/templates/mails/genia_lo_sentimos/body.txt b/rioxinteiro/templates/mails/genia_lo_sentimos/body.txt deleted file mode 100644 index 8aba0996..00000000 --- a/rioxinteiro/templates/mails/genia_lo_sentimos/body.txt +++ /dev/null @@ -1,13 +0,0 @@ -{% load votainteligente_extras %}Olá {% include '_user_printable.html' with user=person %}! -Estamos escrevendo para te contar que {{commitment.candidate.name}} acaba de declarar que não se comprometerá com a proposta cidadã {{proposal.title}}. - -{% if commitment.candidate.election %} -Você pode ver seus motivos para rejeitar sua proposta aqui: -https://{{site.domain}}{{commitment.get_absolute_url}} -{% endif %} - -Nós valorizamos muito sua iniciativa e, por essa razão, queremos pedir que você não desanime e nos ajude a continuar mudando o Rio de Janeiro -Você pode continuar promovendo sua proposta, utilizando das nossas Ferramentas de Ativismo: - -https://{{site.domain}}/static/material-ciudadano/manual-herramientas-activismo.pdf -{% mail_signature_txt %} diff --git a/rioxinteiro/templates/mails/genia_lo_sentimos/subject.txt b/rioxinteiro/templates/mails/genia_lo_sentimos/subject.txt deleted file mode 100644 index 3a9c6a3c..00000000 --- a/rioxinteiro/templates/mails/genia_lo_sentimos/subject.txt +++ /dev/null @@ -1 +0,0 @@ -Sentimos muito, mas um(a) candidata/o disse que não se comprometerá com a sua proposta. diff --git a/rioxinteiro/templates/mails/genia_lograste_compromiso/README.md b/rioxinteiro/templates/mails/genia_lograste_compromiso/README.md deleted file mode 100644 index bc649edb..00000000 --- a/rioxinteiro/templates/mails/genia_lograste_compromiso/README.md +++ /dev/null @@ -1,2 +0,0 @@ -Este mail llega a las personas que hicieron una propuesta cuando un candidato -se compromete. diff --git a/rioxinteiro/templates/mails/genia_lograste_compromiso/body.html b/rioxinteiro/templates/mails/genia_lograste_compromiso/body.html deleted file mode 100644 index 53b52a59..00000000 --- a/rioxinteiro/templates/mails/genia_lograste_compromiso/body.html +++ /dev/null @@ -1,18 +0,0 @@ -{% load votainteligente_extras %}Temos uma boa notícia {% if person.get_short_name %}{{ person.get_short_name}}{% else %}{{ person.get_username}}{% endif %}!
-Estamos escrevendo para contar que {{commitment.candidate.name}} acaba de se comprometer com a proposta {{proposal.title}}.
-Parabens! -{% if commitment.detail %} -{{ commitment.candidate.name }} se compromete nos seguintes termos:
- -{{commitment.detail}}
-{% endif %} -
-Para revisar o compromisso com a proposta, você pode acessar:
-https://{{site}}{{commitment.get_absolute_url}}
-
-Obrigado pelo seu apoio, esperamos que você entenda que este é um grande passo para mudar o Estado do Rio de Janeiro.
-Ainda temos muito pela frente e queremos que você esteja por perto para acompanhar essa proposta.
-
-Este é um e-mail automático, mas se você respondê-lo, chegará a toda a equipe Rio por Inteiro ;)
-
-{% mail_signature_txt %} diff --git a/rioxinteiro/templates/mails/genia_lograste_compromiso/body.txt b/rioxinteiro/templates/mails/genia_lograste_compromiso/body.txt deleted file mode 100644 index ace0c1fa..00000000 --- a/rioxinteiro/templates/mails/genia_lograste_compromiso/body.txt +++ /dev/null @@ -1,17 +0,0 @@ -{% load votainteligente_extras %}Temos uma boa notícia {% if person.get_short_name %}{{ person.get_short_name}}{% else %}{{ person.get_username}}{% endif %}! -Estamos escrevendo para contar que {{commitment.candidate.name}} acaba de se comprometer com a proposta {{proposal.title}}. -{% if commitment.detail %} -{{ commitment.candidate.name }} se compromete nos seguintes termos: - -{{commitment.detail}} -{% endif %} - -Para revisar o compromisso com a proposta, você pode acessar: -https://{{site}}{{commitment.get_absolute_url}} - -Obrigado pelo seu apoio, esperamos que você entenda que este é um grande passo para mudar o Estado do Rio de Janeiro. -Ainda temos muito pela frente e queremos que você esteja por perto para acompanhar essa proposta. - -Este é um e-mail automático, mas se você respondê-lo, chegará a toda a equipe Rio por Inteiro ;) - -{% mail_signature_txt %} diff --git a/rioxinteiro/templates/mails/genia_lograste_compromiso/subject.txt b/rioxinteiro/templates/mails/genia_lograste_compromiso/subject.txt deleted file mode 100644 index 416e1998..00000000 --- a/rioxinteiro/templates/mails/genia_lograste_compromiso/subject.txt +++ /dev/null @@ -1 +0,0 @@ -Parabéns! Uma candidatura acaba de se comprometer com a sua proposta! diff --git a/rioxinteiro/templates/mails/many_citizens_supporting/README.md b/rioxinteiro/templates/mails/many_citizens_supporting/README.md deleted file mode 100644 index b0b9389d..00000000 --- a/rioxinteiro/templates/mails/many_citizens_supporting/README.md +++ /dev/null @@ -1,3 +0,0 @@ -Este mail llega cuando se ha cumplido una cierta cantidad de corazones en una propuesta -y les llega a los candidatos un recordatorio para que se comprometan. -Este mail sólo le llega alos cnadidatos no-comprometidos. diff --git a/rioxinteiro/templates/mails/many_citizens_supporting/body.txt b/rioxinteiro/templates/mails/many_citizens_supporting/body.txt deleted file mode 100644 index b4846e96..00000000 --- a/rioxinteiro/templates/mails/many_citizens_supporting/body.txt +++ /dev/null @@ -1,12 +0,0 @@ -{% load votainteligente_extras %}Olá {{contact.candidate.name}}, - -Queremos te contar que em {{proposal.area}} a proposta “{{proposal.title}}” já conta com o apoio de {{number}} cidadãs/ãos e acreditamos que pode ser de seu interesse incorpor-la em seu programa. - -Para fazer isso, você deve clicar no link a seguir. Você também pode fazer comentários sobre -como você vai se comprometer com a proposta. - -https://{{site.domain}}{{proposal.get_absolute_url}} - -Atenciosamente, - -{% mail_signature_txt %} diff --git a/rioxinteiro/templates/mails/many_citizens_supporting/subject.txt b/rioxinteiro/templates/mails/many_citizens_supporting/subject.txt deleted file mode 100644 index dad4e758..00000000 --- a/rioxinteiro/templates/mails/many_citizens_supporting/subject.txt +++ /dev/null @@ -1 +0,0 @@ -{{number}} cidadãs/ãos estão apoiando uma causa! diff --git a/rioxinteiro/templates/mails/new_commitment/README.md b/rioxinteiro/templates/mails/new_commitment/README.md deleted file mode 100644 index e7f4936e..00000000 --- a/rioxinteiro/templates/mails/new_commitment/README.md +++ /dev/null @@ -1,2 +0,0 @@ -Para: Ciudadano que apoya -Cuando: Este mail llega cuando hay un compromiso nuevo de un candidato con una propuesta. diff --git a/rioxinteiro/templates/mails/new_commitment/body.txt b/rioxinteiro/templates/mails/new_commitment/body.txt deleted file mode 100644 index 2e0db2d0..00000000 --- a/rioxinteiro/templates/mails/new_commitment/body.txt +++ /dev/null @@ -1,10 +0,0 @@ -{% load votainteligente_extras %}Olá {% include '_user_printable.html' with user=person %}! -Estavamos escrevendo para te contar que {{commitment.candidate.name}} {% if candidate.election.position == 'concejal' %}acaba de apoiar{% elif candidate.election.position == 'alcalde' %}acab de se comprometer com{% else %}acaba de se comprometer com{% endif %} a proposta cidadã {{proposal.title}}. - - -Você pode ver {% if candidate.election.position == 'concejal' %}o apoio à{% elif candidate.election.position == 'alcalde' %}o compromisso com{% else %}o compromisso com{% endif %} a proposta cidadã Você pode entrar no seguinte link: -{% if commitment.candidate.election %} -https://{{site.domain}}{{commitment.get_absolute_url}} -{% endif %} - -{% mail_signature_txt %} diff --git a/rioxinteiro/templates/mails/new_commitment/subject.txt b/rioxinteiro/templates/mails/new_commitment/subject.txt deleted file mode 100644 index a1fd3d3e..00000000 --- a/rioxinteiro/templates/mails/new_commitment/subject.txt +++ /dev/null @@ -1 +0,0 @@ -Parabéns! {{candidate.name}} se comprometeu com uma proposta que você apoia! diff --git a/rioxinteiro/templates/mails/new_sponsorshipnotification_to_proposer/README.md b/rioxinteiro/templates/mails/new_sponsorshipnotification_to_proposer/README.md deleted file mode 100644 index a55f080b..00000000 --- a/rioxinteiro/templates/mails/new_sponsorshipnotification_to_proposer/README.md +++ /dev/null @@ -1,2 +0,0 @@ -Para: Creador de una propuesta -Cuando: Una organización patrocina una propuesta. diff --git a/rioxinteiro/templates/mails/new_sponsorshipnotification_to_proposer/body.txt b/rioxinteiro/templates/mails/new_sponsorshipnotification_to_proposer/body.txt deleted file mode 100644 index 5f1ff367..00000000 --- a/rioxinteiro/templates/mails/new_sponsorshipnotification_to_proposer/body.txt +++ /dev/null @@ -1,17 +0,0 @@ -{% load votainteligente_extras %} -Prezada/o {{like.proposal.proposer}}: - -Queremos te contar que {{like.user}} acabam de apoiar publicamente sua -proposta *{{like.proposal.title}}*. Você pode contatar-lhes através do e-mail -{{like.user.email}}, nós não lhes demos seu e-mail, mas estão esperando que você as/os contate! - -Além disso, {{like.user}} te enviou a seguinte mensagem na hora de -apoiar sua proposta: -{{like.message}} - -Você também pode ver esse apoio no perfil de {{like.user}} (https://{{site.domain}}{{like.user.organization_template.get_absolute_url}}) e na sua -proposta (https://{{site.domain}}{{like.proposal.get_absolute_url}}). - -Agradecemos muito sua participação! - -{% mail_signature_txt %} diff --git a/rioxinteiro/templates/mails/new_sponsorshipnotification_to_proposer/subject.txt b/rioxinteiro/templates/mails/new_sponsorshipnotification_to_proposer/subject.txt deleted file mode 100644 index 2530bb36..00000000 --- a/rioxinteiro/templates/mails/new_sponsorshipnotification_to_proposer/subject.txt +++ /dev/null @@ -1 +0,0 @@ -Parabéns! {{like.user}} acaba de apoiar sua proposta {{like.proposal.title}} diff --git a/rioxinteiro/templates/mails/new_sponsorshipnotification_to_sponsorer/README.md b/rioxinteiro/templates/mails/new_sponsorshipnotification_to_sponsorer/README.md deleted file mode 100644 index 4523b84c..00000000 --- a/rioxinteiro/templates/mails/new_sponsorshipnotification_to_sponsorer/README.md +++ /dev/null @@ -1,2 +0,0 @@ -Para: Organización que patrocina -Cuando: cuando patrocina diff --git a/rioxinteiro/templates/mails/new_sponsorshipnotification_to_sponsorer/body.txt b/rioxinteiro/templates/mails/new_sponsorshipnotification_to_sponsorer/body.txt deleted file mode 100644 index a4a904d2..00000000 --- a/rioxinteiro/templates/mails/new_sponsorshipnotification_to_sponsorer/body.txt +++ /dev/null @@ -1,17 +0,0 @@ -{% load votainteligente_extras %}Arrasou {{like.user}}! - -Lembramos que você acaba de apoiar a proposta "{{like.proposal.title}}"{% if like.message %} e que você enviou a seguinte mensagem: - -{{like.message}} -{% else %}.{% endif %} - -{% if like.proposal.contact_details %}Queríamos dizer que {{like.proposal.user}} deixou os seguintes dados de contato público: - -{{like.proposal.contact_details}}. -{% endif %} -Agora você só precisa esperar que {{like.proposal.user}} entre em contato. Enquanto isso, você pode ver seu apoio a essa proposta -refletido em seu perfil (https://{{site.domain}}{{like.user.organization_template.get_absolute_url}}) e na proposta (https://{{site.domain}}{{like.proposal.get_absolute_url}}). - -Aeee! obrigado por estar com a gente! - -{% mail_signature_txt %} diff --git a/rioxinteiro/templates/mails/new_sponsorshipnotification_to_sponsorer/subject.txt b/rioxinteiro/templates/mails/new_sponsorshipnotification_to_sponsorer/subject.txt deleted file mode 100644 index 717f23ce..00000000 --- a/rioxinteiro/templates/mails/new_sponsorshipnotification_to_sponsorer/subject.txt +++ /dev/null @@ -1 +0,0 @@ -Genias/os! Gracias por apoyar {{like.proposal.title}}. diff --git a/rioxinteiro/templates/mails/new_temporary_proposal/README.md b/rioxinteiro/templates/mails/new_temporary_proposal/README.md deleted file mode 100644 index 0c972124..00000000 --- a/rioxinteiro/templates/mails/new_temporary_proposal/README.md +++ /dev/null @@ -1 +0,0 @@ -new_temporary_proposal diff --git a/rioxinteiro/templates/mails/new_temporary_proposal/body.txt b/rioxinteiro/templates/mails/new_temporary_proposal/body.txt deleted file mode 100644 index ea9362dc..00000000 --- a/rioxinteiro/templates/mails/new_temporary_proposal/body.txt +++ /dev/null @@ -1,11 +0,0 @@ -{% load votainteligente_extras %}Olá {{temporary_data.proposer}}! -Recebemos sua proposta cidadã e em breve teremos novidades. - -Sua proposta tem o seguinte detalhe: - -{% include 'popular_proposal/plantillas/preview.txt' with preview_data=temporary_data.data %} - - -Muito obrigada por querer fazer de {{area}} um lugar melhor. - -{% mail_signature_txt %} diff --git a/rioxinteiro/templates/mails/new_temporary_proposal/subject.txt b/rioxinteiro/templates/mails/new_temporary_proposal/subject.txt deleted file mode 100644 index f0694166..00000000 --- a/rioxinteiro/templates/mails/new_temporary_proposal/subject.txt +++ /dev/null @@ -1 +0,0 @@ -Recebemos sua Proposta Cidadã para {{area}}. diff --git a/rioxinteiro/templates/mails/not_new_commitment/README.md b/rioxinteiro/templates/mails/not_new_commitment/README.md deleted file mode 100644 index 36166cd5..00000000 --- a/rioxinteiro/templates/mails/not_new_commitment/README.md +++ /dev/null @@ -1,2 +0,0 @@ -Para: Ciudadano que apoya -Cuando: Un candidato no se compromete con una propuesta diff --git a/rioxinteiro/templates/mails/not_new_commitment/body.txt b/rioxinteiro/templates/mails/not_new_commitment/body.txt deleted file mode 100644 index 408c03c4..00000000 --- a/rioxinteiro/templates/mails/not_new_commitment/body.txt +++ /dev/null @@ -1,14 +0,0 @@ -{% load votainteligente_extras %}Olá {% include '_user_printable.html' with user=person %}! -Estamos escrevendo para te contar que {{candidate.name}} se pronunciou de maneira negativa -sobre a proposta cidadã {{proposal.title}} que você apoia. - -{{commitment.candidate.name}} fez o seguintes comentários -ao se comprometer com a sua causa: - -{{commitment.detail|linebreaks}} - -Para ver a proposta, você pode entrar no link: - -https://{{site.domain}}{{commitment.get_absolute_url}} - -{% mail_signature_txt %} diff --git a/rioxinteiro/templates/mails/not_new_commitment/subject.txt b/rioxinteiro/templates/mails/not_new_commitment/subject.txt deleted file mode 100644 index d25f8767..00000000 --- a/rioxinteiro/templates/mails/not_new_commitment/subject.txt +++ /dev/null @@ -1 +0,0 @@ -Infelizmente um(a) candidata/o disse que não se comprometerá com sua proposta. diff --git a/rioxinteiro/templates/mails/notify_staff_new_commitment/README.md b/rioxinteiro/templates/mails/notify_staff_new_commitment/README.md deleted file mode 100644 index fa6e0b26..00000000 --- a/rioxinteiro/templates/mails/notify_staff_new_commitment/README.md +++ /dev/null @@ -1,4 +0,0 @@ -Este es el mejor mail ------------------------ -Cuando llega? Cuando un candidato se compromete -a quién le llega? al equipo!!! diff --git a/rioxinteiro/templates/mails/notify_staff_new_commitment/body.txt b/rioxinteiro/templates/mails/notify_staff_new_commitment/body.txt deleted file mode 100644 index 1bd96f67..00000000 --- a/rioxinteiro/templates/mails/notify_staff_new_commitment/body.txt +++ /dev/null @@ -1,22 +0,0 @@ -{% load votainteligente_extras %}Boa time! -Esse e-mail é pra contar que temos um novo comprometimento: - -Candidato: {{commitment.candidate.name}} candidata/o a {{commitment.candidate.election.position}} por {{commitment.candidate.election.area.name}} {% get_personal_data candidate=commitment.candidate personal_data='Partido' as partido %} {% if partido %}{{partido.value}}{% endif %} - {% get_personal_data candidate=commitment.candidate personal_data='Pacto' as pacto %}{% if pacto %}{{pacto.value}}{% endif %} - -URL da/o Candidata/o: https://{{site.domain}}{{commitment.candidate.get_absolute_url}} - -Proposta: {{commitment.proposal.title}} de {{commitment.proposal.proposer}} - -URL da proposta: https://{{site.domain}}{{commitment.proposal.get_absolute_url}} -{% if commitment.candidate.election %} -URL do compromisso: https://{{site}}{{commitment.get_absolute_url}} -{% endif %} - -{% if commitment.detail %} -Termos em que se comprometeu: {{commitment.detail}} -{% endif %} - -Ahazamosssssss -Arriba los corazones y abajo los pantalones. - -{% mail_signature_txt %} diff --git a/rioxinteiro/templates/mails/notify_staff_new_commitment/subject.txt b/rioxinteiro/templates/mails/notify_staff_new_commitment/subject.txt deleted file mode 100644 index 558a4ed5..00000000 --- a/rioxinteiro/templates/mails/notify_staff_new_commitment/subject.txt +++ /dev/null @@ -1 +0,0 @@ -VAMOS TIME!!! NOVO COMPROMISSO de {{commitment.candidate.name}} na plataforma!!! diff --git a/rioxinteiro/templates/mails/notify_staff_new_proposal/README.md b/rioxinteiro/templates/mails/notify_staff_new_proposal/README.md deleted file mode 100644 index f6309cb8..00000000 --- a/rioxinteiro/templates/mails/notify_staff_new_proposal/README.md +++ /dev/null @@ -1,3 +0,0 @@ -Otro mail bueno bueno bueno: -Cuando llega? cuando hay propuestas nuevas -a quién le llega? al equpe!!! diff --git a/rioxinteiro/templates/mails/notify_staff_new_proposal/body.txt b/rioxinteiro/templates/mails/notify_staff_new_proposal/body.txt deleted file mode 100644 index 8eb812ac..00000000 --- a/rioxinteiro/templates/mails/notify_staff_new_proposal/body.txt +++ /dev/null @@ -1,16 +0,0 @@ -{% load votainteligente_extras %}UUUUhuuuulll!! - -Cacha que {{temporary_data.proposer}} crió uma proposta cicadanã. - -Os dados sao: - -id: {{temporary_data.id}} -Título de la propuesta es: {{temporary_data.get_title}} -{% if temporary_data.created_proposal %} -Quer saber mais? aqui tem o link: -https://{{site.domain}}{{temporary_data.created_proposal.get_absolute_url}} -{% endif %} - -Recuerda que te queremos más que la chucha por eso tienes un <3 ahí donde dice Perfil del Staff. --- -"Contra toda autoridade ... exceto minha mãe" - Confúcio diff --git a/rioxinteiro/templates/mails/notify_staff_new_proposal/subject.txt b/rioxinteiro/templates/mails/notify_staff_new_proposal/subject.txt deleted file mode 100644 index 93094abd..00000000 --- a/rioxinteiro/templates/mails/notify_staff_new_proposal/subject.txt +++ /dev/null @@ -1 +0,0 @@ -Uhulll!! Há uma nova proposta para {{temporary_data.area}} diff --git a/rioxinteiro/templates/mails/organization_activation/body.html b/rioxinteiro/templates/mails/organization_activation/body.html deleted file mode 100644 index 37024535..00000000 --- a/rioxinteiro/templates/mails/organization_activation/body.html +++ /dev/null @@ -1,20 +0,0 @@ -{% load i18n %} -{% load bootstrap3 %} -{% load votainteligente_extras %} -{% url 'registration_activate' activation_key as activation_key_url %} -{% blocktrans with sitename=site.name sitedomain=site.domain%} -

Registro para RioPorInteiro

-

-Olá, você (ou alguém que diz ser você) tentou registrar uma conta no RioPorInteiro. -

-

-Se não foi você, por favor, ignore este e-mail e seu endereço será removido de nossos registros. -

-

Para ativar sua conta em RioPorInteiro, por favor clique no seguinte link antes de -{{ expiration_days }} dias:
-https://{{ sitedomain }}{{ activation_key_url }} -

- -{% endblocktrans %} -{% mail_signature_html %} - diff --git a/rioxinteiro/templates/mails/organization_activation/body.txt b/rioxinteiro/templates/mails/organization_activation/body.txt deleted file mode 100644 index b772c909..00000000 --- a/rioxinteiro/templates/mails/organization_activation/body.txt +++ /dev/null @@ -1,14 +0,0 @@ -{% load i18n %} -{% load bootstrap3 %} -{% load votainteligente_extras %} -{% url 'registration_activate' activation_key as activation_key_url%} -{% blocktrans with sitename=site.name siteurl=site.domain %} -Olá, você (ou alguém que diz ser você) tentou registrar uma conta no RioPorInteiro. -Se não foi você, por favor, ignore este e-mail e seu endereço será removido de nossos registros. - - -Para ativar sua conta em RioPorInteiro, por favor clique no seguinte link antes de -{{ expiration_days }} dias: -https://{{ sitename }}{{ activation_key_url }} -{% endblocktrans %} -{% mail_signature_txt %} diff --git a/rioxinteiro/templates/mails/organization_activation/subject.txt b/rioxinteiro/templates/mails/organization_activation/subject.txt deleted file mode 100644 index e1bfc2f8..00000000 --- a/rioxinteiro/templates/mails/organization_activation/subject.txt +++ /dev/null @@ -1 +0,0 @@ -Ativação de sua conta no RioPorInteiro diff --git a/rioxinteiro/templates/mails/periodic_report/README.md b/rioxinteiro/templates/mails/periodic_report/README.md deleted file mode 100644 index b3ed9a88..00000000 --- a/rioxinteiro/templates/mails/periodic_report/README.md +++ /dev/null @@ -1,5 +0,0 @@ -Este mail se envía periódicamente a las personas que proponen -este mail trae cosas de analytica, específicamente en cada una de sus propuestas -- Cantidad de compromisos -- Cantidad de corazones -- Cantidad de visitas diff --git a/rioxinteiro/templates/mails/periodic_report/body.html b/rioxinteiro/templates/mails/periodic_report/body.html deleted file mode 100644 index b94a4c02..00000000 --- a/rioxinteiro/templates/mails/periodic_report/body.html +++ /dev/null @@ -1,21 +0,0 @@ -{%load votainteligente_extras%} -Olá {{user}}:
-Queríamos que você soubesse tudo o que aconteceu com suas propostas na última semana: -
{% for proposal in proposals %} -Com {{proposal.proposal}}:
-
    -
  • Recebeu {{proposal.analytics.visits}} visitas.
  • -
  • Recebeu {{proposal.analytics.commitments}} compromissos.
  • -
  • Recebeu {{proposal.analytics.likers}} apoiios.
  • -

-{% endfor %} -{% if new_proposals %} -Além disso, queremos informar que, durante a última semana, recebemos algumas propostas de cidadãos que podem ser de seu interesse.
- -{% endif %} - -{% mail_signature_txt %} diff --git a/rioxinteiro/templates/mails/periodic_report/body.txt b/rioxinteiro/templates/mails/periodic_report/body.txt deleted file mode 100644 index 324726ab..00000000 --- a/rioxinteiro/templates/mails/periodic_report/body.txt +++ /dev/null @@ -1,18 +0,0 @@ -{%load votainteligente_extras%} -Olá {{user}}: -Queríamos que você soubesse tudo o que aconteceu com suas propostas na última semana: -{% for proposal in proposals %} -Com {{proposal.proposal}}: -- Recebeu {{proposal.analytics.visits}} visitas. -- Recebeu {{proposal.analytics.commitments}} compromissos. -- Recebeu {{proposal.analytics.likers}} apoios. -{% endfor %} - -{% if new_proposals %} -Além disso, queremos informar que, durante a última semana, recebemos algumas propostas de cidadãos que podem ser de seu interesse. -{% for proposal in new_proposals %} -- {{proposal.title}} (https://{{site.domain}}{{proposal.get_absolute_url}}) -{% endfor %} -{% endif %} - -{% mail_signature_txt %} diff --git a/rioxinteiro/templates/mails/periodic_report/subject.txt b/rioxinteiro/templates/mails/periodic_report/subject.txt deleted file mode 100644 index e8577fdf..00000000 --- a/rioxinteiro/templates/mails/periodic_report/subject.txt +++ /dev/null @@ -1 +0,0 @@ -Relatório periódico sobre sua(s) proposta(s) \ No newline at end of file diff --git a/rioxinteiro/templates/mails/popular_proposal_accepted/README.md b/rioxinteiro/templates/mails/popular_proposal_accepted/README.md deleted file mode 100644 index 9f84436a..00000000 --- a/rioxinteiro/templates/mails/popular_proposal_accepted/README.md +++ /dev/null @@ -1,3 +0,0 @@ -a quién? a la persona que escribe una propuesta. -cuando? cuando escribe una propupesta. Esto es como una confirmación de que -recibimos su propuesta. diff --git a/rioxinteiro/templates/mails/popular_proposal_accepted/body.txt b/rioxinteiro/templates/mails/popular_proposal_accepted/body.txt deleted file mode 100644 index 05f15654..00000000 --- a/rioxinteiro/templates/mails/popular_proposal_accepted/body.txt +++ /dev/null @@ -1,41 +0,0 @@ -{% load votainteligente_extras %} -Parabéns {% if user.get_short_name %}{{ temporary_data.proposer.get_short_name}}{% else %}{{ temporary_data.proposer.get_username}}{% endif %}!: - -Sua proposta para {{area}} foi recebida com sucesso{% if moderator %} por {{moderator}} e nós faremos com que ela chegue a candaditas/os de {{area}}{% endif %}. - -Agora, convidamos você a agir para que sua proposta tenha o maior número possível de adesão e que candidatas e candidatos tenham mais pressão para se comprometerem. - -Para isso, você pode consultar as ferramentas de ativismo que temos para você. Nelas você encontrará um guia para posicionar e divulgar sua proposta, além de dicas úteis para fortalecer o trabalho de sua organização. Elas também estarão disponíveis no seu perfil da plataforma. - -Você pode baixar esse material no seguinte link: -https://{{site.domain}}/static/material-ciudadao/ativismo.pdf - -Por fim, te recomendamos adicionar mais informações à sua proposta aqui: - -https://{{site.domain}}{% url 'popular_proposals:citizen_update' slug=temporary_data.created_proposal.slug %} - -Gostaríamos de lembrar que sua proposta contem os seguintes dados: - -Sua proposta: -{{temporary_data.created_proposal.data.solution|popular_proposal_when}} - -Esta proposta deve ser cumprida antes de {{temporary_data.created_proposal.data.when|popular_proposal_when}}, e surge em resposta à seguinte preocupação da comunidade: {{temporary_data.created_proposal.data.problem|popular_proposal_when}}. - -Além disso, entendemos que a solução será dada por: - -{{temporary_data.created_proposal.data.solution_at_the_end|popular_proposal_when}} - -Você pode ver sua proposta no seguinte link: -https://{{site.domain}}{{ temporary_data.created_proposal.get_absolute_url }} - -E aqui você pode ver a lista de todas as propostas sobrea {{area}}: -https://{{site.domain}}{{area.get_absolute_url}} - - -Para fazer com que sua proposta seja parte dos programas -de candidatas e candidatos, te recomendamos que você se una -à sua rede para dar visibilidade à ela! - - -Muito obrigada. -{% mail_signature_txt %} diff --git a/rioxinteiro/templates/mails/popular_proposal_accepted/subject.txt b/rioxinteiro/templates/mails/popular_proposal_accepted/subject.txt deleted file mode 100644 index e40c7937..00000000 --- a/rioxinteiro/templates/mails/popular_proposal_accepted/subject.txt +++ /dev/null @@ -1 +0,0 @@ -Sua proposta para {{area}} foi aceita! diff --git a/rioxinteiro/templates/mails/search_proposals_subscription/README.md b/rioxinteiro/templates/mails/search_proposals_subscription/README.md deleted file mode 100644 index 0c54edbb..00000000 --- a/rioxinteiro/templates/mails/search_proposals_subscription/README.md +++ /dev/null @@ -1,2 +0,0 @@ -Este mail llega a los ciudadanos que se inscriben para buscar propuestas -en el futuro. diff --git a/rioxinteiro/templates/mails/search_proposals_subscription/body.txt b/rioxinteiro/templates/mails/search_proposals_subscription/body.txt deleted file mode 100644 index d088e909..00000000 --- a/rioxinteiro/templates/mails/search_proposals_subscription/body.txt +++ /dev/null @@ -1,11 +0,0 @@ -{% load votainteligente_extras %}Olá {{user.get_full_name}}: - -Esse e-mail é para te contar que temos novas propostas na Rio por Inteiro: -{% for proposal in proposals %} -* {{proposal.title}} feita por {{proposal.proposer.get_full_name}} (https://{{site.domain}}{{proposal.get_absolute_url}}){% endfor %} - -Você pode verificar suas assinaturas para busca no seguinte link: -https://{{site.domain}}{% url 'proposal_subscriptions:list' %} - -Um abraço -{% mail_signature_txt %} diff --git a/rioxinteiro/templates/mails/search_proposals_subscription/subject.txt b/rioxinteiro/templates/mails/search_proposals_subscription/subject.txt deleted file mode 100644 index 2221b8e4..00000000 --- a/rioxinteiro/templates/mails/search_proposals_subscription/subject.txt +++ /dev/null @@ -1 +0,0 @@ -Novas propostas na Rio por Inteiro diff --git a/rioxinteiro/templates/mails/signature.html b/rioxinteiro/templates/mails/signature.html deleted file mode 100644 index 2d4059b1..00000000 --- a/rioxinteiro/templates/mails/signature.html +++ /dev/null @@ -1,4 +0,0 @@ -
--- -
-A equipe da RioXInteiro diff --git a/rioxinteiro/templates/mails/signature.txt b/rioxinteiro/templates/mails/signature.txt deleted file mode 100644 index c8dd8186..00000000 --- a/rioxinteiro/templates/mails/signature.txt +++ /dev/null @@ -1,2 +0,0 @@ --- -A equipe da RioXInteiro diff --git a/rioxinteiro/templates/mails/sos_una_grande/README.md b/rioxinteiro/templates/mails/sos_una_grande/README.md deleted file mode 100644 index 0606919b..00000000 --- a/rioxinteiro/templates/mails/sos_una_grande/README.md +++ /dev/null @@ -1,2 +0,0 @@ -A quién: A la persona que escribe una propuesta. -Cuando: Cuando llega a cierto límite de apoyos <3 diff --git a/rioxinteiro/templates/mails/sos_una_grande/body.txt b/rioxinteiro/templates/mails/sos_una_grande/body.txt deleted file mode 100644 index 4e1e3113..00000000 --- a/rioxinteiro/templates/mails/sos_una_grande/body.txt +++ /dev/null @@ -1,11 +0,0 @@ -{% load votainteligente_extras %}Olá {% include '_user_printable.html' with user=proposal.proposer %}! - -Estamos muito feliz que a sua proposta {{proposal.title}} -alcançou um total de {{number}} apoios! - -O que você está fazendo é incrível e acreditamos que contribui para -o objetivo final do projeto: melhorar a mobilização cidadã. - -Muito obrigada por tudo. - -{% mail_signature_txt %} diff --git a/rioxinteiro/templates/mails/sos_una_grande/subject.txt b/rioxinteiro/templates/mails/sos_una_grande/subject.txt deleted file mode 100644 index fd24129c..00000000 --- a/rioxinteiro/templates/mails/sos_una_grande/subject.txt +++ /dev/null @@ -1 +0,0 @@ -Parabéns! diff --git a/rioxinteiro/templates/mails/suggestions_for_candidates/README b/rioxinteiro/templates/mails/suggestions_for_candidates/README deleted file mode 100644 index 7c42948c..00000000 --- a/rioxinteiro/templates/mails/suggestions_for_candidates/README +++ /dev/null @@ -1,23 +0,0 @@ -MAILS DE SUGERENCIAS DE PROPUESTAS -================================== -Estos mails le llegan a los candidatos en base a filtros con propuestas que les pudiesen interesar. - - -Explicación: ------------- -Creamos ciertos filtros de candidatos basándonos en su partido (puede ser cualquier filtro, pero elegimos ese). -Luego asignamos ciertas propuestas a estos filtros es decir y este mail es el que les llega cuando les sugerimos propuestas. - -Ejemplo de uso: ---------------- -- Partido rojo: - - Propuesta 1 + una explicación de la propuesta - - Propuesta 2 + una explicación de la propuesta - - Propuesta 3 + una explicación de la propuesta - - Propuesta 4 + una explicación de la propuesta - -- Partido azul: - - Propuesta 1 + una explicación de la propuesta - - Propuesta 3 + una explicación de la propuesta - - Propuesta 4 + una explicación de la propuesta - - Propuesta 5 + una explicación de la propuesta diff --git a/rioxinteiro/templates/mails/suggestions_for_candidates/body.html b/rioxinteiro/templates/mails/suggestions_for_candidates/body.html deleted file mode 100644 index bcd7b066..00000000 --- a/rioxinteiro/templates/mails/suggestions_for_candidates/body.html +++ /dev/null @@ -1,33 +0,0 @@ -{% load votainteligente_extras %} -
- - -{% if text %} -

{{text|linebreaksbr}}

-{% else %} - -

Olá {{candidate.name}}:

-

A Rio por Inteiro é uma plataforma, sem fins lucrativos, que recebe propostas cidadãs e da sociedade civil para as eleições deste ano.

-

Te convidamos a participar como candidata/o e conhecer e se comprometer com as propostas da plataforma. Para isso, selecionamos algumas propostas que acreditamos te interessar. Para se comprometer, basta marcar a caixa abaixo da proposta. Para enviar sua resposta, basta pressionar "enviar compromissos". Suas respostas estarão disponíveis no seu perfil da plataforma. -

- -{% endif %} - -{% include 'backend_candidate/_suggestions_formset.html' with formset=formset object=candidate_incremental site=site candidate=candidate %} - -{% with candidate.contacts.last as contact %} -{% if contact %} - -

A qualquer momento você entrar e editar as informações que constam no seu perfil, ou se comprometer com outras propostas. Para isso, você deve entrar em: {{site.domain}}{% url 'backend_candidate:candidate_auth_login' %} com seu usuário ({{contact.candidacy.user.username}}) e senha ({{contact.initial_password}}).

-{% else %} -

A qualquer momento você entrar e editar as informações que constam no seu perfil, ou se comprometer com outras propostas. Para isso você deve entrar em: {{site.domain}}{% url 'backend_candidate:candidate_auth_login' %} com seu usuário: {{contact.candidacy.user.username}}.

-{% endif %} - -{% endwith %} - -

Se vovcê quiser que utilizamos outro e-mail para nos comunicarmos ou se tiver alguma dúvida, pode responde a esse mesmo e-mail.

- -

Junte-se à Rio por Inteiro!

- ---
-{% mail_signature_html %} diff --git a/rioxinteiro/templates/mails/suggestions_for_candidates/body.txt b/rioxinteiro/templates/mails/suggestions_for_candidates/body.txt deleted file mode 100644 index 0962041f..00000000 --- a/rioxinteiro/templates/mails/suggestions_for_candidates/body.txt +++ /dev/null @@ -1,28 +0,0 @@ -{% load votainteligente_extras %}Olá {{candidate.name}}: - -https://{{site.domain}} é uma plataforma, sem fins lucrativos, que recebe propostas cidadãs e da sociedade civil para as eleições deste ano. - -Cada candidatura conta com um perfil básico, que você pode acessar para divulgar informações sobre sua campanha e comprometer-se com as propostas de cidadãos relacionadas a você. - -Selecionamos algumas propostas que consideramos ser do seu interesse: - -{% for proposal in proposals %} -https://{{site.domain}}{{proposal.get_absolute_url}} -{% endfor %} -Gostaríamos de lembrar que para acessar é só entrar em https://{{site.domain}}{% url 'backend_candidate:candidate_auth_login' %}. -{% with candidate.contacts.last as contact %} -{% if not candidate.has_joined %} - -Para se comprometer com essa e outras propostas você deve acessar https://{{site.domain}}/candidatos/login tu usuario y password son: -**Usuário: {{contact.candidacy.user.username}} -**Senha(que você pode mudar uma vez dentro da página): {{contact.initial_password}} -{% else %} -Para se comprometer com esta e outras propostas, você deve entrar em https://{{site.domain}}{% url 'backend_candidate:candidate_auth_login' %} com seu usuário: -{{contact.candidacy.user.username}}. -{% endif %} - -{% endwith %} -Se você quiser que usemos outro endereço de e-mail para se comunicar com você, ou se tiver alguma dúvida, responda a este mesmo e-mail. - -Junte-se à Rio por Inteiro! -{% mail_signature_txt %} diff --git a/rioxinteiro/templates/mails/suggestions_for_candidates/subject.txt b/rioxinteiro/templates/mails/suggestions_for_candidates/subject.txt deleted file mode 100644 index 8a839344..00000000 --- a/rioxinteiro/templates/mails/suggestions_for_candidates/subject.txt +++ /dev/null @@ -1 +0,0 @@ -Comprometa-se com a cidadania e participe de Rio Por Inteiro! diff --git a/rioxinteiro/templates/material_ciudadano.html b/rioxinteiro/templates/material_ciudadano.html deleted file mode 100644 index d4e8bce6..00000000 --- a/rioxinteiro/templates/material_ciudadano.html +++ /dev/null @@ -1,123 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} -{% block everything %} -{% load staticfiles %} -{% load thumbnail %} - - - - Compartilhe nas redes! - -
-
-

Descomplica Política

-
-
-
-
-
-
-
-
-
- - - -
-
-
-
- - - -
-
-
-
- - - -
-
-
-
- - - -
-
-
-
- - - -
-
-
-
- - - -
-
-
-
-
- -
-
-
-

Material Cidadão

-

Faça o download e imprima os materiais necessários para criar propostas, causar impacto e saber tudo o que é necessário sobre essa eleição.

-
-
-
-
-
-
-
-
-
-

Guia para criação de propostas

- -

Junte-se à sua comunidade para fazer propostas em conjunto para que as candidaturas nos escutem. Neste manual você encontrará tudo o que precisa para preparar o seu Encontro Cidadão e passo a passo para desenvolver uma proposta.

-
- -
-
- -
-
-
-

Manual de mobilização e ativismo

- -

Quanto mais apoio, mais sua proposta chama atenção das candidaturas. Veja aqui formas de aumentar o interesse pela sua ideia!

-
- -
-
-
-
-
-{% endblock everything %} diff --git a/rioxinteiro/templates/medianaranja2/base.html b/rioxinteiro/templates/medianaranja2/base.html deleted file mode 100644 index c3f08916..00000000 --- a/rioxinteiro/templates/medianaranja2/base.html +++ /dev/null @@ -1,50 +0,0 @@ -{% extends "base.html" %} -{% load staticfiles %} -{% load i18n %} -{% load thumbnail %} -{% load votainteligente_extras %} -{% load cache %} -{% load bootstrap3 %} -{% block title %}- Tem Compromisso{% endblock title %} - -{% block ogp %} - - - - - - - - - - - - - - - {% endblock ogp %} - -{% block everything %} -
-
-
-
- TemCompromiso -
-
-

Estamos entrando na reta final de um dos momentos mais importantes do segundo semestre de 2018: você na urna!

-

Já parou pra pensar quais candidatos (as) estão de fato comprometidos em diminuir desigualdades e aumentar oportunidades na metrópole do rio? Tarefa nada fácil, né? Por isso, juntamos parte das nossas forças aqui!

-

Depois de incentivar você a criar propostas para a cidade a partir da sua própria experiência com o território, criamos um jogo de perguntas para te conectar com as candidaturas que mais se relacionam com temas relevantes pra você!

-
-
-
-
-
-
- {% block questions %} - {% endblock questions %} -
-
-
-
-{% endblock everything %} diff --git a/rioxinteiro/templates/medianaranja2/comparte_resultado.html b/rioxinteiro/templates/medianaranja2/comparte_resultado.html deleted file mode 100644 index ff111c85..00000000 --- a/rioxinteiro/templates/medianaranja2/comparte_resultado.html +++ /dev/null @@ -1,54 +0,0 @@ -{% extends "base.html" %} -{% load staticfiles %} -{% load i18n %} -{% load thumbnail %} -{% load votainteligente_extras %} -{% load cache %} -{% load bootstrap3 %} -{% block title %}- {% blocktrans with step_number=wizard.steps.step1 %} -1/2 Naranja - Paso {{step_number}} -{% endblocktrans %}{% endblock title %} - -{% block ogp %} - - - - - - - - - - - - - - {% endblock ogp %} - - -{% block content %} -
-

{% trans "Declaración pública" %}

-

- Você também pode saber quem #TemCompromisso. -

-
-
- -
-
- - {{object.object.get_name}} - -
    -
  • -
  • -
-
-
- -
-
-
- -{% endblock content %} diff --git a/rioxinteiro/templates/medianaranja2/paso_2_proposals_list.html b/rioxinteiro/templates/medianaranja2/paso_2_proposals_list.html deleted file mode 100644 index 47c539e8..00000000 --- a/rioxinteiro/templates/medianaranja2/paso_2_proposals_list.html +++ /dev/null @@ -1,49 +0,0 @@ -{% extends "medianaranja2/base.html" %} -{% load staticfiles %} -{% load i18n %} -{% load thumbnail %} -{% load votainteligente_extras %} -{% load cache %} -{% load bootstrap3 %} -{% block body_class %}navbar_invisible{% endblock body_class %} -{% block questions %} - -
- {% csrf_token %} - {{ wizard.form.media }} - {{ wizard.management_form }} - - - {% for choice_id, choice_label in wizard.form.proposals.field.choices %} -
- {{choice_id|get_classification_from_str}} - - {% for k,v in choice_label %} -
- - {% endfor %} -
- {% endfor %} - - - {% if wizard.steps.prev %} - - {% endif %} - -
- -{% endblock questions %} diff --git a/rioxinteiro/templates/medianaranja2/resultado.html b/rioxinteiro/templates/medianaranja2/resultado.html deleted file mode 100644 index f4f29cfd..00000000 --- a/rioxinteiro/templates/medianaranja2/resultado.html +++ /dev/null @@ -1,104 +0,0 @@ -{% extends "medianaranja2/base.html" %} -{% load staticfiles %} -{% load i18n %} -{% load thumbnail %} -{% load votainteligente_extras %} -{% load cache %} -{% load bootstrap3 %} -{% block title %}- Tem Compromisso{% endblock title %} - - - -{% block paso %} -

{% trans "Resultados" %}

-{% endblock paso %} - -{% block questions %} -{% if organizations.exists %} -
-

Suas prioridades no #TemCompromisso são conduzidas diariamente por essas organizações da Rio por Inteiro. -Convidamos você a conhecê-las e se juntar às causas que te interessam!

-

{% trans "Organizaciones" %}

- {% for o in organizations.all %} - {% cache 83000 organization_in_result_ o.id %} -
- {% if o.logo_small %} - {{o.title}} - {% endif %} -
    - {% if o.org_url %} -
  • - {% endif %} - {% if o.facebook %} -
  • - {% endif %} - {% if o.twitter %} -
  • - {% endif %} - {% if o.instagram %} -
  • - {% endif %} - {% if o.rss_url %} -
  • - {% endif %} -
-
-
- {% csrf_token %} - - - - -
-
-
- {% endcache %} - {% endfor %} -
-
-{% endif %} - - -{% for election_result in results %} -
-

{% blocktrans with election_name=election_result.election.name %} - Suas candidaturas para {{election_name}} são - {% endblocktrans %}

- {% for candidate_result in election_result.candidates %} -
-
{{ candidate_result.value|floatformat }}%
- {% cache 83000 candidate_result_numero candidate_result.candidate.id %} - - {% if candidate_result.candidate.image %} - {% thumbnail candidate_result.candidate.image "100x100" crop="center" as im %} - {{candidate_result.candidate.name}} - {% endthumbnail %} - {% else %} - {{candidate_result.candidate.name}} - {% endif %} - -

{{candidate_result.candidate}}

- {% get_personal_data candidate=candidate_result.candidate personal_data='Numero' as numero %} - {% if numero.value %} -
{{numero.value}}
- {% endif %} - {% endcache %} - -
-
- {% csrf_token %} - - - - - -
-
-
- {% endfor %} -
-
-{% endfor %} - -{% trans "Juega de nuevo" %} -{% endblock questions %} diff --git a/rioxinteiro/templates/organization_profiles/ayuranos.html b/rioxinteiro/templates/organization_profiles/ayuranos.html deleted file mode 100644 index c45031aa..00000000 --- a/rioxinteiro/templates/organization_profiles/ayuranos.html +++ /dev/null @@ -1,53 +0,0 @@ -{% extends "base.html" %} -{% load staticfiles %} -{% load i18n %} -{% load thumbnail %} -{% load votainteligente_extras %} -{% load cache %} - -{% block title %}- {% trans "Ayúdanos" %}{% endblock title %} - -{% block navbar %} -{% endblock navbar %} - -{% block content %} -{% cache 60 ayudanos object.id %} -
-

{% trans "¡Pidámosle a las candidaturas que se comprometan con nuestras propuestas!" %}

-

{% trans "Utiliza Ctrl+f (Cmd+f) para buscar tu distrito o tu candidato." %}

-
- - - - - - - - - - - {% with object.twitter|extract_twitter_username_without_at as twitter_org %} - {% with url="https://votainteligente.cl"|add:object.get_absolute_url|add:"#propuestas" %} - {% for candidate in candidates %} - - - - - - - {% endfor %} - {% endwith %} - {% endwith %} - -
{% trans "Twiteale!" %}{% trans "Candidato" %}{% trans "Pacto" %}{% trans "Partido" %}
- {% if candidate.twitter %} - {% include 'twitter_poking_button.html' with url=url via=twitter_org texto=config.AYUDANOS_ORGANIZACIONES twitter=candidate.twitter.value button_text=config.AYUDANOS_ORGANIZACIONES %} - {% else %} - {% include 'twitter_poking_button.html' with url=url via=twitter_org texto=config.AYUDANOS_ORGANIZACIONES twitter="@A_TU_CANDIDATO" button_text=config.AYUDANOS_ORGANIZACIONES %} - {% endif %} - {{ candidate }}{% get_personal_data candidate=candidate personal_data='Pacto' as pacto %}{{pacto.value}}{% get_personal_data candidate=candidate personal_data='Partido' as partido %}{{partido.value}}
-
-
-
-{% endcache %} -{% endblock content %} diff --git a/rioxinteiro/templates/organization_profiles/base.html b/rioxinteiro/templates/organization_profiles/base.html deleted file mode 100644 index c4670fd2..00000000 --- a/rioxinteiro/templates/organization_profiles/base.html +++ /dev/null @@ -1,90 +0,0 @@ - -{% load staticfiles %} -{% load flatpages %} -{% load sass_tags %} -{% load i18n %} -{% load thumbnail %} -{% load votainteligente_extras %} - - -{% include '_head_organizations.html' %} - - {% block extra_css %} - {% endblock extra_css %} - - - -
- {% include '_navbar.html' %} - {% block everything %} - {% endblock everything %} - -
- {% include '_footer.html' %} - - - - - - - - - - {% block extra_scripts %} - {% endblock extra_scripts %} - - - - - diff --git a/rioxinteiro/templates/organization_profiles/detail.html b/rioxinteiro/templates/organization_profiles/detail.html deleted file mode 100644 index 81ab093b..00000000 --- a/rioxinteiro/templates/organization_profiles/detail.html +++ /dev/null @@ -1,124 +0,0 @@ -{% extends "organization_profiles/base.html" %} -{% load staticfiles %} -{% load i18n %} -{% load thumbnail %} -{% load votainteligente_extras %} -{% load cache %} - -{% block title %}{% if title %}{{title}}{% else %}{{organization}}{% endif %}{% endblock title %} - -{% block everything %} - -
-
-
- {% if logo_small %} - - {% endif %} - -
-
-
- -
-
-

{% if title %}{{title}}{% else %}{{organization}}{% endif %}

-

{{sub_title}}

-
-
- -
-
- - - - -
- - -
-
- - {% if proposals %} -
- - {% for proposal in proposals %} -
- {% display_proposal_card proposal %} -
- {% endfor %} -
- {% else %} - {% if is_owner %} -

-{% blocktrans with var1 as var2 %} -Comienza a generar tus propuestas en el siguiente enlace -{% endblocktrans %} - - {% endif %} - {% endif %} - {% if sponsorships %} - -
- {% for sponsorship in sponsorships %} -
- {% display_proposal_card sponsorship %} -
- {% endfor %} -
- {% endif %} -
-
-
- -{% endblock everything %} diff --git a/rioxinteiro/templates/organization_profiles/index.html b/rioxinteiro/templates/organization_profiles/index.html deleted file mode 100644 index 97ee46ad..00000000 --- a/rioxinteiro/templates/organization_profiles/index.html +++ /dev/null @@ -1,17 +0,0 @@ -{% extends "base.html" %} -{% load staticfiles %} -{% load i18n %} -{% load thumbnail %} -{% load votainteligente_extras %} -{% load cache %} - -{% block title %}- {% trans "Ayúdanos" %}{% endblock title %} - -{% block navbar %} -{% endblock navbar %} - -{% block content %} -
-{% organization_logos %} -
-{% endblock content %} diff --git a/rioxinteiro/templates/popular_proposal/_likers_candidatos.html b/rioxinteiro/templates/popular_proposal/_likers_candidatos.html deleted file mode 100644 index 15a39605..00000000 --- a/rioxinteiro/templates/popular_proposal/_likers_candidatos.html +++ /dev/null @@ -1,33 +0,0 @@ -{% load staticfiles %} -{% load votainteligente_extras %} -{% load i18n %} -{% load thumbnail %} -{% load cache %} - -{% cache 300 presidentes_comprometidos cargo proposal.id %} -{% commiters_by_election_position proposal cargo as commitments %} - {% if commitments.all %} -
- - -{% endif %} -{% endcache %} diff --git a/rioxinteiro/templates/popular_proposal/detail.html b/rioxinteiro/templates/popular_proposal/detail.html deleted file mode 100644 index 3292caa8..00000000 --- a/rioxinteiro/templates/popular_proposal/detail.html +++ /dev/null @@ -1,299 +0,0 @@ -{% extends layout %} -{% load votainteligente_extras %} -{% load staticfiles %} -{% load i18n %} -{% load thumbnail %} -{% load bootstrap3 %} -{% block extrajs %} -{% load ogp_tags %} - - -$(function(){ - $('.loadFromUrl').on('show.bs.modal', function (event) { - var anchor = $(event.relatedTarget) // Button that triggered the modal - var modal = $(this) - var body = modal.find('.modal-body'); - body.load(anchor.data('url')); - }) - $('[data-toggle="tooltip"]').tooltip(); -}); -{% endblock extrajs %} - -{% block title %}- {% trans "Propuesta" %} - {{popular_proposal.title}}{% endblock title%} - -{% block ogp %} - {% render_ogp popular_proposal %} - - - - - - - - -{% endblock ogp %} - -{% block everything %} - -{% url 'popular_proposals:embedded_detail' slug=popular_proposal.slug as embedded_url%} - - - - -{% if popular_proposal.proposer == user %} -
-
-
-
- {% url 'popular_proposals:citizen_update' slug=popular_proposal.slug as update_proposal_url %} -

{% blocktrans with user=user %}Esta es tu propuesta {{user}}, ¿quieres añadir antecedentes a esta propuesta?{% endblocktrans %}

-
-
-
-
-{% endif%} - -
-
-
-
- {{popular_proposal.get_classification}} -

{% blocktrans with proposal_id=popular_proposal.id %} - Propuesta nº{{proposal_id}} - {% endblocktrans %}

- - {% if popular_proposal.is_local_meeting %} - {% trans - {% endif %} - -

{{popular_proposal.title}}

-

- - {% blocktrans %} - Esta es una propuesta de - {% endblocktrans %} - {% get_proposal_author popular_proposal %} - - -

-
-
-
- -
-
    - -
  • - -
  • -
  • - -
  • -
  • - -
  • -
-
- - - - {{popular_proposal.detail_as_html}} - - - {% if popular_proposal.background %} - - - - {% endif %} - - -
-
- {% include 'popular_proposal/_likers_candidatos.html' with proposal=popular_proposal cargo='Governador'%} - {% include 'popular_proposal/_likers_candidatos.html' with proposal=popular_proposal cargo='Senador'%} - {% include 'popular_proposal/_likers_candidatos.html' with proposal=popular_proposal cargo='Deputado Federal'%} - {% include 'popular_proposal/_likers_candidatos.html' with proposal=popular_proposal cargo='Deputado Estadual'%} -
-
- - - - - -

- {% trans "Si te gustó ¡apóyala y compártela! Así todos/as tendremos voz en las elecciones de este año." %} -
- {% blocktrans %} - Si por el contrario, encuentras que esta propuesta viola los "Términos y Condiciones" para la creación de una propuesta, ayúdanos reportando esta propuesta. - {% endblocktrans %} - -

- - - - - - -
- - -
-
-
- - - -{% with "supportProposal"|add:popular_proposal.slug as modalid %} - {% trans "Apoya una propuesta" as support_proposal_modal_title %} - {% include 'modal_like_proposal.html' with modalId=modalid title=support_proposal_modal_title url=like_this_proposal_url next_url=request.path proposal=popular_proposal %} -{% endwith %} - -{% endblock everything %} - -{% block extrafooter %} -{% endblock extrafooter %} - -{% block analytics %} -{% endblock analytics %} diff --git a/rioxinteiro/templates/popular_proposal/extra_card.html b/rioxinteiro/templates/popular_proposal/extra_card.html deleted file mode 100644 index de8ebdf2..00000000 --- a/rioxinteiro/templates/popular_proposal/extra_card.html +++ /dev/null @@ -1,15 +0,0 @@ - -{% if proposal.proposer.username == 'CasaFluminense' %} -
-
- Agenda Rio 2030 -
-
-{% else %} -{% if proposal.ribbon_text %} -
-
-{{proposal.ribbon_text}} -
-
-{% endif %}{% endif %} diff --git a/rioxinteiro/templates/popular_proposal/wizard/form_step_base.html b/rioxinteiro/templates/popular_proposal/wizard/form_step_base.html deleted file mode 100644 index e1be803c..00000000 --- a/rioxinteiro/templates/popular_proposal/wizard/form_step_base.html +++ /dev/null @@ -1,65 +0,0 @@ -{% extends "base.html" %} -{% load static %} -{% load i18n %} -{% load bootstrap3 %} -{% load votainteligente_extras%} - -{% block head %} -{{ wizard.form.media }} -{% endblock %} - -{% block title %} -- {% trans "Creación de Propuesta" %} - {% blocktrans with step_number=wizard.steps.step1 %}Paso {{step_number}}{% endblocktrans %} -{% endblock title %} - -{% block content %} -
-
-
- {% for i in wizard.steps.count|times %} -
- {% trans "Paso" %} -

{{i|add:1}}

-
- {% endfor %} -
-
-{% block messages %} -{% if form.message %} - -{% endif %} - -{% endblock messages %} - -
-

{% trans "Creando una propuesta" %}

-

{% if form.step_title %}{{form.step_title}}{% endif %}

-
- -{% if form.explanation_template %} -
- {% include form.explanation_template %} -
-{% endif %} -
-
- {% block form_content %} - {% endblock form_content %} -
- {% include 'popular_proposal/wizard/_previous_buttons.html' with wizard=wizard %} -
- -
-
-
-
- - -
-
-
- -{% endblock content %} diff --git a/rioxinteiro/templates/popular_proposal/wizard/manual-herramientas-activismo_link.html b/rioxinteiro/templates/popular_proposal/wizard/manual-herramientas-activismo_link.html deleted file mode 100644 index 967db1c9..00000000 --- a/rioxinteiro/templates/popular_proposal/wizard/manual-herramientas-activismo_link.html +++ /dev/null @@ -1,3 +0,0 @@ -{% load static %} -{% load i18n %} -{% trans "Descarga el Manual de herramientas de activismo" %} diff --git a/rioxinteiro/templates/que_es.html b/rioxinteiro/templates/que_es.html deleted file mode 100644 index 7cdb4c0d..00000000 --- a/rioxinteiro/templates/que_es.html +++ /dev/null @@ -1,50 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} -{% load markdown_deux_tags %} -{% block everything %} -{% load staticfiles %} - -
-
-

O que é a Rio por Inteiro?

-
-
-
-
-
- -{% markdown %} -Rio Por Inteiro é um projeto desenvolvido pela [Cidadania Inteligente](https://cidadaniainteligente.org) e pela [Casa Fluminense](https://casafluminense.org.br/) que busca mudar a forma como as eleições são vivenciadas no estado do Rio de Janeiro. Queremos possibilitar mais participação popular nas eleições de 2018 para que sejam as cidadãs e os cidadãos protagonistas desse processo. - -No ambiente da plataforma é possível para qualquer pessoa, organização, coletivo ou grupo gerar suas próprias propostas com os temas que mais lhes preocupam ou inquietam. A partir disso, faremos com que estas demandas cheguem às candidaturas, que poderão se comprometer em cumpri-las no caso de serem eleitos/as. - -Uma vez publicadas, é possível conhecer e endossar as propostas através de um “APOIO”. Além disso, organizações que participam da plataforma podem apoiar propostas de outras pessoas ou organizações. - -O movimento Rio Por Inteiro incentiva que as propostas sejam construídas coletivamente. Para isso, criamos uma Metodologia do Encontro para que a criação das propostas seja um espaço de convivência e diálogo entre pessoas, amigos, vizinhos e comunidades. Toda a vizinhança, sindicatos, grêmios, coletivos e organizações de todo tipo estão convidados a fazer suas propostas e organizar encontros para debater em conjunto sobre qual é a convivência metropolitana que queremos. ([Aqui](https://rioporinteiro.org.br/encontro_cidadao/) você pode encontrar informação de como fazer seu próprio encontro). - -As eleições são o momento em que se define o futuro das pessoas e quais serão as políticas públicas que irão atendê-las. É fundamental que toda a cidadania seja ouvida e opine nesse processo. O voto não é a única forma de participar, a partir do movimento Rio Por Inteiro podemos ir mais longe, criando propostas coletivas, compartilhando com sua rede e apoiando as proposta que mais gosta, para que juntos façamos sentir, mais forte do que nunca, a voz da cidadania nas eleições que são nossas. - -{% endmarkdown %} - - - - - - - - - - -
-
-
-
- -
-
-
-
-
- - -{% endblock everything %} diff --git a/rioxinteiro/templates/registration/activation_email.html b/rioxinteiro/templates/registration/activation_email.html deleted file mode 100644 index 12cdb0cc..00000000 --- a/rioxinteiro/templates/registration/activation_email.html +++ /dev/null @@ -1,23 +0,0 @@ -{% load i18n %} -{% load bootstrap3 %} -{% load votainteligente_extras %} -{% comment %} -This template is used for the html alternative of the activation email -if you use a django-registration backend that looks for it. e.g. -https://github.com/huseyinyilmaz/django-registration-extended-backend -{% endcomment %} -{% url 'registration_activate' activation_key as activation_key_url %} - -

Inscrições para o RioXInteiro

-

-Olá, você (ou alguém que diz ser você) tentou registrar uma conta no RioXInteiro -{{ site.name }}
-Se não foi você, por favor, ignore este e-mail e seu endereço será removido de nossos registros. -

-

Para ativar sua conta em RioXInteiro, por favor clique no seguinte link antes de -{{ expiration_days }} días:
-https://{{ sitedomain }}{{ activation_key_url }} -

- -{% mail_signature_html %} - diff --git a/rioxinteiro/templates/registration/activation_email.txt b/rioxinteiro/templates/registration/activation_email.txt deleted file mode 100644 index 5e05d9fc..00000000 --- a/rioxinteiro/templates/registration/activation_email.txt +++ /dev/null @@ -1,12 +0,0 @@ -{% load i18n %} -{% load bootstrap3 %} -{% load votainteligente_extras %} -{% url 'registration_activate' activation_key as activation_key_url%} -Olá, você (ou alguém que diz ser você) tentou registrar uma conta no RioXInteiro. -Se não foi você, por favor, ignore este e-mail e seu endereço será removido de nossos registros. - - -Para ativar sua conta em RioXInteiro, por favor clique no seguinte link antes de -{{ expiration_days }} dias: -https://{{ site.domain }}{{ activation_key_url }} -{% mail_signature_txt %} diff --git a/rioxinteiro/templates/registration/activation_email_subject.txt b/rioxinteiro/templates/registration/activation_email_subject.txt deleted file mode 100644 index 6088179f..00000000 --- a/rioxinteiro/templates/registration/activation_email_subject.txt +++ /dev/null @@ -1 +0,0 @@ -Ativação de sua conta no RioXInteiro diff --git a/rioxinteiro/templates/registration/password_reset_email.html b/rioxinteiro/templates/registration/password_reset_email.html deleted file mode 100644 index 15b9d30b..00000000 --- a/rioxinteiro/templates/registration/password_reset_email.html +++ /dev/null @@ -1,15 +0,0 @@ -{% load i18n %}{% load votainteligente_extras %} -{% load bootstrap3 %}Olá {% if user.get_full_name %}{{ user.get_full_name }}{% else %}{{ user }}{% endif %}:
- -

Você está recebendo este e-mail porque você (ou alguém fingindo ser você) solicitou -que sua senha fosse redefinida no site rioxinteiro.

-

Se você não deseja redefinir sua senha, ignore esta mensagem.

- -

Para redefinir sua senha, clique no link a seguir ou copie e cole no seu navegador -da Web:

-

-{{ protocol }}://{{ domain }}{% url 'auth_password_reset_confirm' uid token %} -

-

Seu nome de usuário, caso você tenha esquecido: {{ user.username }}

- -{% mail_signature_html %} diff --git a/rioxinteiro/templates/registration/password_reset_email.txt b/rioxinteiro/templates/registration/password_reset_email.txt deleted file mode 100644 index ee86b695..00000000 --- a/rioxinteiro/templates/registration/password_reset_email.txt +++ /dev/null @@ -1,15 +0,0 @@ -{% load i18n %}{% load votainteligente_extras %} -{% load bootstrap3 %}Olá {% if user.get_full_name %}{{ user.get_full_name }}{% else %}{{ user }}{% endif %}, - -Você está recebendo este e-mail porque você (ou alguém fingindo ser você) solicitou -que sua senha fosse redefinida no site rioxinteiro. -Se você não deseja redefinir sua senha, ignore esta mensagem. - -Para redefinir sua senha, clique no link a seguir ou copie e cole no seu navegador -da Web: - -{{ protocol }}://{{ domain }}{% url 'auth_password_reset_confirm' uid token %} - -Seu nome de usuário, caso você tenha esquecido: {{ user.username }} - -{% mail_signature_txt %} diff --git a/rioxinteiro/templates/terms_and_conditions/for_all_users.md b/rioxinteiro/templates/terms_and_conditions/for_all_users.md deleted file mode 100644 index e69de29b..00000000 diff --git a/rioxinteiro/templates/terms_and_conditions/org_supporting_a_proposal.md b/rioxinteiro/templates/terms_and_conditions/org_supporting_a_proposal.md deleted file mode 100644 index 17c6f4c2..00000000 --- a/rioxinteiro/templates/terms_and_conditions/org_supporting_a_proposal.md +++ /dev/null @@ -1,8 +0,0 @@ -Opa **{{organization}}**!: - -Você quer apoiar a proposta **{{proposal}}** de **{{proposer}}**, isso tem algumas implicações: - -* No momento de pressionar o botão abaixo, um email será enviado para **{{proposer}}**, que criou esta proposta. Nela, seus dados serão compartilhados para que possam continuar a ser coordenados. -* No perfil da sua organização, parece que você está apoiando essa proposta. -* Quando qualquer cidadão revisa essa proposta, eles podem ver que {{organization}} está apoiando a ela. -* Você NÃO será capaz de tirar o suporte para esta proposta, a menos que você fale com a equipe do RioPorInteiro. diff --git a/rioxinteiro/templates/terms_and_conditions/organizations_register.html b/rioxinteiro/templates/terms_and_conditions/organizations_register.html deleted file mode 100644 index 44f95cec..00000000 --- a/rioxinteiro/templates/terms_and_conditions/organizations_register.html +++ /dev/null @@ -1,19 +0,0 @@ -{% load i18n %} -

{% trans "Términos y Condiciones" %}

-

-{% blocktrans %} -

En la Fundación Ciudadano Inteligente creemos en el derecho a ser diferentes. Por esto, las propuestas que inciten al odio o discriminación por razones políticas, sexuales, de credo, género, étnicas o raciales, serán rechazadas inmediatamente.

-

Este es un espacio exclusivo para propuestas ciudadanas. Las candidatas/os pueden subir sus programas y propuestas en sus perfiles.

-

Las propuestas tampoco pueden:

-
    -
  • Promover causas de carácter privado, y no público.
  • -
  • Promover acciones que escapen a las facultades del Gobierno o Parlamento.
  • -
  • Promover causas particulares y no de interés colectivo.
  • -
  • Escaparse de los principios democráticos. En Ciudadano Inteligente creemos que la base de la democracia es la creencia de que todos los ciudadanos deben tener derecho al mismo nivel de incidencia sobre la decisiones de nuestra comunidad.
  • -
-

Nos autorizas para que te notifiquemos cuando:

-
    -
  • Una organización quiera apoyar tu propuesta.
  • -
  • Un candidato se comprometa con tu propuesta.
  • -
-{% endblocktrans %} diff --git a/rioxinteiro/tests.py b/rioxinteiro/tests.py deleted file mode 100644 index 58721f73..00000000 --- a/rioxinteiro/tests.py +++ /dev/null @@ -1,79 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.test import TestCase, override_settings -from rioxinteiro.tse_importer import TSEProcessorMixin -from django.core.management import call_command -from elections.models import Candidate, Election, Area -from constance.test import override_config -from django.core.validators import validate_email -validators = { - 'mail': validate_email -} - -area_settings = { - 18:'slug', - 17:'area_name', - 23: 'election_name', -} -candidate_settings = { - 0: 'identifier', - 3: 'nome_completo', - 2: 'number', - 6: 'cpf', - 1: 'nome', - 12: 'job', - 5: 'date_of_birth', - 4: 'gender', - 11: 'education', - 8: 'civil_status', - 9: 'race', - 28: 'mail', - 21: 'img', - -} -partido_settings = { - 25: 'number', - 27: 'name', - 26: 'initials' -} -coaligacao_settings = { - 22: "name", - 22: "partidos_coaligacao", - 22: "number" - -} - - -_TSE_IMPORTER_CONF = { - 'area': area_settings, - 'candidate': candidate_settings, - 'partido': partido_settings, - 'coaligacao': coaligacao_settings -} - -example_data = [] - -@override_config(DEFAULT_AREA='argentina') -class TSEParser(TestCase): - def setUp(self): - super(TSEParser, self).setUp() - argentina = Area.objects.create(name=u'Argentina', id='argentina') - Candidate.objects.all().delete() - Election.objects.all().delete() - - @override_settings(TSE_IMPORTER_CONF=_TSE_IMPORTER_CONF) - def test_calling_command(self): - call_command('rio_import_from_tse', './rioxinteiro/fixtures/candidatos.csv') - self.assertTrue(Candidate.objects.all()) - self.assertTrue(Election.objects.all()) - # @override_settings(FILTERABLE_AREAS_TYPE=['state',]) - # def test_creates_elements(self): - # rj_area = Area.objects.get(identifier='RJ') - - # class JustForNowProcessor(TSEProcessorMixin): - # pass - # processor = JustForNowProcessor() - # result = processor.do_something(self.data) - # print result - # self.fail() \ No newline at end of file diff --git a/rioxinteiro/tse_importer.py b/rioxinteiro/tse_importer.py deleted file mode 100644 index cb99f83d..00000000 --- a/rioxinteiro/tse_importer.py +++ /dev/null @@ -1,54 +0,0 @@ -# coding=utf-8 -from tse_data_importer.csv_reader import CsvReader -from tse_data_importer.importer import RowsReaderAdapter -from django.conf import settings -from datetime import datetime -from django.core.validators import validate_email -from constance import config -from elections.models import Area, Election, Candidate, PersonalData -from popolo.models import Identifier -from backend_candidate.models import CandidacyContact - - -class TSEProcessorMixin(object): - def process_candidate(self, candidate_dict, election, partido_dict, coaligacao_dict, email_repeated): - # try: - # data_de_nascimento = datetime.strptime(candidate_dict['date_of_birth'], "%d/%m/%Y").date() - # except: - # data_de_nascimento = None - # if Candidate.objects.filter(cpf=candidate_dict['cpf']).exists(): - # self.output_logger_func("CANDIDATE EXISTENTE DETECTADO CPF:" + candidate_dict['cpf'] + " =====================================>") - - candidate, created = Candidate.objects.get_or_create(name=candidate_dict['nome']) - candidate.identifiers.add(Identifier.objects.create(identifier=candidate_dict['identifier'])) - candidate.image = candidate_dict['img'] - PersonalData.objects.create(label=u'Partido', - value=partido_dict['initials'], - candidate=candidate) - PersonalData.objects.create(label=u'Coligação', - value=partido_dict['initials'], - candidate=candidate) - candidate.save() - if not email_repeated and candidate_dict['mail'] is not None: - CandidacyContact.objects.create(candidate=candidate, - mail= candidate_dict['mail']) - else: - print u"EMAIL REPETIDO {email} para candidato {candidato} Contato no creado".format(email=candidate_dict['mail'], - candidato=candidate.name) - if 'mail2' in candidate_dict.keys() and candidate_dict['mail2'] is not None: - - CandidacyContact.objects.get_or_create(candidate=candidate, - mail=candidate_dict['mail2']) - election.candidates.add(candidate) - return candidate - - def do_something(self, row): - result = {} - area = Area.objects.get(id=config.DEFAULT_AREA) - election, created = area.elections.get_or_create(name=row['area']['election_name'], position=row['area']['election_name']) - self.process_candidate(row['candidate'], election, row['partido'], row['coaligacao'], row['email_repeated']) - return result - - -class TSEProcessor(TSEProcessorMixin, CsvReader): - pass diff --git a/rioxinteiro/urls.py b/rioxinteiro/urls.py deleted file mode 100644 index f754d196..00000000 --- a/rioxinteiro/urls.py +++ /dev/null @@ -1,9 +0,0 @@ -from django.conf.urls import include, url -from django.views.generic import TemplateView - - -urlpatterns = [ - url(r'^interes_candidato/$', - TemplateView.as_view(template_name='registro_interes_candidato.html'), - name='interes_candidato'), -] diff --git a/scripts_and_data/script_for_data_in_merepresenta.py b/scripts_and_data/script_for_data_in_merepresenta.py deleted file mode 100644 index c89637b0..00000000 --- a/scripts_and_data/script_for_data_in_merepresenta.py +++ /dev/null @@ -1,117 +0,0 @@ -estados = [{"name": u"Acre", 'identifier': u"AC"}, -{"name": u"Alagoas", 'identifier': u"AL"}, -{"name": u"Amapá", 'identifier': u"AP"}, -{"name": u"Amazonas", 'identifier': u"AM"}, -{"name": u"Bahía", 'identifier': u"BA"}, -{"name": u"Ceará", 'identifier': u"CE"}, -{"name": u"Distrito Federal", 'identifier': u"DF"}, -{"name": u"Espírito Santo", 'identifier': u"ES"}, -{"name": u"Goiás", 'identifier': u"GO"}, -{"name": u"Maranhão", 'identifier': u"MA"}, -{"name": u"Mato Grosso", 'identifier': u"MT"}, -{"name": u"Mato Grosso del Sur", 'identifier': u"MS"}, -{"name": u"Minas Gerais", 'identifier': u"MG"}, -{"name": u"Pará", 'identifier': u"PA"}, -{"name": u"Paraíba", 'identifier': u"PB"}, -{"name": u"Paraná", 'identifier': u"PR"}, -{"name": u"Pernambuco", 'identifier': u"PE"}, -{"name": u"Piauí", 'identifier': u"PI"}, -{"name": u"Río de Janeiro", 'identifier': u"RJ"}, -{"name": u"Río Grande del Norte", 'identifier': u"RN"}, -{"name": u"Río Grande del Sur", 'identifier': u"RS"}, -{"name": u"Rondônia", 'identifier': u"RO"}, -{"name": u"Roraima", 'identifier': u"RR"}, -{"name": u"Santa Catarina", 'identifier': u"SC"}, -{"name": u"São Paulo", 'identifier': u"SP"}, -{"name": u"Sergipe", 'identifier': u"SE"}, -{"name": u"Tocantins", 'identifier': u"TO"}] - - -from elections.models import Topic, QuestionCategory - -from elections.models import Area, Election -brasil = Area.objects.create(name="Brasil", identifier="BR", classification="country") -# c, created = Election.objects.get_or_create(name="Presidente do Brasil", area=brasil, position=u"Presidente") -for e in estados: - - a, created = Area.objects.get_or_create(name=e['name'], identifier=e['identifier'], classification=u'state', parent=brasil) - # g, created = Election.objects.get_or_create(name="Gobernador de " + e['name'], area=a, position=u"Gobernador/a") - d_e, created = Election.objects.get_or_create(name="Deputado Estadual", area=a, position=u'Diputada/o Estadual') - d_f, created = Election.objects.get_or_create(name="Deputado Federal", area=a, position=u'Diputada/o Federal') - s_f, created = Election.objects.get_or_create(name="Senado Federal", area=a, position=u'Senador/a Federal') - elections = [ d_e, d_f, s_f] - for election in elections: - i = 0 - while i < 3: - i += 1 - n = u"C n" + unicode(i) + u"p" + election.name - cand, created = Candidate.objects.get_or_create(name=n) - election.candidates.add(cand) - - -ps = [{"name": u"Adoção de crianças por famílias LGBTs."}, -{"name": u"Uso de banheiros por pessoas travestis e transexuais de acordo com sua identidade de gênero."}, -{"name": u"Cota de 50% para mulheres no Legislativo, garantindo representatividade étnico-racial e respeito à identidade de gênero autodeclarada."}, -{"name": u"Promoção de igualdade de gênero e raça e o respeito às orientações sexuais e identidades de gênero nas escolas."}, -{"name": u"Cotas raciais e ações afirmativas para a população negra."}, -{"name": u"Proibição da realização de cultos e o uso de símbolos religiosos em repartições públicas."}, -{"name": u"Impedimento de ocupação de cargos públicos por homens que tenham agredido mulheres."}, -{"name": u"Descriminalização e legalização do aborto."}, -{"name": u"Criminalização da lesbofobia, homofobia, transfobia e bifobia."}, -{"name": u"Desmilitarização da polícia."}, -{"name": u"Desapropriação de imóveis abandonados para criação de moradias de interesse social."}, -{"name": u"Licenciamento ambiental que proteja populações vulneráveis e áreas atingidas por grandes empreendimentos."}, -{"name": u"Abertura de maiores espaços de participação direta da população na definição do orçamento municipal."}, -{"name": u"Quebra dos contratos com empresas de mobilidade que não têm auditoria de custos e uma gestão transparente."}] - - - -from merepresenta.models import MeRepresentaPopularProposal - -site, created = Site.objects.get_or_create(name="#MeRepresenta", domain="merepresenta.127.0.0.1.xip.io:8000") -CustomSite.objects.get_or_create(site=site, urlconf="merepresenta.stand_alone_urls") -# proposer, created = User.objects.get_or_create(username="merepresenta", email="merepresenta@merepresenta.org") -cat, created = QuestionCategory.objects.get_or_create(name=u"#Merepresenta") -topics = [] -for p in ps: - t = Topic.objects.create( - label=p['name'], - category=cat) - sim = Position.objects.create( - topic=t, - label=u"Sim" - ) - non = Position.objects.create( - topic=t, - label=u"Non" - ) - topics.append(t) - # p = MeRepresentaPopularProposal.objects.create(proposer=proposer, - # clasification='ddhh', - # title=p['name'], - # one_liner=p['name'], - # data={} - # ) - # PopularProposalSite.objects.create(site=site, popular_proposal=p) - - - -cs = Candidate.objects.filter(elections__area__name__in=[u"São Paulo", u"Río de Janeiro", u"Brasil"]).order_by("?") -# ps = MeRepresentaPopularProposal.objects.order_by('?') - -from random import random -for c in cs: - for t in topics: - r = random() - if r > 0.5: - position=t.positions.first() - else: - position=t.positions.last() - TakenPosition.objects.create(topic=t, - position=position, - person=c - ) - - - -# ./manage.py dumpdata --format=yaml sites auth backend_citizen organization_profiles custom_sites popolo candidator elections > merepresenta_example.yaml diff --git a/suggestions_for_candidates/migrations/0001_initial.py b/suggestions_for_candidates/migrations/0001_initial.py index 6c48774b..cbdd0353 100644 --- a/suggestions_for_candidates/migrations/0001_initial.py +++ b/suggestions_for_candidates/migrations/0001_initial.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.11.9 on 2018-03-09 20:54 +# Generated by Django 1.11.15 on 2020-05-02 23:57 from __future__ import unicode_literals from django.db import migrations, models @@ -13,11 +13,11 @@ class Migration(migrations.Migration): initial = True dependencies = [ - ('popular_proposal', '0032_auto_20180308_1857'), - ('elections', '0031_election_second_round'), - ('backend_candidate', '0014_remove_suggesting_models') + ('elections', '0001_initial'), + ('popular_proposal', '0001_initial'), ] - state_operations = [ + + operations = [ migrations.CreateModel( name='CandidateIncremental', fields=[ @@ -65,6 +65,3 @@ class Migration(migrations.Migration): field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='suggestions_for_candidates.IncrementalsCandidateFilter'), ), ] - operations = [ - migrations.SeparateDatabaseAndState(state_operations=state_operations) - ] diff --git a/suggestions_for_candidates/models.py b/suggestions_for_candidates/models.py index 87e51e65..7358f3f8 100644 --- a/suggestions_for_candidates/models.py +++ b/suggestions_for_candidates/models.py @@ -110,4 +110,4 @@ def send_mails(self, sleep=0): for c in candidates: candidate_incremental = CandidateIncremental.objects.create(candidate=c, suggestion=self) - candidate_incremental.send_mail(sleep) \ No newline at end of file + candidate_incremental.send_mail(sleep) diff --git a/suggestions_for_candidates/tests/incrementals_tests.py b/suggestions_for_candidates/tests/incrementals_tests.py index a253e13b..97a4f181 100644 --- a/suggestions_for_candidates/tests/incrementals_tests.py +++ b/suggestions_for_candidates/tests/incrementals_tests.py @@ -267,7 +267,7 @@ def test_command_line(self): def test_command_line_for_selected_filters(self): e = Election.objects.first() - damian_candidato = Candidate.objects.create(name='Jefe!', id="jefe") + damian_candidato = Candidate.objects.create(name='Jefe!', slug="jefe") damian_candidato.elections.add(e) d_1 = User.objects.create(username='d1', email='damian1@perrito.cl') d_2 = User.objects.create(username='d2', email='damian2@perrito.cl') @@ -283,11 +283,11 @@ def test_command_line_for_selected_filters(self): Candidacy.objects.create(candidate=fiera_candidata, user=f_1) Candidacy.objects.create(candidate=fiera_candidata, user=f_2) - benito_candidato = Candidate.objects.create(name='Beni el mejor del mundo!', id="beni") + benito_candidato = Candidate.objects.create(name='Beni el mejor del mundo!', slug="beni") beni_1 = User.objects.create(username='beni', email='beni@perrito.cl') Candidacy.objects.create(candidate=benito_candidato, user=beni_1) PersonalData.objects.create(candidate=benito_candidato, label='Pacto', value="Otro Pacto") - filter_qs2 = {'id':'beni'} + filter_qs2 = {'slug':'beni'} exclude_qs2 = {} f2 = IncrementalsCandidateFilter.objects.create(filter_qs=filter_qs2, exclude_qs=exclude_qs2, @@ -354,7 +354,7 @@ def test_command_line_for_selected_filters(self): def test_task_for_sending_suggestions(self): e = Election.objects.first() - damian_candidato = Candidate.objects.create(name='Jefe!', id="jefe") + damian_candidato = Candidate.objects.create(name='Jefe!', slug="jefe") damian_candidato.elections.add(e) d_1 = User.objects.create(username='d1', email='damian1@perrito.cl') d_2 = User.objects.create(username='d2', email='damian2@perrito.cl') @@ -370,11 +370,11 @@ def test_task_for_sending_suggestions(self): Candidacy.objects.create(candidate=fiera_candidata, user=f_1) Candidacy.objects.create(candidate=fiera_candidata, user=f_2) - benito_candidato = Candidate.objects.create(name='Beni el mejor del mundo!', id="beni") + benito_candidato = Candidate.objects.create(name='Beni el mejor del mundo!', slug="beni") beni_1 = User.objects.create(username='beni', email='beni@perrito.cl') Candidacy.objects.create(candidate=benito_candidato, user=beni_1) PersonalData.objects.create(candidate=benito_candidato, label='Pacto', value="Otro Pacto") - filter_qs2 = {'id':'beni'} + filter_qs2 = {'slug':'beni'} exclude_qs2 = {} f2 = IncrementalsCandidateFilter.objects.create(filter_qs=filter_qs2, exclude_qs=exclude_qs2, diff --git a/tse_data_importer/__init__.py b/tse_data_importer/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/tse_data_importer/admin.py b/tse_data_importer/admin.py deleted file mode 100644 index 13be29d9..00000000 --- a/tse_data_importer/admin.py +++ /dev/null @@ -1,6 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.contrib import admin - -# Register your models here. diff --git a/tse_data_importer/apps.py b/tse_data_importer/apps.py deleted file mode 100644 index 7d6fa744..00000000 --- a/tse_data_importer/apps.py +++ /dev/null @@ -1,8 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.apps import AppConfig - - -class TseDataImporterConfig(AppConfig): - name = 'tse_data_importer' diff --git a/tse_data_importer/csv_reader.py b/tse_data_importer/csv_reader.py deleted file mode 100644 index 2fff7b47..00000000 --- a/tse_data_importer/csv_reader.py +++ /dev/null @@ -1,13 +0,0 @@ -import unicodecsv as csv -from tse_data_importer.importer import RowsReaderAdapter - - -class CsvReader(RowsReaderAdapter): - def __init__(self, filename, *args, **kwargs): - self.filename = filename - file_ = open(self.filename, 'rb') - reader = csv.reader(file_, encoding='iso-8859-1', delimiter=';') - self.rows = [] - for row in reader: - self.rows.append(row) - super(CsvReader, self).__init__(self.rows, **kwargs) diff --git a/tse_data_importer/fixtures/example_candidates.txt b/tse_data_importer/fixtures/example_candidates.txt deleted file mode 100644 index 3aaa5e6a..00000000 --- a/tse_data_importer/fixtures/example_candidates.txt +++ /dev/null @@ -1,11 +0,0 @@ -"17/05/2018";"04:01:20";"2014";"1";"Elei��es Gerais 2014";"RJ";"RJ";"RIO DE JANEIRO";"7";"DEPUTADO ESTADUAL";"EDUARDO SALLES DE ARA�JO JUNIOR";"190000000560";"13318";"04768296742";"EDUARDO SALLES";"2";"DEFERIDO";"13";"PT";"PARTIDO DOS TRABALHADORES";"190000000010";"#NULO#";"PT";"PARTIDO ISOLADO";"257";"EMPRES�RIO";"18/03/1978";"110595560345";"36";"2";"MASCULINO";"8";"SUPERIOR COMPLETO";"3";"CASADO(A)";"01";"BRANCA";"1";"BRASILEIRA NATA";"RJ";"-3";"RIO DE JANEIRO";"3000000";"5";"SUPLENTE";"#NULO#" -"17/05/2018";"04:01:20";"2014";"1";"Elei��es Gerais 2014";"RJ";"RJ";"RIO DE JANEIRO";"6";"DEPUTADO FEDERAL";"CARLOS ALBERTO HERM�NIO DE MORAES";"190000000343";"1723";"52243184753";"PARA DO SANTO ALEIXO";"2";"DEFERIDO";"17";"PSL";"PARTIDO SOCIAL LIBERAL";"190000000007";"#NULO#";"SD / PSL";"RIO SOLID�RIO";"923";"APOSENTADO (EXCETO SERVIDOR P�BLICO)";"21/07/1958";"066895110310";"56";"2";"MASCULINO";"4";"ENSINO FUNDAMENTAL COMPLETO";"3";"CASADO(A)";"03";"PARDA";"1";"BRASILEIRA NATA";"RJ";"-3";"MAGE";"5000000";"5";"SUPLENTE";"#NULO#" -"17/05/2018";"04:01:20";"2014";"1";"Elei��es Gerais 2014";"RJ";"RJ";"RIO DE JANEIRO";"6";"DEPUTADO FEDERAL";"ALCEU ALVES BARBOSA JUNIOR";"190000000682";"7097";"00688960774";"ALCEU JUNIOR";"2";"DEFERIDO";"70";"PT do B";"PARTIDO TRABALHISTA DO BRASIL";"190000000015";"#NULO#";"PT do B";"PARTIDO ISOLADO";"169";"COMERCIANTE";"15/11/1970";"075667840337";"43";"2";"MASCULINO";"6";"ENSINO M�DIO COMPLETO";"3";"CASADO(A)";"01";"BRANCA";"1";"BRASILEIRA NATA";"RJ";"-3";"RIO DE JANEIRO";"2000000";"4";"N�O ELEITO";"JACAREJR@BOL.COM.BR" -"17/05/2018";"04:01:20";"2014";"1";"Elei��es Gerais 2014";"RJ";"RJ";"RIO DE JANEIRO";"7";"DEPUTADO ESTADUAL";"SANDRA MARIA ALVES DOS SANTOS";"190000000223";"17566";"35113251704";"SANDRA GUERREIRA";"2";"DEFERIDO";"17";"PSL";"PARTIDO SOCIAL LIBERAL";"190000000005";"#NULO#";"PSL";"PARTIDO ISOLADO";"999";"OUTROS";"19/01/1950";"001971400396";"64";"4";"FEMININO";"8";"SUPERIOR COMPLETO";"1";"SOLTEIRO(A)";"03";"PARDA";"1";"BRASILEIRA NATA";"MG";"-3";"BELO HORIZONTE";"5000000";"5";"SUPLENTE";"#NULO#" -"17/05/2018";"04:01:20";"2014";"1";"Elei��es Gerais 2014";"RJ";"RJ";"RIO DE JANEIRO";"6";"DEPUTADO FEDERAL";"SAV�RIO LA RUINA";"190000000986";"2334";"34625305772";"SAV�RIO OLIVETO";"14";"INDEFERIDO";"23";"PPS";"PARTIDO POPULAR SOCIALISTA";"190000000017";"#NULO#";"PSDB / PPS / DEM";"PACTO PELO RIO DE JANEIRO E O BRASIL";"297";"SERVIDOR P�BLICO ESTADUAL";"15/11/1952";"023402290361";"61";"2";"MASCULINO";"8";"SUPERIOR COMPLETO";"3";"CASADO(A)";"01";"BRANCA";"2";"BRASILEIRA (NATURALIZADA)";"ZZ";"-3";"CASTROVILLARI - IT�LIA";"1000000";"4";"N�O ELEITO";"SAVERIOOLIVETO@TERRA.COM.BR" -"17/05/2018";"04:01:20";"2014";"1";"Elei��es Gerais 2014";"RJ";"RJ";"RIO DE JANEIRO";"7";"DEPUTADO ESTADUAL";"JOSELENE CARVALHO CORREA";"190000000236";"17124";"08220801760";"JOSELINE CORREA";"14";"INDEFERIDO";"17";"PSL";"PARTIDO SOCIAL LIBERAL";"190000000005";"#NULO#";"PSL";"PARTIDO ISOLADO";"999";"OUTROS";"31/07/1978";"103680030396";"36";"4";"FEMININO";"8";"SUPERIOR COMPLETO";"3";"CASADO(A)";"03";"PARDA";"1";"BRASILEIRA NATA";"RJ";"-3";"RIO DE JANEIRO";"-1";"-1";"#NULO#";"#NULO#" -"17/05/2018";"04:01:20";"2014";"1";"Elei��es Gerais 2014";"RJ";"RJ";"RIO DE JANEIRO";"7";"DEPUTADO ESTADUAL";"ARISTEU ADRIEN DE ALBUQUERQUE";"190000000450";"50355";"48194255791";"PROFESSOR ARISTEU";"2";"DEFERIDO";"50";"PSOL";"PARTIDO SOCIALISMO E LIBERDADE";"190000000009";"#NULO#";"PSOL";"PARTIDO ISOLADO";"266";"PROFESSOR DE ENSINO M�DIO";"10/02/1957";"055660310329";"57";"2";"MASCULINO";"8";"SUPERIOR COMPLETO";"9";"DIVORCIADO(A)";"01";"BRANCA";"1";"BRASILEIRA NATA";"RJ";"-3";"RIO DE JANEIRO";"550000";"5";"SUPLENTE";"ARISTEUADRIEN@IG.COM.BR" -"17/05/2018";"04:01:20";"2014";"1";"Elei��es Gerais 2014";"RJ";"RJ";"RIO DE JANEIRO";"6";"DEPUTADO FEDERAL";"MARCELO DA SILVA RIBEIRO";"190000000454";"5032";"08545800770";"MARCELO SALIM";"2";"DEFERIDO";"50";"PSOL";"PARTIDO SOCIALISMO E LIBERDADE";"190000000009";"#NULO#";"PSOL";"PARTIDO ISOLADO";"169";"COMERCIANTE";"13/07/1981";"114077150302";"33";"2";"MASCULINO";"8";"SUPERIOR COMPLETO";"3";"CASADO(A)";"01";"BRANCA";"1";"BRASILEIRA NATA";"RJ";"-3";"RIO DE JANEIRO";"550000";"5";"SUPLENTE";"SALIMORION@HOTMAIL.COM" -"17/05/2018";"04:01:20";"2014";"1";"Elei��es Gerais 2014";"RJ";"RJ";"RIO DE JANEIRO";"7";"DEPUTADO ESTADUAL";"CIRENE MENDES PEDRO";"190000001180";"36016";"08543058740";"CI�A MENDES";"2";"DEFERIDO";"36";"PTC";"PARTIDO TRABALHISTA CRIST�O";"190000000018";"#NULO#";"PSC / PTC";"EM DEFESA DA FAM�LIA";"999";"OUTROS";"03/09/1977";"106236150361";"37";"4";"FEMININO";"6";"ENSINO M�DIO COMPLETO";"1";"SOLTEIRO(A)";"03";"PARDA";"1";"BRASILEIRA NATA";"RJ";"-3";"RIO DE JANEIRO";"2000000";"5";"SUPLENTE";"#NULO#" -"17/05/2018";"04:01:20";"2014";"1";"Elei��es Gerais 2014";"RJ";"RJ";"RIO DE JANEIRO";"7";"DEPUTADO ESTADUAL";"MARCUS VINICIUS FERREIRA DOS SANTOS";"190000000472";"50220";"09520353755";"MARCUS MENEZES";"2";"DEFERIDO";"50";"PSOL";"PARTIDO SOCIALISMO E LIBERDADE";"190000000009";"#NULO#";"PSOL";"PARTIDO ISOLADO";"265";"PROFESSOR DE ENSINO FUNDAMENTAL";"25/03/1983";"111673500302";"31";"2";"MASCULINO";"8";"SUPERIOR COMPLETO";"1";"SOLTEIRO(A)";"01";"BRANCA";"1";"BRASILEIRA NATA";"RJ";"-3";"RIO DE JANEIRO";"550000";"5";"SUPLENTE";"MARQUINHOSMENEZES50220@GMAIL.COM" -"17/05/2018";"04:01:20";"2014";"1";"Elei��es Gerais 2014";"RJ";"RJ";"RIO DE JANEIRO";"6";"DEPUTADO FEDERAL";"BEATRICE MILLER CORDOEIRA";"190000000484";"5011";"57369720772";"BIA DO PSOL";"2";"DEFERIDO";"50";"PSOL";"PARTIDO SOCIALISMO E LIBERDADE";"190000000009";"#NULO#";"PSOL";"PARTIDO ISOLADO";"265";"PROFESSOR DE ENSINO FUNDAMENTAL";"08/08/1955";"032314580329";"59";"4";"FEMININO";"4";"ENSINO FUNDAMENTAL COMPLETO";"9";"DIVORCIADO(A)";"01";"BRANCA";"1";"BRASILEIRA NATA";"RJ";"-3";"NOVA FRIBURGO";"550000";"5";"SUPLENTE";"BEATRICE.MILLER@GMAIL.COM" diff --git a/tse_data_importer/importer.py b/tse_data_importer/importer.py deleted file mode 100644 index 5e3847ae..00000000 --- a/tse_data_importer/importer.py +++ /dev/null @@ -1,124 +0,0 @@ -from django.core.validators import validate_email -from django.conf import settings as django_settings - -validators = { - 'mail': validate_email -} - -area_settings = { - 5:'slug', - 7:'area_name', - 9: 'election_name', -} -candidate_settings = { - - 10: 'nome_completo', - 12: 'number', - 13: 'cpf', - 14: 'nome', - 25: 'job', - 26: 'date_of_birth', - 30: 'gender', - 32: 'education', - 34: 'civil_status', - 36: 'race', - 45: 'mail', - -} -partido_settings = { - 17: 'number', - 19: 'name', - 18: 'initials' -} -coaligacao_settings = { - 23: "name", - 22: "partidos_coaligacao", - 21: "number" - -} -_settings = { - 'area': area_settings, - 'candidate': candidate_settings, - 'partido': partido_settings, - 'coaligacao': coaligacao_settings -} - - -class RowReader(object): - - def __init__(self, row, settings): - self.row = row - self.settings = settings - - def process(self): - result = {} - for key in self.settings.keys(): - entity_definition = self.settings[key] - temporary_result = {} - for number in entity_definition: - entity_key = entity_definition[number] - try: - entity_value = self.row[number] - except IndexError: - print u'Numero no encontrado ' + unicode(number) - if entity_key in validators: - validator = validators[entity_key] - try: - validator(entity_value) - except: - entity_value = None - temporary_result[entity_key] = entity_value - result[key] = temporary_result - return result - - -class MultipleRowsReader(object): - - - def __init__(self, rows, settings=None): - self.rows = rows - self.settings = settings or django_settings.TSE_IMPORTER_CONF or _settings - - def _process(self): - result = [] - for row in self.rows: - row_reader = RowReader(row, settings=self.settings) - row_result = row_reader.process() - result.append(row_result) - return result - - def _post_process(self, results): - existing_emails = {} - counter = 0 - for row in results: - email = row['candidate']['mail'] - if email is None: - results[counter]['email_repeated'] = None - else: - if email in existing_emails: - results[counter]['email_repeated'] = True - existing_emails[email].append(counter) - ## Update all previous emails - for existing_row_number in existing_emails[email]: - results[existing_row_number]['email_repeated'] = True - else: - results[counter]['email_repeated'] = False - existing_emails[email] = [counter] - counter += 1 - return results - - def process(self): - result = self._process() - result = self._post_process(result) - return result - -class RowsReaderAdapter(MultipleRowsReader): - - def do_something(self, row): - raise NotImplementedError - - def process(self): - results = super(RowsReaderAdapter, self).process() - for r in results: - self.do_something(r) - return results \ No newline at end of file diff --git a/tse_data_importer/migrations/__init__.py b/tse_data_importer/migrations/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/tse_data_importer/models.py b/tse_data_importer/models.py deleted file mode 100644 index 1dfab760..00000000 --- a/tse_data_importer/models.py +++ /dev/null @@ -1,6 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models - -# Create your models here. diff --git a/tse_data_importer/tests/__init__.py b/tse_data_importer/tests/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/tse_data_importer/tests/row_processor_tests.py b/tse_data_importer/tests/row_processor_tests.py deleted file mode 100644 index 85875495..00000000 --- a/tse_data_importer/tests/row_processor_tests.py +++ /dev/null @@ -1,137 +0,0 @@ -# coding=utf-8 -from django.test import TestCase -from tse_data_importer.importer import RowReader, MultipleRowsReader, RowsReaderAdapter -from tse_data_importer.csv_reader import CsvReader - -row_1 = ["17/05/2018","04:01:20",2014,1,"Eleicoes Gerais 2014","RJ","RJ","RIO DE JANEIRO",7,"DEPUTADO ESTADUAL", - "EDUARDO SALLES DE ARAúJO JUNIOR",190000000560,13318,4768296742,"EDUARDO SALLES",2,"DEFERIDO",13,"PT", - "PARTIDO DOS TRABALHADORES",190000000010,"#NULO#","PT","PARTIDO ISOLADO",257,"EMPRESaRIO","18/03/1978",110595560345, - 36,2,"MASCULINO",8,"SUPERIOR COMPLETO",3,"CASADO(A)",1,"BRANCA",1,"BRASILEIRA NATA","RJ",-3,"RIO DE JANEIRO",3000000,5, - "SUPLENTE","perrito@gatito.com"] - -row_2 = ["17/05/2018","04:01:20",2014,1,"Eleiooes Gerais 2014","RJ","RJ","RIO DE JANEIRO",6,"DEPUTADO FEDERAL","CARLOS ALBERTO HERMoNIO DE MORAES", - 190000000343,1723,52243184753,"PARA DO SANTO ALEIXO",2,"DEFERIDO",17,"PSL","PARTIDO SOCIAL LIBERAL",190000000007,"#NULO#", - "SD / PSL","RIO SOLIDoRIO",923,"APOSENTADO (EXCETO SERVIDOR PoBLICO)", - "21/07/1958",66895110310,56,2,"MASCULINO",4,"ENSINO FUNDAMENTAL COMPLETO",3,"CASADO(A)",3,"PARDA",1, - "BRASILEIRA NATA","RJ",-3,"MAGE",5000000,5,"SUPLENTE","#NULO#"] - -row_3 = ["17/05/2018","04:01:20",2014,1,"Eleiooes Gerais 2014","RJ","RJ","RIO DE JANEIRO",6,"DEPUTADO FEDERAL","ALCEU ALVES BARBOSA JUNIOR", - 190000000682,7097,688960774,"ALCEU JUNIOR",2,"DEFERIDO",70,"PT do B","PARTIDO TRABALHISTA DO BRASIL",190000000015,"#NULO#","PT do B", - "PARTIDO ISOLADO",169,"COMERCIANTE","15/11/1970",75667840337,43,2,"MASCULINO",6,"ENSINO MoDIO COMPLETO",3,"CASADO(A)",1,"BRANCA",1, - "BRASILEIRA NATA","RJ",-3,"RIO DE JANEIRO",2000000,4,"NoO ELEITO","perrito@gatito.com"] -row_4 = ["17/05/2018","04:01:20",2014,1,"Eleiooes Gerais 2014","RJ","RJ","RIO DE JANEIRO",6,"DEPUTADO FEDERAL","ALCEU ALVES BARBOSA JUNIOR", - 190000000682,7097,688960774,"ALCEU JUNIOR",2,"DEFERIDO",70,"PT do B","PARTIDO TRABALHISTA DO BRASIL",190000000015,"#NULO#","PT do B", - "PARTIDO ISOLADO",169,"COMERCIANTE","15/11/1970",75667840337,43,2,"MASCULINO",6,"ENSINO MoDIO COMPLETO",3,"CASADO(A)",1,"BRANCA",1, - "BRASILEIRA NATA","RJ",-3,"RIO DE JANEIRO",2000000,4,"NoO ELEITO","otro_mail@gatito.com"] -row_5 = ["17/05/2018","04:01:20",2014,1,"Eleiooes Gerais 2014","RJ","RJ","RIO DE JANEIRO",6,"DEPUTADO FEDERAL","ALCEU ALVES BARBOSA JUNIOR", - 190000000682,7097,688960774,"ALCEU JUNIOR",2,"DEFERIDO",70,"PT do B","PARTIDO TRABALHISTA DO BRASIL",190000000015,"#NULO#","PT do B", - "PARTIDO ISOLADO",169,"COMERCIANTE","15/11/1970",75667840337,43,2,"MASCULINO",6,"ENSINO MoDIO COMPLETO",3,"CASADO(A)",1,"BRANCA",1, - "BRASILEIRA NATA","RJ",-3,"RIO DE JANEIRO",2000000,4,"NoO ELEITO","otro_mail2@gatito.com"] -all_rows = [row_1, row_2, row_3, row_4, row_5] - - -area_settings = { - 5:'slug', - 9: 'election_name', -} -candidate_settings = { - - 10: 'nome_completo', - 12: 'number', - 13: 'cpf', - 14: 'nome', - 25: 'job', - 26: 'date_of_birth', - 30: 'gender', - 32: 'education', - 34: 'civil_status', - 36: 'race', - 45: 'mail', - -} -partido_settings = { - 17: 'number', - 19: 'name', - 18: 'initials' -} -coaligacao_settings = { - 23: "name", - 22: "partidos_coaligacao", - 21: "number" - -} -settings = { - 'area': area_settings, - 'candidate': candidate_settings, - 'partido': partido_settings, - 'coaligacao': coaligacao_settings -} -class ImporterTestCase(TestCase): - def test_proces_one_row(self): - imp = RowReader(row_1, settings=settings) - result = imp.process() - candidate_dict = result['candidate'] - self.assertEquals(candidate_dict['mail'], "perrito@gatito.com") - self.assertEquals(candidate_dict['nome'], 'EDUARDO SALLES') - self.assertEquals(candidate_dict['nome_completo'], 'EDUARDO SALLES DE ARAúJO JUNIOR') - self.assertEquals(candidate_dict['cpf'], 4768296742) - self.assertEquals(candidate_dict['gender'], 'MASCULINO') - self.assertEquals(candidate_dict['race'], 'BRANCA') - area_dict = result['area'] - self.assertEquals(area_dict['slug'], 'RJ') - self.assertEquals(area_dict['election_name'], 'DEPUTADO ESTADUAL') - self.assertIn('coaligacao', result) - self.assertIn('partido', result) - - - def test_process_one_row_validating_email(self): - imp = RowReader(row_2, settings=settings) - result = imp.process() - candidate_dict = result['candidate'] - self.assertIsNone(candidate_dict['mail']) - - def test_process_multiple_rows(self): - proc = MultipleRowsReader(all_rows, settings=settings) - result = proc.process() - self.assertEquals(len(result), 5) - first_ = result[0] - self.assertIn('candidate', first_) - self.assertIn('area', first_) - self.assertIn('coaligacao', first_) - self.assertIn('partido', first_) - - def test_post_process_thing(self): - proc = MultipleRowsReader(all_rows, settings=settings) - result = proc.process() - - first_ = result[0] - second_ = result[1] - third_ = result[2] - fourth_ = result[3] - fifth_ = result[3] - - self.assertIsNone(second_['email_repeated']) - self.assertTrue(third_['email_repeated']) - self.assertTrue(first_['email_repeated']) - self.assertFalse(fourth_['email_repeated']) - self.assertFalse(fifth_['email_repeated']) - - def test_management_command_mixin(self): - class DoSomethingWithEachRow(RowsReaderAdapter): - def __init__(self, *args, **kwargs): - super(DoSomethingWithEachRow, self).__init__(*args, **kwargs) - self.rows_count = 0 - - def do_something(self, row): - self.rows_count += 1 - reader = DoSomethingWithEachRow(all_rows, settings=settings) - reader.process() - self.assertEquals(reader.rows_count, 5) - - def test_csv_reader_from_file(self): - filename = './tse_data_importer/fixtures/example_candidates.txt' - class ReaderForJustThisTest(CsvReader): - pass - reader = ReaderForJustThisTest(filename) - self.assertEquals(len(reader.rows), 11) - self.assertGreater(len(reader.rows[0]), 1) \ No newline at end of file diff --git a/tse_data_importer/views.py b/tse_data_importer/views.py deleted file mode 100644 index e784a0bd..00000000 --- a/tse_data_importer/views.py +++ /dev/null @@ -1,6 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.shortcuts import render - -# Create your views here. diff --git a/votai_general_theme/templates/elections/election_detail.html b/votai_general_theme/templates/elections/election_detail.html index adfbd384..a137f412 100644 --- a/votai_general_theme/templates/elections/election_detail.html +++ b/votai_general_theme/templates/elections/election_detail.html @@ -25,9 +25,6 @@

-{% display_election_card default_election %}
{% for pos in positions %} diff --git a/votai_general_theme/templatetags/votainteligente_extras.py b/votai_general_theme/templatetags/votainteligente_extras.py index 9c6816b1..4f2be905 100644 --- a/votai_general_theme/templatetags/votainteligente_extras.py +++ b/votai_general_theme/templatetags/votainteligente_extras.py @@ -357,7 +357,7 @@ def template_exists(value): @register.filter(name='is_marked_area') def is_marked_area(area): - if area.id in config.MARKED_AREAS: + if area.slug in config.MARKED_AREAS: return True return False @@ -417,9 +417,6 @@ def get_proposal_author(popular_proposal): def get_classification_from_str(classification): from popular_proposal.forms.form_texts import TOPIC_CHOICES_DICT d = TOPIC_CHOICES_DICT - if settings.THEME is None: - from votita.forms.forms import TOPIC_CHOICES_DICT - d.update(TOPIC_CHOICES_DICT) return d.get(classification, "") @@ -435,4 +432,4 @@ def mail_signature_txt(): @register.simple_tag def committed_canididates_from(election): - return election.candidates.filter(commitments__isnull=False) \ No newline at end of file + return election.candidates.filter(commitments__isnull=False) diff --git a/votai_utils/management/commands/rio_import_from_tse.py b/votai_utils/management/commands/rio_import_from_tse.py deleted file mode 100644 index d7c20645..00000000 --- a/votai_utils/management/commands/rio_import_from_tse.py +++ /dev/null @@ -1,17 +0,0 @@ -# coding=utf-8 -from django.core.management.base import BaseCommand, CommandError -from elections.models import Election -from popular_proposal.models import PopularProposal -from popular_proposal.replicator import Replicator -from rioxinteiro.tse_importer import TSEProcessor - -class Command(BaseCommand): - help = u'Carga datos de los candidatos dado un archivo en formato CSV con separación de ;' - - def add_arguments(self, parser): - parser.add_argument('filename', type=str) - - def handle(self, *args, **options): - filename = options['filename'] - processor = TSEProcessor(filename) - processor.process() diff --git a/votainteligente/settings.py b/votainteligente/settings.py index e18f5687..6bd939b8 100644 --- a/votainteligente/settings.py +++ b/votainteligente/settings.py @@ -59,8 +59,6 @@ 'mathfilters', 'newsletter', 'rest_framework', - 'preguntales', - 'votita', 'suggestions_for_candidates', # Uncomment the next line to enable admin documentation: # 'django.contrib.admindocs', @@ -74,7 +72,6 @@ 'debug_toolbar', 'agenda', 'medianaranja2', - 'merepresenta', # 'debug_panel', 'el_pagination', 'proposal_subscriptions', @@ -186,7 +183,6 @@ 'HIDDEN_AREAS': ('', 'Seccion oculta'), 'DEFAULT_ELECTION_ID': (1, u'La elección que aparece en /candidaturas'), 'NAV_BAR': ('profiles, questionary, soulmate, facetoface, ask, ranking', 'Menu de navegacion'), - 'NAV_BAR_VOTITA_DISPLAYED': (False, 'Desplegamos el navbar del votita??????'), 'SHOW_RIBBON_IN_CANDIDATE': (False, u"Debería aparecerles la franja roja que dice 'No se ha compormetido?'"), 'SHOW_ALL_CANDIDATES_IN_THIS_ORDER': ("", u"Mostrar todos los candidatos en la parte de /candidatos? "), 'CAN_CREATE_TEST_PROPOSAL': (False, u'Se pueden crear propuestas de prueba?'), @@ -229,10 +225,6 @@ 'MEDIA_NARANJA_QUESTIONS_ENABLED': (True, u'Si bajas esto la 1/2 n sólo usará propuestas ciudadanas'), 'ESTRATEGIA_SELECCION_PROPUESTAS': ("getter", u'Qué estrategia usamos para mostrar propuestas en la 1/2 naranja', 'proposals_getter_for_12_n'), - 'MEREPRESENTA_COLIGACAO_ATENUATION_FACTOR': (1.0, u'o factor de atenuacao de nota de coligacao'), - 'MEREPRESENTA_IDENTITY_MULTIPLICATION_FACTOR': (1.0, u'o factor de multiplicacao de desprivilegio'), - 'MEREPRESENTA_RESULTADO_CANTIDADE': (100, u'o factor de multiplicacao de desprivilegio'), - 'MEREPRESENTA_CANDIDATES_ALLOWED_TO_LOGIN': (True, u'os candidatos podem entrar na plataforma'), 'DONT_SHOW_AREAS_IN_PROPOSAL_WIZARD': (True, u'No muestres las areas en el wizard de creación de propuestas'), } TESTING = 'test' in sys.argv diff --git a/votainteligente/testing_settings.py b/votainteligente/testing_settings.py index 8dcb4c69..e54e3011 100644 --- a/votainteligente/testing_settings.py +++ b/votainteligente/testing_settings.py @@ -4,7 +4,6 @@ CELERY_ALWAYS_EAGER = True TRAVIS = os.environ.get('TRAVIS') CACHES={'default': {'BACKEND': 'django.core.cache.backends.dummy.DummyCache'}} -MEREPRESENTA_VOLUNTARIOS_ON = True if TRAVIS: HAYSTACK_CONNECTIONS = { diff --git a/votainteligente/urls.py b/votainteligente/urls.py index afc55000..33c8b836 100644 --- a/votainteligente/urls.py +++ b/votainteligente/urls.py @@ -32,7 +32,6 @@ # Uncomment the next line to enable the admin: url(r'^admin/', include(admin.site.urls)), url(r'^', include('elections.urls')), - url(_(r'^preguntales/'), include('preguntales.urls')), url(_(r'^propuestas/'), include('popular_proposal.urls', namespace='popular_proposals')), url(_('^pages/'), include('django.contrib.flatpages.urls')), url(r'^tinymce/', include('tinymce.urls')), @@ -44,8 +43,6 @@ url(_(r'^organizacion/'), include('organization_profiles.urls', namespace='organization_profiles')), url(_(r'^candidatos/'), include('backend_candidate.urls', namespace='backend_candidate')), url(r'^proposal_subscriptions/', include('proposal_subscriptions.urls', namespace='proposal_subscriptions')), - url(r'^levantalamano/', include('votita.urls', namespace='votita')), - url(r'^cuentas/', include('votita.urls.auth_urls', namespace="votita_auth")), url(_(r'^ayudanos/$'), HelpFindingCandidates.as_view(), name='help'), diff --git a/votita/README.md b/votita/README.md deleted file mode 100644 index bb719bb6..00000000 --- a/votita/README.md +++ /dev/null @@ -1,15 +0,0 @@ -![levantalamano.cl](http://levantalamano.cl/static/img/lm-banner.svg) ----------------- -[Levantalamano.cl](Levantalamano.cl) es un proyecto en conjunto con [UNICEF Chile](http://www.unicef.cl/) -para llevar a cabo propuestas de niños, niñas y adolescentes a manos de candidatos para que ellos se puedan -comprometer con estas propuestas. - -El código es una extensión de las propuestas votainteligente.cl. - -Qué es? --------- -Formarse como ciudadanos y ciudadanas tiene que partir desde la infancia y seguir avanzando en la adolescencia y la adultez. Por eso, nace “Levanta la mano” una herramienta para abrir la conversación entre niños, niñas y adolescentes para reflexionar, participar, discutir y proponer desde las vivencias propias, los problemas y desafíos que tenemos como país, y las posibles soluciones que se nos puedan ocurrir. - - - diff --git a/votita/__init__.py b/votita/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/votita/admin.py b/votita/admin.py deleted file mode 100644 index e9a0e3e1..00000000 --- a/votita/admin.py +++ /dev/null @@ -1,25 +0,0 @@ -from django.contrib import admin -from votita.models import KidsGathering, KidsProposal - - -class KidsProposalInline(admin.TabularInline): - model = KidsProposal - extra = 0 - can_delete = False - fields = ['title', 'clasification'] - -@admin.register(KidsGathering) -class KidsGatheringAdmin(admin.ModelAdmin): - list_display = ('proposer', 'name', 'created') - inlines = [KidsProposalInline, ] - - -@admin.register(KidsProposal) -class KidsProposalAdmin(admin.ModelAdmin): - list_display = ('id', - 'area', - 'title', - 'data', - 'proposer', - ) - exclude = ('organization',) diff --git a/votita/apps.py b/votita/apps.py deleted file mode 100644 index 9bc6d9ae..00000000 --- a/votita/apps.py +++ /dev/null @@ -1,7 +0,0 @@ -from __future__ import unicode_literals - -from django.apps import AppConfig - - -class VotitaConfig(AppConfig): - name = 'votita' diff --git a/votita/forms/__init__.py b/votita/forms/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/votita/forms/forms.py b/votita/forms/forms.py deleted file mode 100644 index 152957fe..00000000 --- a/votita/forms/forms.py +++ /dev/null @@ -1,156 +0,0 @@ -# coding=utf-8 -from django import forms -from collections import OrderedDict -from popular_proposal.forms.forms import get_possible_generating_areas -from django.utils.translation import ugettext as _ -from votita.models import KidsGathering, KidsProposal -from django.forms import ModelForm -from elections.models import Area -from votai_utils.send_mails import send_mails_to_staff -from django.conf import settings -from taggit.forms import TagWidget - - -def filterable_areas(): - areas = Area.public.all() - if settings.FILTERABLE_AREAS_TYPE: - return areas.filter(classification__in=settings.FILTERABLE_AREAS_TYPE) - return areas - - -class GatheringsWithStatsDataMixin(object): - def clean(self): - cleaned_data = super(GatheringsWithStatsDataMixin, self).clean() - base_fields = [field.name for field in self._meta.model._meta.get_fields()] - stats_data = {} - for key in cleaned_data.keys(): - if key not in base_fields: - stats_data[key] = cleaned_data.pop(key) - cleaned_data['stats_data'] = stats_data - return cleaned_data - - def save(self, commit=True): - instance = super(GatheringsWithStatsDataMixin, self).save(commit=False) - creating = instance.pk is None - if creating: - instance.proposer = self.proposer - - instance.stats_data = self.cleaned_data['stats_data'] - instance.save() - if creating: - self.save_m2m() - return instance - - -AGE_CHOICES = (("", u"Selecciona un rango de etario"), ("basica", u"Educación Básica"),("media", u"Educación Media"),("otro", u"Otro"),) - -class CreateGatheringForm(GatheringsWithStatsDataMixin, ModelForm): - age_range = forms.ChoiceField(label= "Rango etario de los participantes", - required=True, - choices=AGE_CHOICES) - male = forms.IntegerField(label = "Cantidad de Niños", - min_value = 0, - initial=0) - female = forms.IntegerField(label = "Cantidad de Niñas", - min_value = 0, - initial=0) - others = forms.IntegerField(label = "Cantidad de Otros", - min_value = 0, - initial=0) - generated_at = forms.ModelChoiceField(queryset=filterable_areas(), - empty_label=u"Selecciona la comuna", - required=False, - label="Comuna donde se realizó el encuentro") - school = forms.CharField(required=True, - widget=forms.TextInput(attrs={'placeholder': 'Ejemplo: “Escuela Santa Isabel”'}), - label=u"Establecimiento u organización") - - class Meta: - model = KidsGathering - fields = ['name', 'generated_at', 'presidents_features', 'school'] - widgets = { - "name" :forms.TextInput(attrs={'placeholder': 'Ejemplo: “Quinto básico C”'}), - "presidents_features": TagWidget(attrs={"max_length":100}) - } - - def __init__(self, *args, **kwargs): - self.proposer = kwargs.pop('proposer') - super(CreateGatheringForm, self).__init__(*args, **kwargs) - - -class UpdateGatheringForm(GatheringsWithStatsDataMixin, ModelForm): - class Meta: - model = KidsGathering - fields = ['image', 'comments'] - - def save(self, commit=True): - instance = super(UpdateGatheringForm, self).save(commit) - send_mails_to_staff({'gathering': instance}, 'nuevo_encuentro_en_votita') - return instance - - -TOPIC_CHOICES = (('', u'Selecciona el tema'), - ('proteccion_y_familia', u'Protección y familia'), - ('educacion_y_trabajo', u'Educación y trabajo'), - ('tecnologia', u'Tecnología y comunicaciones'), - ('diversidad', u'Diversidad e integración'), - ('cultura', u'Cultura y tiempo libre'), - ('medio_ambiente', u'Medio ambiente'), - ('salud', u'Salud y bienestar'), - ('politica', u'Política y participación'), - ) -TOPIC_CHOICES_DICT = dict(TOPIC_CHOICES) - -wizard_forms_fields = [ - { - 'template': 'popular_proposal/wizard/form_step.html', - 'explation_template': "popular_proposal/steps/tips_vacio.html", - 'fields': OrderedDict([( - 'clasification', forms.ChoiceField(choices=TOPIC_CHOICES, - widget=forms.Select()) - ), - ('problem', forms.CharField(max_length=1024, - widget=forms.Textarea() - )) - ]) - }, - { - 'template': 'popular_proposal/wizard/paso5.html', - 'explation_template': "popular_proposal/steps/tips_vacio.html", - 'fields': OrderedDict([ - ('title', forms.CharField(max_length=256, - widget=forms.TextInput())), - ('is_local_meeting', forms.BooleanField(required=False)), - ('generated_at', forms.ModelChoiceField(required=False, - queryset=get_possible_generating_areas(), - empty_label="No aplica") - ), - ('terms_and_conditions', forms.BooleanField( - error_messages={'required': - _(u'Debes aceptar nuestros Términos y Condiciones')} - ) - ), - ]) - } -] - - -class KidsProposalForm(ModelForm): - solution = forms.CharField(required=False, widget=forms.Textarea(attrs={'placeholder': 'Detalle de la propuesta'})) - clasification = forms.ChoiceField(choices=TOPIC_CHOICES) - - class Meta: - model = KidsProposal - fields = ['title', 'clasification'] - widgets = { - "title" : forms.TextInput(attrs={'placeholder': 'Título de la propuesta'}) - } - - def save(self, commit=True): - instance = super(KidsProposalForm, self).save(commit=commit) - instance.data = { - 'solution': self.cleaned_data['solution'] - } - if commit: - instance.save() - return instance diff --git a/votita/migrations/0001_initial.py b/votita/migrations/0001_initial.py deleted file mode 100644 index 18a44182..00000000 --- a/votita/migrations/0001_initial.py +++ /dev/null @@ -1,43 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.7 on 2017-08-07 22:32 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion -import multiselectfield.db.fields -import picklefield.fields - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ('popular_proposal', '0025_popularproposal_content_type'), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ] - - operations = [ - migrations.CreateModel( - name='KidsGathering', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=512, verbose_name='Nombre del encuentro')), - ('stats_data', picklefield.fields.PickledObjectField(editable=False)), - ('presidents_features', multiselectfield.db.fields.MultiSelectField(choices=[('Habilidades intelectuales', (('inteligente', 'Inteligente'), ('creativo', 'Creativo/a'), ('objetivo', 'Objetivo'), ('con_iniciativa', 'Con Iniciativa'), ('profesional', 'Profesional'), ('culto', 'Culto/a'), ('bilingue', 'Biling\xfce'))), ('Valores', (('responsable', 'Responsable'), ('transparente', 'Transparente'), ('honesto', 'Honesto/a'), ('equitativo', 'Equitativo/a'), ('justo', 'Justo/a'), ('comprometido', 'Comprometido/a'))), ('Habilidades personales', (('integrador', 'Integrador/a'), ('motivador', 'Motivador/a'), ('abierto', 'Abierto/a a escuchar'), ('accesible', 'Accesible'), ('empatico', 'Emp\xe1tico/a'), ('confiable', 'Confiable'))), ('Habilidades de rol', (('lider', 'Lider'), ('administrador', 'Buen Administrador/a'), ('negociante', 'Buen Negociante'), ('comunicador', 'Buen Comunicador/a'), ('influyente', 'Influyente'), ('eficiente', 'Eficiente'), ('experiencia', 'Con experiencia')))], max_length=512, null=True, verbose_name='Caracter\xedsticas de un buen presidente')), - ('created', models.DateTimeField(auto_now_add=True)), - ('updated', models.DateTimeField(auto_now_add=True)), - ('image', models.ImageField(blank=True, max_length=512, null=True, upload_to='votita/images/', verbose_name='Foto del encuentro')), - ('proposer', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='kids_proposals', to=settings.AUTH_USER_MODEL)), - ], - ), - migrations.CreateModel( - name='KidsProposal', - fields=[ - ('popularproposal_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='popular_proposal.PopularProposal')), - ('gathering', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='proposals', to='votita.KidsGathering')), - ], - bases=('popular_proposal.popularproposal',), - ), - ] diff --git a/votita/migrations/0002_kidsgathering_generated_at.py b/votita/migrations/0002_kidsgathering_generated_at.py deleted file mode 100644 index bf491907..00000000 --- a/votita/migrations/0002_kidsgathering_generated_at.py +++ /dev/null @@ -1,22 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.7 on 2017-08-08 15:19 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('elections', '0029_candidate_has_won'), - ('votita', '0001_initial'), - ] - - operations = [ - migrations.AddField( - model_name='kidsgathering', - name='generated_at', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='elections.Area'), - ), - ] diff --git a/votita/migrations/0003_auto_20170811_1542.py b/votita/migrations/0003_auto_20170811_1542.py deleted file mode 100644 index 4112b148..00000000 --- a/votita/migrations/0003_auto_20170811_1542.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.7 on 2017-08-11 15:42 -from __future__ import unicode_literals - -from django.db import migrations -import taggit.managers - - -class Migration(migrations.Migration): - - dependencies = [ - ('taggit', '0002_auto_20150616_2121'), - ('votita', '0002_kidsgathering_generated_at'), - ] - - operations = [ - migrations.RemoveField( - model_name='kidsgathering', - name='presidents_features', - ), - migrations.AddField( - model_name='kidsgathering', - name='presidents_features', - field=taggit.managers.TaggableManager(help_text='A comma-separated list of tags.', through='taggit.TaggedItem', to='taggit.Tag', verbose_name='Caracter\xedsticas de un buen presidente'), - ), - ] diff --git a/votita/migrations/0004_kidsgathering_comments.py b/votita/migrations/0004_kidsgathering_comments.py deleted file mode 100644 index c0b8cb15..00000000 --- a/votita/migrations/0004_kidsgathering_comments.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.7 on 2017-08-16 15:53 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('votita', '0003_auto_20170811_1542'), - ] - - operations = [ - migrations.AddField( - model_name='kidsgathering', - name='comments', - field=models.TextField(blank=True, default='', help_text='\xbfC\xf3mo podemos empoderar mejor a nuestros ni\xf1os?', verbose_name='\xbfTienes alg\xfan comentario sobre la actividad?'), - ), - ] diff --git a/votita/migrations/0005_auto_20171103_1618.py b/votita/migrations/0005_auto_20171103_1618.py deleted file mode 100644 index 3779dc33..00000000 --- a/votita/migrations/0005_auto_20171103_1618.py +++ /dev/null @@ -1,49 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.7 on 2017-11-03 16:18 -from __future__ import unicode_literals - -from django.db import migrations, models -import taggit.managers - - -class Migration(migrations.Migration): - - dependencies = [ - ('votita', '0004_kidsgathering_comments'), - ] - - operations = [ - migrations.AlterModelOptions( - name='kidsgathering', - options={'verbose_name': 'Encuentro', 'verbose_name_plural': 'Encuentros'}, - ), - migrations.AlterModelOptions( - name='kidsproposal', - options={'verbose_name': 'Medida', 'verbose_name_plural': 'Medidas'}, - ), - migrations.AddField( - model_name='kidsgathering', - name='school', - field=models.CharField(blank=True, max_length=512, verbose_name='Establecimiento u organizaci\xf3n'), - ), - migrations.AlterField( - model_name='kidsgathering', - name='comments', - field=models.TextField(blank=True, default='', verbose_name='\xbfC\xf3mo podemos empoderar mejor a nuestros ni\xf1os?'), - ), - migrations.AlterField( - model_name='kidsgathering', - name='image', - field=models.ImageField(blank=True, max_length=512, null=True, upload_to='votita/images/', verbose_name=''), - ), - migrations.AlterField( - model_name='kidsgathering', - name='name', - field=models.CharField(max_length=512, verbose_name='Grupo de participantes'), - ), - migrations.AlterField( - model_name='kidsgathering', - name='presidents_features', - field=taggit.managers.TaggableManager(help_text='A comma-separated list of tags.', through='taggit.TaggedItem', to='taggit.Tag', verbose_name=''), - ), - ] diff --git a/votita/migrations/__init__.py b/votita/migrations/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/votita/models.py b/votita/models.py deleted file mode 100644 index d6b299db..00000000 --- a/votita/models.py +++ /dev/null @@ -1,174 +0,0 @@ -# coding=utf-8 -from __future__ import unicode_literals -from django.db import models -from django.template.loader import get_template -from picklefield.fields import PickledObjectField -from popular_proposal.models import PopularProposal -from multiselectfield import MultiSelectField -from django.utils.translation import ugettext_lazy as _ -from django.contrib.auth.models import User -from elections.models import Area -from taggit.managers import TaggableManager -from django.core.urlresolvers import reverse -from PIL import Image, ImageDraw, ImageFont -from io import BytesIO -import textwrap - -PRESIDENTS_FEATURES = ( - (u'Habilidades intelectuales', ( - ('inteligente', 'Inteligente'), - ('creativo', 'Creativo/a'), - ('objetivo', 'Objetivo'), - ('con_iniciativa', 'Con Iniciativa'), - ('profesional', 'Profesional'), - ('culto', 'Culto/a'), - ('bilingue', 'Bilingüe'), - ) - ), - ('Valores', ( - ('responsable', 'Responsable'), - ('transparente', 'Transparente'), - ('honesto', 'Honesto/a'), - ('equitativo', 'Equitativo/a'), - ('justo', 'Justo/a'), - ('comprometido', 'Comprometido/a'), - ) - ), - ('Habilidades personales', ( - ('integrador', 'Integrador/a'), - ('motivador', 'Motivador/a'), - ('abierto', 'Abierto/a a escuchar'), - ('accesible', 'Accesible'), - ('empatico', 'Empático/a'), - ('confiable', 'Confiable'), - ) - ), - ('Habilidades de rol', ( - ('lider', 'Lider'), - ('administrador', 'Buen Administrador/a'), - ('negociante', 'Buen Negociante'), - ('comunicador', 'Buen Comunicador/a'), - ('influyente', 'Influyente'), - ('eficiente', 'Eficiente'), - ('experiencia', 'Con experiencia'), - ) - ), -) -class KidsGathering(models.Model): - proposer = models.ForeignKey(User, related_name="kids_proposals") - name = models.CharField(max_length=512, - verbose_name="Grupo de participantes") - stats_data = PickledObjectField() - presidents_features = TaggableManager(verbose_name="") - created = models.DateTimeField(auto_now_add=True) - updated = models.DateTimeField(auto_now_add=True) - image = models.ImageField(upload_to='votita/images/', - max_length=512, - null=True, - blank=True, - verbose_name="") - generated_at = models.ForeignKey(Area, - null=True, - blank=True) - comments = models.TextField(verbose_name=u"¿Cómo podemos empoderar mejor a nuestros niños?", - blank=True, - default=u"") - school = models.CharField(max_length=512, - verbose_name="Establecimiento u organización", - blank=True) - - class Meta: - verbose_name = _(u'Encuentro') - verbose_name_plural = _(u"Encuentros") - - @property - def presidents_features_str(self): - result = [] - all_features = {} - for pf in PRESIDENTS_FEATURES: - for c in pf: - if hasattr(c, '__iter__'): - for feature in c: - all_features[feature[0]] = feature[1] - - for feature in self.presidents_features: - result.append(all_features[feature]) - return result - -COLORS = {"diversidad": "#CB78D3", - "salud": "#7AB7FF", - "medio_ambiente": "#49B172", - "politica": "#FEC70D", - "educacion_y_trabajo": "#FA589A", - "cultura": "#FF645B", - "tecnologia": "#7AB7FF", - "proteccion_y_familia": "#FEC70D", - } - -class KidsProposal(PopularProposal): - gathering = models.ForeignKey(KidsGathering, - related_name='proposals', - null=True) - - card_template = "votita/card.html" - detail_template_html = "votita/plantillas/detalle_propuesta.html" - - def generate_og_image(self): - plantilla = Image.open('votai_general_theme/static/img/plantilla_llm.png') - - font_n_propuesta = ImageFont.truetype("votai_general_theme/static/fonts/Nunito-Black.ttf", 24) - font_titulo = ImageFont.truetype("votai_general_theme/static/fonts/Nunito-Black.ttf", 76) - font_autor = ImageFont.truetype("votai_general_theme/static/fonts/WorkSans-Bold.ttf", 21) - bg_color = COLORS[self.clasification] - output = BytesIO() - output.seek(0) - h = bg_color.lstrip('#') - rgb_color = tuple(int(h[i:i+2], 16) for i in (0, 2 ,4)) - rgb_color = rgb_color - base = Image.new('RGBA',(1200,630),rgb_color) - txt = Image.new('RGBA', base.size, (122,183,255,0)) - d = ImageDraw.Draw(txt) - n_propuesta = u"Propuesta N º"+ unicode(self.id) - n_propuesta = n_propuesta.upper() - d.multiline_text((106,73), n_propuesta, font=font_n_propuesta, fill=(0,0,0)) - - lines = textwrap.wrap(self.title, width=30) - max_lines = 3 - if len(lines) > max_lines: - last_line = lines[max_lines - 1] + u'...' - lines = lines[0:max_lines] - lines[max_lines - 1] = last_line - - title = '\n'.join(lines) - - fg_color = (255, 255, 255) - d.multiline_text((106,129), title, font=font_titulo, fill=fg_color) - - proposer_name = self.gathering.name - propuesta_de = proposer_name - d.multiline_text((106,448), propuesta_de, font=font_autor, fill=(0,0,0)) - - - base = Image.alpha_composite(base, txt) - base.paste(plantilla, (0,0), plantilla) - return base - - @classmethod - def get_topic_choices_dict(cls): - from votita.forms.forms import TOPIC_CHOICES_DICT - return TOPIC_CHOICES_DICT - - @property - def ribbon_text(self): - return u"Propuesta generada por niñas, niños y adolescentes" - - class Meta: - verbose_name = _(u'Medida') - verbose_name_plural = _(u"Medidas") - - def get_absolute_url(self): - return reverse('votita:proposal_detail', kwargs={'slug': self.slug}) - - @property - def is_kids(self): - return True diff --git a/votita/rest_api.py b/votita/rest_api.py deleted file mode 100644 index 75ef1c18..00000000 --- a/votita/rest_api.py +++ /dev/null @@ -1,29 +0,0 @@ -from rest_framework.serializers import (HyperlinkedModelSerializer, - JSONField, - StringRelatedField, - HyperlinkedRelatedField) -from rest_framework.viewsets import ReadOnlyModelViewSet -from votita.models import KidsGathering, KidsProposal - - -class KidsGatheringSerializer(HyperlinkedModelSerializer): - proposer = StringRelatedField() - stats_data = StringRelatedField() - class Meta: - model = KidsGathering - fields = ['proposer','name','school','stats_data','proposals'] - -class KidsGatheringViewSet(ReadOnlyModelViewSet): - queryset = KidsGathering.objects.all() - serializer_class = KidsGatheringSerializer - -class KidsProposalSerializer(HyperlinkedModelSerializer): - data = JSONField() - proposer = StringRelatedField() - class Meta: - model = KidsProposal - fields = ('id','title', 'slug', 'get_absolute_url', 'data', 'proposer', 'created', 'clasification','is_local_meeting','nro_supports') - -class KidsProposalViewSet(ReadOnlyModelViewSet): - queryset = KidsProposal.objects.all() - serializer_class = KidsProposalSerializer diff --git a/votita/rest_api_router.py b/votita/rest_api_router.py deleted file mode 100644 index 6041fadf..00000000 --- a/votita/rest_api_router.py +++ /dev/null @@ -1,7 +0,0 @@ -from votita.rest_api import KidsGatheringViewSet, KidsProposalViewSet -from rest_framework import routers - - -router = routers.DefaultRouter() -router.register(r'kidsencuentros', KidsGatheringViewSet) -router.register(r'kidspropuestas', KidsProposalViewSet) diff --git a/votita/stand_alone_urls.py b/votita/stand_alone_urls.py deleted file mode 100644 index 01916083..00000000 --- a/votita/stand_alone_urls.py +++ /dev/null @@ -1,11 +0,0 @@ - -from django.conf.urls import url, include -from votita.rest_api_router import router - -urlpatterns = [ - url(r'^', include('votita.urls', namespace='votita')), - url(r'^api/', include(router.urls)), - url(r'^accounts/', include('votita.urls.registration_urls')), - url(r'^', include('votainteligente.urls')), - -] \ No newline at end of file diff --git a/votita/tests/__init__.py b/votita/tests/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/votita/tests/api_tests.py b/votita/tests/api_tests.py deleted file mode 100644 index 131538c9..00000000 --- a/votita/tests/api_tests.py +++ /dev/null @@ -1,49 +0,0 @@ -# coding=utf-8 -from popular_proposal.tests import ProposingCycleTestCaseBase -from votita.models import KidsGathering, KidsProposal -from rest_framework.test import APIClient -from rest_framework.reverse import reverse -import json -import votita.urls -from django.test import override_settings - -@override_settings(ROOT_URLCONF='votita.stand_alone_urls') -class VotitaRestAPITestCase(ProposingCycleTestCaseBase): - def setUp(self): - super(VotitaRestAPITestCase, self).setUp() - self.client = APIClient() - - def test_get_kids_proposal(self): - kid_proposal = KidsProposal.objects.create(proposer=self.fiera, - area=self.arica, - data=self.data, - title=u'propuesta nna', - clasification=u'educacion' - ) - - url = reverse('kidsproposal-list') - response = self.client.get(url, format='json') - self.assertEquals(response.status_code, 200) - content = json.loads(response.content)["results"] - self.assertEquals(len(content), 1) - self.assertEquals(content[0]['title'], kid_proposal.title) - self.assertEquals(content[0]['id'], kid_proposal.id) - - def test_get_kids_gathering(self): - gathering = KidsGathering.objects.create(proposer=self.fiera, - name="grupo de amigos", - school="alguna escuela" - ) - kid_proposal = KidsProposal.objects.create(proposer=self.fiera, - area=self.arica, - gathering=gathering, - data=self.data, - title=u'propuesta nna', - clasification=u'educacion' - ) - - url = reverse('kidsgathering-list') - response = self.client.get(url, format='json') - self.assertEquals(response.status_code, 200) - content = json.loads(response.content)["results"] - self.assertEquals(len(content[0]['proposals']), 1) \ No newline at end of file diff --git a/votita/tests/forms_tests.py b/votita/tests/forms_tests.py deleted file mode 100644 index d92e5976..00000000 --- a/votita/tests/forms_tests.py +++ /dev/null @@ -1,79 +0,0 @@ -# coding=utf-8 -from popular_proposal.tests import ProposingCycleTestCaseBase -from elections.models import Area -from django.contrib.auth.models import User -from popular_proposal.models import ProposalTemporaryData, PopularProposal, ProposalLike -from popular_proposal.tests.wizard_tests import WizardDataMixin -from django.core import mail -from django.contrib.staticfiles.templatetags.staticfiles import static -from django.template.loader import get_template -from django.contrib.sites.models import Site -from django.test import override_settings -from votita.models import KidsProposal, KidsGathering -from django.core.urlresolvers import reverse -from votita.forms.forms import (CreateGatheringForm, - UpdateGatheringForm, - KidsProposalForm, - AGE_CHOICES, - TOPIC_CHOICES) -from constance.test import override_config -from elections.models import Area - - -USER_PASSWORD = 'secr3t' - - -class CreateGatheringFormTestCase(ProposingCycleTestCaseBase): - def setUp(self): - super(CreateGatheringFormTestCase, self).setUp() - self.a_comuna = Area.objects.filter(classification='Comuna').first() - - def test_create_a_gathering(self): - data = {"name": "Segundo medio C", - "school": "Del mejor cole", - "presidents_features": "inteligente,honesto", - "generated_at": self.a_comuna.id, - "age_range": AGE_CHOICES[1][0], - 'male': 10, - 'female': 10, - 'others': 10,} - form = CreateGatheringForm(data, proposer=self.feli) - self.assertTrue(form.is_valid()) - gathering = form.save() - self.assertEquals(gathering.name, data['name']) - self.assertTrue(gathering.presidents_features.all()) - self.assertEquals(gathering.generated_at, self.a_comuna) - self.assertTrue(gathering.stats_data) - - def test_update_gathering(self): - gathering = KidsGathering.objects.create(proposer=self.feli, - name=u"Título", - school=u"Colegio", - presidents_features=['ingeligente', - 'honesto']) - photo = self.get_image() - data = { - - 'comments': "Muy buena actividad, esto es lindo", - } - file_data = {'image': photo} - form = UpdateGatheringForm(data=data, - files=file_data, - instance=gathering) - self.assertTrue(form.is_valid()) - g = form.save() - g = KidsGathering.objects.get(id=g.id) - self.assertTrue(g.image) - self.assertTrue(g.comments) - - def test_create_proposal_form(self): - data = {"title": "Propuesta", - "solution": "Una muy buena propuesta", - "clasification" : TOPIC_CHOICES[1][0], - } - form = KidsProposalForm(data=data) - self.assertTrue(form.is_valid()) - proposal = form.save(commit=False) - self.assertEquals(proposal.title, data['title']) - self.assertEquals(proposal.data['solution'], data['solution']) - self.assertEquals(proposal.clasification, data['clasification']) diff --git a/votita/tests/model_tests.py b/votita/tests/model_tests.py deleted file mode 100644 index c7b91fc3..00000000 --- a/votita/tests/model_tests.py +++ /dev/null @@ -1,194 +0,0 @@ -# coding=utf-8 -from popular_proposal.tests import ProposingCycleTestCaseBase -from elections.models import Area -from django.contrib.auth.models import User -from popular_proposal.models import ProposalTemporaryData, PopularProposal, ProposalLike -from popular_proposal.tests.wizard_tests import WizardDataMixin -from django.core import mail -from django.contrib.staticfiles.templatetags.staticfiles import static -from django.template.loader import get_template -from django.contrib.sites.models import Site -from django.test import override_settings -from votita.models import KidsProposal, KidsGathering -from django.core.urlresolvers import reverse -from votita.forms.forms import wizard_forms_fields, TOPIC_CHOICES -from constance.test import override_config -from django.contrib.contenttypes.models import ContentType - - -USER_PASSWORD = 'secr3t' - - -class PopularProposalTestCase(ProposingCycleTestCaseBase): - def setUp(self): - super(PopularProposalTestCase, self).setUp() - - def test_instantiate_one(self): - popular_proposal = KidsProposal.objects.create(proposer=self.fiera, - area=self.arica, - data=self.data, - title=u'This is a title', - clasification=u'education' - ) - self.assertIsInstance(popular_proposal, PopularProposal) - self.assertTrue(popular_proposal.is_kids) - content_type = popular_proposal.content_type - expected_content_type = ContentType.objects.get_for_model(KidsProposal) - self.assertEquals(content_type, expected_content_type) - - def test_card(self): - kids_proposal = KidsProposal.objects.create(proposer=self.fiera, - area=self.arica, - data=self.data, - title=u'Kids!!', - clasification=u'education' - ) - expected_card_html = get_template("votita/card.html").render({ - 'proposal': kids_proposal - }) - popular_proposal = PopularProposal.ordered.get(id=kids_proposal.id) - self.assertEquals(popular_proposal.card, expected_card_html) - - def test_display_original_card(self): - kids_proposal = KidsProposal.objects.create(proposer=self.fiera, - area=self.arica, - data=self.data, - title=u'Kids!!', - clasification=u'education' - ) - expected_card_html = get_template("popular_proposal/popular_proposal_card.html").render({ - 'proposal': kids_proposal, - 'original_template': True - }) - - self.assertEquals(kids_proposal.display_card({'original_template': True}), expected_card_html) - - def test_get_classification_text(self): - popular_proposal = KidsProposal.objects.create(proposer=self.fiera, - area=self.arica, - data=self.data, - title=u'This is a title', - clasification=TOPIC_CHOICES[1][0] - ) - self.assertEquals(popular_proposal.get_classification(), TOPIC_CHOICES[1][1]) - popular_proposal = KidsProposal.objects.create(proposer=self.fiera, - area=self.arica, - data=self.data, - title=u'This is a title', - clasification="perrito" - ) - self.assertEquals(popular_proposal.get_classification(), u"") - - def test_listing_all_proposals(self): - url = reverse('popular_proposals:home') - kids_proposal = KidsProposal.objects.create(proposer=self.fiera, - area=self.arica, - data=self.data, - title=u'Kids!!', - clasification=u'education' - ) - response = self.client.get(url) - self.assertIn(kids_proposal, response.context['popular_proposals']) - proposal_again = response.context['popular_proposals'].get(id=kids_proposal.id) - self.assertIsInstance(proposal_again, KidsProposal) - - -class KidsGatheringTestCase(ProposingCycleTestCaseBase): - def setUp(self): - super(KidsGatheringTestCase, self).setUp() - - def test_gathering_can_have_area(self): - stats_data = { - 'male': 10, - 'female': 10, - 'others': 10 - } - a_comuna = Area.objects.filter(classification='Comuna').first() - gathering = KidsGathering.objects.create(proposer=self.fiera, - name=u"Título", - school=u"Colegio", - generated_at=a_comuna, - stats_data=stats_data, - presidents_features=['ingeligente', - 'honesto'], - comments="This is a comment") - self.assertTrue(gathering.created) - self.assertTrue(gathering.updated) - self.assertEquals(gathering.generated_at, a_comuna) - self.assertTrue(gathering.comments) - - def test_a_proposal_is_related_to_it(self): - stats_data = { - 'male': 10, - 'female': 10, - 'others': 10 - } - gathering = KidsGathering.objects.create(proposer=self.fiera, - name=u"Título", - school=u"Colegio", - stats_data=stats_data) - kids_proposal = KidsProposal.objects.create(proposer=self.fiera, - area=self.arica, - gathering=gathering, - data=self.data, - title=u'Kids!!', - clasification=u'education' - ) - self.assertIn(kids_proposal, gathering.proposals.all()) - - def test_instanciate_model(self): - gathering = KidsGathering.objects.create(proposer=self.fiera, - name=u"Título", - school=u"Colegio", - presidents_features=['administrador', - 'comunicador']) - self.assertIn(u'Buen Comunicador/a', gathering.presidents_features_str) - self.assertIn(u'Buen Administrador/a', gathering.presidents_features_str) - self.assertNotIn(u'Con experiencia', gathering.presidents_features_str) - - -@override_config(DEFAULT_AREA='argentina') -class VotitaWizardTestCase(ProposingCycleTestCaseBase, WizardDataMixin): - url = reverse('votita:create_proposal') - wizard_forms_fields = wizard_forms_fields - def setUp(self): - super(VotitaWizardTestCase, self).setUp() - self.example_data = self.get_example_data_for_post() - self.feli = User.objects.get(username='feli') - self.feli.set_password(USER_PASSWORD) - self.feli.save() - - def test_create_a_proposal(self): - argentina = Area.objects.create(name=u'Argentina', id='argentina') - original_amount = len(mail.outbox) - response = self.fill_the_whole_wizard(default_view_slug='votita_wizard',) - temporary_data = response.context['popular_proposal'] - temporary_data = ProposalTemporaryData.objects.get(id=temporary_data.id) - self.assertTrue(temporary_data.created_proposal) - - -@override_config(DEFAULT_AREA='argentina') -class VotitaWizardInsideAGathering(ProposingCycleTestCaseBase, WizardDataMixin): - wizard_forms_fields = wizard_forms_fields - def setUp(self): - argentina = Area.objects.create(name=u'Argentina', id='argentina') - self.example_data = self.get_example_data_for_post() - self.feli = User.objects.get(username='feli') - self.feli.set_password(USER_PASSWORD) - self.feli.save() - stats_data = { - 'male': 10, - 'female': 10, - 'others': 10 - } - self.gathering = KidsGathering.objects.create(proposer=self.feli, - name=u"Título", - school=u"Colegio", - stats_data=stats_data) - self.url = reverse('votita:create_proposal_for_gathering_wizard', - kwargs={'pk':self.gathering.id}) - - def test_create_a_proposal_with_a_gathering(self): - response = self.fill_the_whole_wizard(default_view_slug='votita_wizard',) - temporary_data = response.context['popular_proposal'] - self.assertTrue(temporary_data.created_proposal) diff --git a/votita/tests/views_tests.py b/votita/tests/views_tests.py deleted file mode 100644 index fce23d44..00000000 --- a/votita/tests/views_tests.py +++ /dev/null @@ -1,302 +0,0 @@ -# coding=utf-8 -from popular_proposal.tests import ProposingCycleTestCaseBase -from popular_proposal.tests.wizard_tests import WizardDataMixin -from django.contrib.auth.models import User -from django.core.urlresolvers import reverse -from votita.models import KidsProposal, KidsGathering -from votita.forms.forms import UpdateGatheringForm, TOPIC_CHOICES, AGE_CHOICES -from popular_proposal.models import PopularProposal - - -USER_PASSWORD = 'secr3t' - - -class GateheringCreateViewTestCase(ProposingCycleTestCaseBase, WizardDataMixin): - def setUp(self): - super(GateheringCreateViewTestCase, self).setUp() - self.feli = User.objects.get(username='feli') - self.feli.set_password(USER_PASSWORD) - self.feli.save() - - def test_get_to_create_a_gathering(self): - self.client.login(username=self.feli.username, password=USER_PASSWORD) - url = reverse('votita:create_gathering') - response = self.client.get(url) - self.assertEquals(response.status_code, 200) - - def test_get_to_create_a_gathering_non_user(self): - url = reverse('votita:create_gathering') - response = self.client.get(url) - login_url = reverse('auth_login') + "?next=" + url - self.assertRedirects(response, login_url) - - def test_post_to_create_a_gathering(self): - self.client.login(username=self.feli.username, password=USER_PASSWORD) - url = reverse('votita:create_gathering') - data = {'name': u"Título", - "presidents_features": ["inteligente"], - 'school': "La mejor escuela de todas", - "age_range": AGE_CHOICES[1][0], - 'male': 10, - 'female': 10, - 'others': 10,} - response = self.client.post(url, data=data, follow=True) - self.assertEquals(response.context['object'].name, data['name']) - self.assertEquals(response.status_code, 200) - self.assertEquals(response.context['object'].proposer, self.feli) - self.assertEquals(response.context['object'].stats_data['male'], - data['male']) - - def test_creating_proposal_for_gathering_get_view(self): - gathering = KidsGathering.objects.create(name=u"Título", - school=u"Colegio", - proposer=self.feli) - url = reverse('votita:proposal_for_gathering', - kwargs={'pk':gathering.id}) - self.client.login(username=self.feli.username, password=USER_PASSWORD) - response = self.client.get(url) - self.assertEquals(response.status_code, 200) - self.assertIn('formset', response.context) - formset = response.context['formset'] - self.assertEquals(formset.instance, gathering) - self.assertEquals(formset.model, KidsProposal) - - def test_creating_proposal_for_gathering_get_view_by_non_owner(self): - gathering = KidsGathering.objects.create(name=u"Título", - school=u"Colegio", - proposer=self.feli) - url = reverse('votita:proposal_for_gathering', - kwargs={'pk':gathering.id}) - response = self.client.get(url) - login_url = reverse('auth_login') + "?next=" + url - self.assertRedirects(response, login_url) - # The non owner - non_owner = User.objects.create_user(username="non_owner", password=USER_PASSWORD) - self.client.login(username=non_owner.username, password=USER_PASSWORD) - response = self.client.get(url) - self.assertEquals(response.status_code, 404) - - def test_creating_proposal_for_gathering_post_view(self): - gathering = KidsGathering.objects.create(name=u"Título", - school=u"Colegio", - proposer=self.feli) - url = reverse('votita:proposal_for_gathering', - kwargs={'pk':gathering.id}) - - self.client.login(username=self.feli.username, password=USER_PASSWORD) - data = {'proposals-0-title': "perrito", - 'proposals-0-clasification': TOPIC_CHOICES[1][0], - "proposals-1-gathering": 1, - "proposals-TOTAL_FORMS": 1, - "proposals-INITIAL_FORMS": 0, - "proposals-MIN_NUM_FORMS": 1, - "proposals-MAX_NUM_FORMS": 1000 - } - response = self.client.post(url, data=data) - update_gathering_url = reverse('votita:update_gathering', - kwargs={'pk':gathering.id}) - self.assertRedirects(response, update_gathering_url) - proposal = KidsProposal.objects.get(gathering=gathering) - self.assertEquals(proposal.title, data['proposals-0-title']) - self.assertEquals(proposal.proposer, self.feli) - self.assertEquals(proposal.clasification, data['proposals-0-clasification']) - - def test_update_gathering_get(self): - gathering = KidsGathering.objects.create(name=u"Título", - school=u"Colegio", - proposer=self.feli) - url = reverse('votita:update_gathering', - kwargs={'pk':gathering.id}) - self.client.login(username=self.feli.username, password=USER_PASSWORD) - response = self.client.get(url) - self.assertEquals(response.status_code, 200) - form = response.context['form'] - self.assertIsInstance(form, UpdateGatheringForm) - self.assertEquals(form.instance, gathering) - - def test_update_gathering_get_view_by_non_owner(self): - gathering = KidsGathering.objects.create(name=u"Título", - school=u"Colegio", - proposer=self.feli) - url = reverse('votita:update_gathering', - kwargs={'pk':gathering.id}) - response = self.client.get(url) - login_url = reverse('auth_login') + "?next=" + url - self.assertRedirects(response, login_url) - # The non owner - non_owner = User.objects.create_user(username="non_owner", password=USER_PASSWORD) - self.client.login(username=non_owner.username, password=USER_PASSWORD) - response = self.client.get(url) - self.assertEquals(response.status_code, 404) - - def test_get_thanks_for_creating_a_proposal(self): - gathering = KidsGathering.objects.create(name=u"Título", - school=u"Colegio", - proposer=self.feli) - url = reverse('votita:thanks_for_creating_a_gathering', - kwargs={'pk':gathering.id}) - self.client.login(username=self.feli.username, password=USER_PASSWORD) - response = self.client.get(url) - self.assertEquals(response.status_code, 200) - self.assertEquals(response.context['gathering'], gathering) - - def test_get_thanks_for_creating_a_proposal_non_owner(self): - gathering = KidsGathering.objects.create(name=u"Título", - school=u"Colegio", - proposer=self.feli) - url = reverse('votita:thanks_for_creating_a_gathering', - kwargs={'pk':gathering.id}) - response = self.client.get(url) - login_url = reverse('auth_login') + "?next=" + url - self.assertRedirects(response, login_url) - # The non owner - non_owner = User.objects.create_user(username="non_owner", password=USER_PASSWORD) - self.client.login(username=non_owner.username, password=USER_PASSWORD) - response = self.client.get(url) - self.assertEquals(response.status_code, 404) - - def test_update_gathering_post(self): - gathering = KidsGathering.objects.create(name=u"Título", - school=u"Colegio", - proposer=self.feli) - url = reverse('votita:update_gathering', - kwargs={'pk':gathering.id}) - self.client.login(username=self.feli.username, password=USER_PASSWORD) - photo = self.get_image() - data = { - 'image': photo - } - response = self.client.post(url, data=data) - thanks_url = reverse('votita:thanks_for_creating_a_gathering', - kwargs={'pk':gathering.id}) - self.assertRedirects(response, thanks_url) - g = KidsGathering.objects.get(id=gathering.id) - self.assertTrue(g.image) - -class GatheringViewTestCase(ProposingCycleTestCaseBase, WizardDataMixin): - def setUp(self): - super(GatheringViewTestCase, self).setUp() - self.feli = User.objects.get(username='feli') - self.feli.set_password(USER_PASSWORD) - self.feli.save() - - def test_show_gathering_info(self): - gathering = KidsGathering.objects.create(name=u"Título", - school=u"Colegio", - proposer=self.feli) - url = reverse('votita:ver_encuentro', - kwargs={'pk':gathering.id}) - response = self.client.get(url) - self.assertEquals(response.status_code, 200) - self.assertEquals(response.context['object'], gathering) - - def test_list_gatherings(self): - gathering1 = KidsGathering.objects.create(name=u"Título", - school=u"Colegio", - proposer=self.feli) - gathering2 = KidsGathering.objects.create(name=u"Título", - school=u"Colegio", - proposer=self.feli) - gathering3 = KidsGathering.objects.create(name=u"Título", - school=u"Colegio", - proposer=self.feli) - url = reverse('votita:list_gatherings') - response = self.client.get(url) - self.assertEquals(response.status_code, 200) - self.assertIn(gathering1, response.context['gatherings'].all()) - self.assertIn(gathering2, response.context['gatherings'].all()) - self.assertIn(gathering3, response.context['gatherings'].all()) - -class LandingPage(ProposingCycleTestCaseBase, WizardDataMixin): - def test_get_home(self): - proposal1 = KidsProposal.objects.create(proposer=self.fiera, - area=self.arica, - data=self.data, - title=u'This is a title1', - clasification=u'education' - ) - proposal2 = KidsProposal.objects.create(proposer=self.fiera, - area=self.arica, - data=self.data, - title=u'This is a title2', - clasification=u'education', - featured=True, - ) - url = reverse('votita:index') - response = self.client.get(url) - self.assertEquals(response.status_code, 200) - self.assertTemplateUsed(response, 'votita/index.html') - self.assertIn(proposal2, response.context['featured_proposals']) - self.assertNotIn(proposal1, response.context['featured_proposals']) - - -class KidsProposalViewsTestCase(ProposingCycleTestCaseBase): - def test_list_proposals(self): - p1 = PopularProposal.objects.create(proposer=self.fiera, - data=self.data, - title="Title", - clasification=u'education') - proposal1 = KidsProposal.objects.create(proposer=self.fiera, - area=self.arica, - data=self.data, - title=u'This is a title1', - clasification=u'education' - ) - proposal2 = KidsProposal.objects.create(proposer=self.fiera, - area=self.arica, - data=self.data, - title=u'This is a title2', - clasification=u'education' - ) - url = reverse("votita:list_proposals") - response = self.client.get(url) - self.assertIn(proposal1, response.context['proposals'].all()) - self.assertIn(proposal2, response.context['proposals'].all()) - self.assertNotIn(p1, response.context['proposals'].all()) - - def test_detail_view(self): - proposal1 = KidsProposal.objects.create(proposer=self.fiera, - area=self.arica, - data=self.data, - title=u'This is a title1', - clasification=u'education' - ) - url = reverse("votita:proposal_detail", kwargs={'slug': proposal1.slug}) - self.assertEquals(url, proposal1.get_absolute_url()) - response = self.client.get(url) - self.assertEquals(response.status_code, 200) - self.assertEquals(proposal1, response.context['proposal']) - self.assertTemplateUsed(response, 'votita/detalle_propuesta.html') - - -from django.test import override_settings - - -@override_settings(ROOT_URLCONF='votita.stand_alone_urls') -class StandAloneSite(ProposingCycleTestCaseBase): - def test_get_all_public_urls(self): - response = self.client.get(reverse('votita:index')) - self.assertEquals(response.status_code, 200) - - response = self.client.get(reverse('votita:list_gatherings')) - self.assertEquals(response.status_code, 200) - - gathering = KidsGathering.objects.create(name=u"Título", - proposer=self.feli) - - url = reverse('votita:ver_encuentro', - kwargs={'pk':gathering.id}) - response = self.client.get(url) - self.assertEquals(response.status_code, 200) - - def test_login_page(self): - url = reverse('votita_auth:login') - response = self.client.get(url) - self.assertTemplateUsed(response, 'votita/registration/login_citizens.html') - self.assertEquals(response.status_code, 200) - - def test_views_redirect_to_login(self): - url = reverse('votita:create_gathering') - login_url = reverse('votita_auth:login') - response = self.client.get(url) - self.assertRedirects(response, login_url + "?next=" + url) diff --git a/votita/urls/__init__.py b/votita/urls/__init__.py deleted file mode 100644 index cbd2a6d8..00000000 --- a/votita/urls/__init__.py +++ /dev/null @@ -1,57 +0,0 @@ - -from django.conf.urls import include, url -from votita.views import (VotitaWizard, - CreateGatheringView, - CreateProposalsForGathering, - UpdateGatheringView, - ThanksForCreating, - GatheringListView, - ProposalListView, - ProposalDetailView, - GatheringView, - HomeView,) -from django.views.generic import TemplateView -from django.views.decorators.clickjacking import xframe_options_exempt - - -urlpatterns = [ - #url(r'^$', TemplateView.as_view(template_name="votita/index.html"), - # name='index'), - url(r'^$', (xframe_options_exempt(HomeView.as_view())), name='index'), - url(r'^materiales/$', - TemplateView.as_view(template_name='votita/materiales.html'), - name='materiales'), - url(r'^que-es/$', - TemplateView.as_view(template_name='votita/que-es.html'), - name='que-es'), - url(r'^crear/?$', - VotitaWizard.as_view(), - name='create_proposal'), - url(r'^crear_propuestas/(?P\d+)/?$', - CreateProposalsForGathering.as_view(), - name='proposal_for_gathering'), - url(r'^actualizar_encuentro/(?P\d+)/?$', - UpdateGatheringView.as_view(), - name='update_gathering'), - url(r'^gracias_por_crear/(?P\d+)/?$', - ThanksForCreating.as_view(), - name='thanks_for_creating_a_gathering'), - url(r'^crear_propuestas_wizard/(?P\d+)/?$', - VotitaWizard.as_view(), - name='create_proposal_for_gathering_wizard'), - url(r'^crear_encuentro/?$', - CreateGatheringView.as_view(), - name='create_gathering'), - url(r'^ver_encuentro/(?P\d+)/?$', - GatheringView.as_view(), - name='ver_encuentro'), - url(r'^encuentros/?$', - GatheringListView.as_view(), - name='list_gatherings'), - url(r'^propuestas/?$', - ProposalListView.as_view(), - name='list_proposals'), - url(r'^propuestas/(?P[-\w]+)/?$', - ProposalDetailView.as_view(), - name='proposal_detail'), -] diff --git a/votita/urls/auth_urls.py b/votita/urls/auth_urls.py deleted file mode 100644 index 7d0130fd..00000000 --- a/votita/urls/auth_urls.py +++ /dev/null @@ -1,17 +0,0 @@ -from django.conf.urls import url -from django.contrib.auth import views - -urlpatterns = [ - url(r'^login/$', - views.login, - {'template_name': 'votita/registration/login_citizens.html'}, - name='login'), - url(r'^logout/$', views.logout, name='logout'), - url(r'^password_change/$', views.password_change, name='password_change'), - url(r'^password_change/done/$', views.password_change_done, name='password_change_done'), - url(r'^password_reset/$', views.password_reset, name='password_reset'), - url(r'^password_reset/done/$', views.password_reset_done, name='password_reset_done'), - url(r'^reset/(?P[0-9A-Za-z_\-]+)/(?P[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$', - views.password_reset_confirm, name='password_reset_confirm'), - url(r'^reset/done/$', views.password_reset_complete, name='password_reset_complete'), -] diff --git a/votita/urls/registration_urls.py b/votita/urls/registration_urls.py deleted file mode 100644 index 00fc266e..00000000 --- a/votita/urls/registration_urls.py +++ /dev/null @@ -1,37 +0,0 @@ -""" -URLconf for registration and activation, using django-registration's -HMAC activation workflow. -""" - -from django.conf.urls import include, url -from django.views.generic.base import TemplateView - -from registration.backends.hmac import views - - -urlpatterns = [ - url(r'^activate/complete/$', - TemplateView.as_view( - template_name='registration/activation_complete.html' - ), - name='registration_activation_complete'), - # The activation key can make use of any character from the - # URL-safe base64 alphabet, plus the colon as a separator. - url(r'^activate/(?P[-:\w]+)/$', - views.ActivationView.as_view(), - name='registration_activate'), - url(r'^register/$', - views.RegistrationView.as_view(), - name='registration_register'), - url(r'^register/complete/$', - TemplateView.as_view( - template_name='registration/registration_complete.html' - ), - name='registration_complete'), - url(r'^register/closed/$', - TemplateView.as_view( - template_name='registration/registration_closed.html' - ), - name='registration_disallowed'), - url(r'', include('registration.auth_urls')), -] diff --git a/votita/views.py b/votita/views.py deleted file mode 100644 index 10156900..00000000 --- a/votita/views.py +++ /dev/null @@ -1,162 +0,0 @@ -from popular_proposal.views.wizard import ProposalWizardBase -from votita.forms.forms import (wizard_forms_fields, - CreateGatheringForm, - UpdateGatheringForm, - KidsProposalForm, - TOPIC_CHOICES) -from popular_proposal.forms import (get_form_list,) -from django.views.generic.edit import CreateView, UpdateView -from votita.models import KidsProposal, KidsGathering -from django.forms import inlineformset_factory, ChoiceField -from django.views.generic.base import View -from django.shortcuts import render_to_response, redirect -from django.core.urlresolvers import reverse -from django.views.generic.detail import DetailView -from django.contrib.auth.mixins import LoginRequiredMixin -from django.views.generic.list import ListView -from django.conf import settings -from votai_utils.views import HomeViewBase -from django.db.models import Count - - -wizard_form_list = get_form_list(wizard_forms_fields=wizard_forms_fields) - - -class VotitaLoginRequiredMixin(LoginRequiredMixin): - - def get_login_url(self): - votita_urlconf = 'votita.stand_alone_urls' - if settings.ROOT_URLCONF == votita_urlconf or (hasattr(self.request, 'urlconf') and self.request.urlconf == votita_urlconf): - return reverse('votita_auth:login') - return reverse('auth_login') - -class VotitaWizard(ProposalWizardBase): - form_list = wizard_form_list - template_name = 'popular_proposal/wizard/form_step.html' - - -class CreateGatheringView(VotitaLoginRequiredMixin, CreateView): - form_class = CreateGatheringForm - template_name = 'votita/create_gathering.html' - - def get_form_kwargs(self): - kwargs = super(CreateGatheringView, self).get_form_kwargs() - kwargs['proposer'] = self.request.user - return kwargs - - def get_success_url(self): - return reverse('votita:proposal_for_gathering', - kwargs={'pk':self.object.id}) - - -class UpdateGatheringView(VotitaLoginRequiredMixin, UpdateView): - model = KidsGathering - form_class = UpdateGatheringForm - template_name = 'votita/update_gathering.html' - - def get_queryset(self, *args, **kwargs): - qs = super(UpdateGatheringView, self).get_queryset(*args, **kwargs) - qs = qs.filter(proposer=self.request.user) - return qs - - def get_success_url(self): - return reverse('votita:thanks_for_creating_a_gathering', - kwargs={'pk': self.object.pk}) - -class ThanksForCreating(VotitaLoginRequiredMixin, DetailView): - model = KidsGathering - template_name = 'votita/thanks_for_creating_a_gathering.html' - context_object_name = 'gathering' - - def get_queryset(self, *args, **kwargs): - qs = super(ThanksForCreating, self).get_queryset(*args, **kwargs) - qs = qs.filter(proposer=self.request.user) - return qs - -class GatheringView(DetailView): - model = KidsGathering - template_name = 'votita/view_gathering_detail.html' - - -def formfield_callback(field, **kwargs): - if field.name == 'clasification': - return ChoiceField(choices=TOPIC_CHOICES, **kwargs) - return field.formfield(**kwargs) - -ProposalFormSet = inlineformset_factory(KidsGathering, - KidsProposal, - form=KidsProposalForm, - can_delete=False, - labels={ - 'title': u"La propuesta", - }) - - -class CreateProposalsForGathering(VotitaLoginRequiredMixin, UpdateView): - model = KidsGathering - template_name = 'votita/agregar_propuestas_a_encuentro.html' - fields = [] - success_url = 'votita:update_gathering' - - def get_queryset(self, *args, **kwargs): - qs = super(CreateProposalsForGathering, self).get_queryset(*args, **kwargs) - qs = qs.filter(proposer=self.request.user) - return qs - - def get_context_data(self, **kwargs): - context = super(CreateProposalsForGathering, self).get_context_data(**kwargs) - - if self.request.POST: - context['formset'] = ProposalFormSet(self.request.POST, instance=self.object) - context['formset'].full_clean() - else: - context['formset'] = ProposalFormSet(instance=self.object) - return context - - def form_valid(self, form): - context = self.get_context_data() - formset = context['formset'] - if formset.is_valid(): - self.object = form.save() - proposals = formset.save(commit=False) - for proposal in proposals: - proposal.proposer = self.request.user - proposal.save() - return redirect(reverse(self.success_url, kwargs={'pk': self.object.pk})) - else: - return self.render_to_response(self.get_context_data(form=form)) - - -class GatheringListView(ListView): - model = KidsGathering - template_name = "votita/lista_encuentros.html" - context_object_name = 'gatherings' - - - -class ProposalListView(ListView): - model = KidsProposal - template_name = "votita/lista_propuesta.html" - context_object_name = 'proposals' - - def get_queryset(self): - qs = super(ProposalListView, self).get_queryset() - qs = qs.annotate(num_likers=Count('likers')) - qs = qs.order_by('-num_likers') - return qs - - -class ProposalDetailView(DetailView): - model = KidsProposal - template_name = "votita/detalle_propuesta.html" - context_object_name = 'proposal' - -class HomeView(HomeViewBase): - template_name="votita/index.html" - - def get_context_data(self, **kwargs): - context = super(HomeView, self).get_context_data(**kwargs) - featured_proposals = KidsProposal.objects.filter(featured=True) - #cache.set('featured_proposals', featured_proposals, 600) - context['featured_proposals'] = featured_proposals - return context \ No newline at end of file