diff --git a/.gitignore b/.gitignore index 83de47a86..52baa1622 100644 --- a/.gitignore +++ b/.gitignore @@ -92,4 +92,6 @@ collected_static bower bower_components media -whoosh/ \ No newline at end of file +whoosh/ +postgres-data/ +data/ diff --git a/.travis.yml b/.travis.yml index bf5ee38fd..0e0a27ad4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -20,3 +20,7 @@ script: - ./manage.py bower install - py.test --create-db # - ./test_and_check_qa.sh + +addons: + hosts: + - 127.0.0.1 sapldb diff --git a/Dockerfile b/Dockerfile index 9880dc4ef..6551f656b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,53 +1,34 @@ -FROM ubuntu:15.04 - -RUN locale-gen en_US.UTF-8 -ENV LANG en_US.UTF-8 -ENV LANGUAGE en_US:en -ENV LC_ALL en_US.UTF-8 - -RUN mkdir /sapl - -RUN echo "deb http://archive.ubuntu.com/ubuntu/ vivid universe" | tee -a "/etc/apt/sources.list" - -RUN \ - apt-get update && \ - apt-get install -y -f \ - software-properties-common \ - libpq-dev \ - graphviz-dev \ - graphviz \ - build-essential \ - git \ - pkg-config \ - python3-dev \ - libxml2-dev \ - libjpeg-dev \ - libssl-dev \ - libffi-dev \ - libxslt1-dev \ - python3-setuptools \ - curl - -# use python3 in pip -RUN easy_install3 pip lxml - -# install nodejs -RUN DEBIAN_FRONTEND=noninteractive curl -sL https://deb.nodesource.com/setup_5.x | bash - -RUN DEBIAN_FRONTEND=noninteractive apt-get install -y nodejs - -# install bower -RUN npm install -g bower +FROM alpine:3.5 + +ENV BUILD_PACKAGES postgresql-dev graphviz-dev graphviz build-base git pkgconfig \ +python3-dev libxml2-dev jpeg-dev libressl-dev libffi-dev libxslt-dev nodejs py3-lxml \ +py3-magic postgresql-client vim + +RUN apk add --no-cache python3 && \ + python3 -m ensurepip && \ + rm -r /usr/lib/python*/ensurepip && \ + pip3 install --upgrade pip setuptools && \ + rm -r /root/.cache + +RUN mkdir -p /var/interlegis/sapl &&\ + apk add --update --no-cache $BUILD_PACKAGES && \ + npm install -g bower # Bower aceitar root -RUN touch /root/.bowerrc -RUN chmod 751 /root/.bowerrc -RUN echo "{ \"allow_root\": true }" >> /root/.bowerrc +RUN touch /root/.bowerrc \ +&& chmod 751 /root/.bowerrc \ +&& echo "{ \"allow_root\": true }" >> /root/.bowerrc \ +&& npm cache clean + +WORKDIR /var/interlegis/sapl/ + +ADD . /var/interlegis/sapl/ -WORKDIR /sapl +COPY start.sh /var/interlegis/sapl/ -ADD . /sapl +RUN chmod +x /var/interlegis/sapl/start.sh -RUN pip install -r requirements/dev-requirements.txt -RUN pip install --upgrade setuptools +RUN pip install -r /var/interlegis/sapl/requirements/requirements.txt --upgrade setuptools -# RUN python3 manage.py bower install +VOLUME ["/var/interlegis/sapl/data", "/var/interlegis/sapl/media", "/var/interlegis/sapl/collected_static"] +ENTRYPOINT ["/var/interlegis/sapl/start.sh"] diff --git a/busy-wait.sh b/busy-wait.sh new file mode 100644 index 000000000..128592ffc --- /dev/null +++ b/busy-wait.sh @@ -0,0 +1,10 @@ +#!/bin/sh + +while true; do + COUNT_PG=`psql --dbname=postgresql://sapl:sapl@sapldb/sapl -c '\l \q' | grep sapl | wc -l` + if ! [ "$COUNT_PG" -eq "0" ]; then + break + fi + echo "Esperando Database Setup" + sleep 10 +done diff --git a/config/env-sample b/config/env-sample new file mode 100644 index 000000000..c358f9017 --- /dev/null +++ b/config/env-sample @@ -0,0 +1,8 @@ +DATABASE_URL = postgresql://postgres:@sapldb:/sapl +KEY +DEBUG = False +EMAIL_USE_TLS = True +EMAIL_PORT = 587 +EMAIL_HOST = '' +EMAIL_HOST_USER = '' +EMAIL_HOST_PASSWORD = '' diff --git a/config/nginx/sapl.conf b/config/nginx/sapl.conf new file mode 100644 index 000000000..ef3dac421 --- /dev/null +++ b/config/nginx/sapl.conf @@ -0,0 +1,39 @@ +upstream sapl_server { + + server unix:/var/interlegis/sapl/run/gunicorn.sock fail_timeout=0; + +} + +server { + + listen 80; + server_name sapl.test; + + client_max_body_size 4G; + + location /static/ { + alias /var/interlegis/sapl/collected_static/; + } + + location /media/ { + alias /var/interlegis/sapl/media/; + } + + location / { + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + + proxy_set_header Host $http_host; + + proxy_redirect off; + + + if (!-f $request_filename) { + proxy_pass http://sapl_server; + break; + } + } + error_page 500 502 503 504 /500.html; + location = /500.html { + root /var/interlegis/sapl/sapl/static/; + } +} diff --git a/docker-compose.yml b/docker-compose.yml index 8de57e3aa..a073bb4ee 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,17 +1,31 @@ -localhost: +server: + image: nginx:latest + ports: + - "80:80" + volumes: + - ./config/nginx:/etc/nginx/conf.d + - ./collected_static:/var/interlegis/sapl/collected_static + - ./media:/var/interlegis/sapl/media + volumes_from: + - web +sapldb: image: postgres environment: POSTGRES_PASSWORD: sapl POSTGRES_USER: sapl POSTGRES_DB: sapl + PGDATA : /var/lib/postgresql/data/ + volumes: + - ./postgres-data/data/:/var/lib/postgresql/data/ + - ./data:/data-import ports: - "5532:5432" web: build: . - command: /bin/sh -c "/bin/sh busy-wait.sh && python3 manage.py bower install && python3 manage.py migrate && /bin/sh gunicorn_start.sh /sapl" volumes: - - .:/sapl - ports: - - "8000:8000" + - .:/var/interlegis/sapl/ + - ./data:/var/interlegis/sapl/data + - ./media:/var/interlegis/sapl/media + - ./collected_static:/var/interlegis/sapl/collected_static links: - - localhost + - sapldb diff --git a/docker-env.sh b/docker-env.sh new file mode 100644 index 000000000..07528b0f1 --- /dev/null +++ b/docker-env.sh @@ -0,0 +1,6 @@ +#/bin/bash + +KEY=`python gen-key.py` +echo $KEY + +sed -e "s/SECRET_KEY = None/SECRET_KEY = $KEY/g" config/env-sample diff --git a/envfile b/envfile new file mode 100644 index 000000000..a7aef4b0f --- /dev/null +++ b/envfile @@ -0,0 +1 @@ +EMAIL_HOST_USER=foo diff --git a/genkey.py b/genkey.py new file mode 100644 index 000000000..85f399c54 --- /dev/null +++ b/genkey.py @@ -0,0 +1,7 @@ +import random + +def generate_secret(): + return ''.join([random.SystemRandom().choice('abcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*(-_=+)') for i in range(50)]) + +if __name__ == '__main__': + print(generate_secret()) diff --git a/gunicorn_start.sh b/gunicorn_start.sh index 34147cb97..9669644fa 100755 --- a/gunicorn_start.sh +++ b/gunicorn_start.sh @@ -12,23 +12,17 @@ then fi NAME="SAPL" # Name of the application (*) -DJANGODIR=/var/interlegis/sapl # Django project directory (*) +DJANGODIR=/var/interlegis/sapl/ # Django project directory (*) SOCKFILE=/var/interlegis/sapl/run/gunicorn.sock # we will communicate using this unix socket (*) USER=`whoami` # the user to run as (*) GROUP=`whoami` # the group to run as (*) -NUM_WORKERS=9 # how many worker processes should Gunicorn spawn (*) +NUM_WORKERS=3 # how many worker processes should Gunicorn spawn (*) # NUM_WORKERS = 2 * CPUS + 1 DJANGO_SETTINGS_MODULE=sapl.settings # which settings file should Django use (*) DJANGO_WSGI_MODULE=sapl.wsgi # WSGI module name (*) echo "Starting $NAME as `whoami` on base dir $SAPL_DIR" -# Activate the virtual environment -cd $DJANGODIR -source /var/interlegis/.virtualenvs/sapl/bin/activate -export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE -export PYTHONPATH=$DJANGODIR:$PYTHONPATH - # Create the run directory if it doesn't exist RUNDIR=$(dirname $SOCKFILE) test -d $RUNDIR || mkdir -p $RUNDIR diff --git a/sapl/.env_test b/sapl/.env_test index 5c2c60ec1..9416d402d 100644 --- a/sapl/.env_test +++ b/sapl/.env_test @@ -1,4 +1,4 @@ -DATABASE_URL = postgresql://postgres:@localhost:/sapl +DATABASE_URL = postgresql://postgres:@sapldb:/sapl SECRET_KEY=TravisTest DEBUG=False EMAIL_USE_TLS = True diff --git a/sapl/static/styles/app.css b/sapl/static/styles/app.css new file mode 100644 index 000000000..e7146b1f4 --- /dev/null +++ b/sapl/static/styles/app.css @@ -0,0 +1 @@ +.logo img{width:40px;height:40px;margin:5px 15px}.vcenter{display:inline-block;vertical-align:middle;float:none;padding:10px}nav.navbar{border-radius:0;font-size:15px}nav .navbar-nav>li>a{padding-top:0px;padding-bottom:0px;line-height:75px}nav .navbar-nav>li>a:hover{background-color:#23527c}nav .navbar-nav>li:nth-child(2)>.dropdown-menu{right:auto}nav .navbar-nav:last-child>li:last-child a{padding-right:0px}.masthead{padding:10px}.masthead .nav{clear:both}.masthead .navbar-brand{color:inherit;font-size:24px}.masthead .navbar-brand img.img-responsive{height:95px;margin-right:15px}.masthead .navbar-brand small{color:#93A4AA;font-size:75%;line-height:25px}.navbar{margin-bottom:0}.navbar-brand{padding:0px}h1,.h1{font-size:30px}h2,.h2{font-size:24px}h3,.h3{font-size:20px}h4,.h4{font-size:16px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}.page-header{margin:20px 0px 10px}.btn:hover,.btn:focus{color:inherit}.caret.top{transform:rotate(180deg)}.btn-default.btn-excluir{color:#d9534f}.btn-default.btn-excluir:hover{color:#fff;border-color:#de6764;background-color:#de6764}.controls-file{padding:10px;border:1px solid #d6e1e5;border-radius:4px}.controls-file label.checkbox-inline{margin:0px;display:block}.controls-radio-checkbox{padding:0px;border:1px solid #d6e1e5;border-radius:4px;min-height:20px}.controls-radio-checkbox .help-block{margin:15px;padding:15px;border:2px dashed #d6e1e5}.controls-radio-checkbox label{padding:5px}.controls-radio-checkbox label .icons{top:5px;left:8px}.controls-radio-checkbox label.checkbox-inline,.controls-radio-checkbox label.radio-inline{padding:8px;padding-left:36px}.controls-radio-checkbox label.checkbox-inline .icons,.controls-radio-checkbox label.radio-inline .icons{top:8px;left:8px}.controls-radio-checkbox .checkbox,.controls-radio-checkbox .radio,.controls-radio-checkbox .checkbox-inline,.controls-radio-checkbox .radio-inline{margin:0}.controls-radio-checkbox .checkbox:hover,.controls-radio-checkbox .radio:hover,.controls-radio-checkbox .checkbox-inline:hover,.controls-radio-checkbox .radio-inline:hover{background-color:#d6e1e5}p.control-label{font-weight:bold}.legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5;clear:both}.grid-gutter-width-right{margin-right:15px}html{position:relative;min-height:100%}body{margin-bottom:160px}.footer{position:absolute;bottom:0;width:100%;height:140px;background:#364347 none repeat scroll 0% 0%;color:white;text-align:center}.footer p{color:white;margin-top:10px}.footer .container{padding-top:25px}.pagination{padding-top:25px}.modal .alert{margin-bottom:0}fieldset fieldset{font-size:95%}fieldset fieldset legend{font-size:18px}.avatar-parlamentar{height:84px;width:84px}#conteudo{position:relative;padding:2em 1.5em 1.5em 1.5em;overflow:hidden;font-size:100%;text-align:left;min-height:350px;max-width:1000px;margin:0 auto}#conteudo a:hover{color:#444;-webkit-transition:0.3s ease-in;-moz-transition:0.3s ease-in;-o-transition:0.3s ease-in}#homeIndex{text-align:center}.homeBanner span{color:white;font-size:32px;font-weight:600;display:inline-block;vertical-align:middle;padding:2px 45px 4px;border:2px solid}.homeBanner::after{display:inline-block;vertical-align:middle;height:100%}.homeBlock{display:inline-block;position:relative;background-color:#F3F3F3;width:190px;height:260px;margin:3px;text-align:center;font-size:0;overflow:hidden}.homeBlock>a{display:block;position:absolute;width:100%;height:100%;top:0;left:0}.homeBlock::after{content:'';display:inline-block;vertical-align:middle;height:100%;overflow:visible;clear:none;visibility:initial}.homeContent{position:relative;padding:10px;text-align:justify;font-size:14px;color:#FFF;opacity:0;transition:opacity 0.5s ease;display:inline-block;vertical-align:middle}.homeContent p{display:block;line-height:13px;font-size:80%;color:white}.homeIcon{position:relative;display:inline-block;width:105px;height:105px;border-radius:50%;background:#364347;z-index:1}.homeIcon::before{content:'';position:absolute;width:100%;height:100%;border-radius:50%;background:#364347;top:0;left:0;transform:scale(0.95);transition:transform 0.6s ease}.homeIcon img{position:absolute;margin:auto;top:0;bottom:0;right:0;left:0;transition:opacity 0.4s 0.4s ease}.homeFront{position:absolute;top:46%;width:100%;font-size:0;transform:translateY(-60%)}.homeFront h2{position:absolute;margin-top:18px;font-size:22px;font-weight:700;color:#595959 !important;width:100%;padding:0 6%;z-index:0}.homeTitle{display:block;height:32px;text-align:center;width:100%;opacity:0;transition:opacity 0.4s ease}.homeTitle::before{content:'';display:inline-block;vertical-align:middle;height:100%}.homeTitle h2{display:inline-block;vertical-align:middle;max-width:110px;font-size:14px;color:white !important;line-height:1em}.homeTitle img{display:inline-block;vertical-align:middle;height:30px;margin-right:5px}.homeBlock:hover .homeIcon::before{transform:scale(3.6) translateY(7px)}.homeBlock:hover .homeContent{opacity:1;transition-delay:0.2s}.homeBlock:hover .homeIcon img{opacity:0;transition-duration:0.2s;transition-delay:0s}.homeBlock:hover .homeTitle{opacity:1}h1,h2,h3,h4,h5,h6,form,dl,dt,dd,p,div,img,a{margin:0;padding:0}p{margin:0.5em 0}.manual li{display:list-item;line-height:1.5em;padding-right:0}.manual li a{background-color:transparent;border:none;border-radius:none;padding:0}.manual,.manual ul{padding-left:1.5em;list-style-type:none;margin-top:0;font-size:100%}@media (max-width: 1199px){.masthead .navbar-brand{font-size:22px}.masthead .navbar-brand img.img-responsive{height:60px;width:60px;margin-right:7.5px}.navbar-nav>li>a{padding-left:10.71429px;padding-right:10.71429px}}@media (max-width: 1091px){.navbar-nav>li>a{padding-left:7.5px;padding-right:7.5px}}@media (min-width: 1092px) and (max-width: 1199px){.container{width:1070px}} diff --git a/sapl/static/styles/compilacao.css b/sapl/static/styles/compilacao.css new file mode 100644 index 000000000..ed50d8998 --- /dev/null +++ b/sapl/static/styles/compilacao.css @@ -0,0 +1 @@ +a:link:after,a:visited:after{content:""}.test_import:nth-child(even){background-color:#ccc}#wait_message{display:block;position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(220,220,220,0.75);z-index:99}#wait_message #msg{position:relative;margin:20% auto;padding:1.2em 2em;max-width:600px;text-align:center;font-size:1.5em;color:#677;border:1px solid #eee;background-color:#fff !important;box-shadow:0 1px 2px #999}.text-center{text-align:center}.cp-notify{z-index:9999;position:fixed;top:2em;left:50%;min-width:600px;transform:translate(-50%, 0);transition:all 0.4s ease;opacity:0.97}.cp-notify.hide{opacity:0;top:-1000px;display:block !important;transition:all 0.4s ease}.cp-notify .message{padding:1em;border:2px solid rgba(0,0,0,0.1);border-radius:4px;color:rgba(0,0,0,0.6);line-height:1em;font-size:1.3em;text-align:center;box-shadow:0 0 100px rgba(0,0,0,0.2)}.cp .desativado .dtxt,.cp .dpt .dptt>a.desativado .dtxt,.cp .desativado .dtxt *,.cp .dpt .dptt>a.desativado .dtxt *,.cp .desativado .dpt-link,.cp .dpt .dptt>a.desativado .dpt-link,.cp .desativado .dpt-link *,.cp .dpt .dptt>a.desativado .dpt-link *{text-decoration:line-through;color:#999 !important}.cp .desativado .dtxt table,.cp .dpt .dptt>a.desativado .dtxt table,.cp .desativado .dtxt table td,.cp .dpt .dptt>a.desativado .dtxt table td,.cp .desativado .dtxt * table,.cp .dpt .dptt>a.desativado .dtxt * table,.cp .desativado .dtxt * table td,.cp .dpt .dptt>a.desativado .dtxt * table td,.cp .desativado .dpt-link table,.cp .dpt .dptt>a.desativado .dpt-link table,.cp .desativado .dpt-link table td,.cp .dpt .dptt>a.desativado .dpt-link table td,.cp .desativado .dpt-link * table,.cp .dpt .dptt>a.desativado .dpt-link * table,.cp .desativado .dpt-link * table td,.cp .dpt .dptt>a.desativado .dpt-link * table td{border:1px dotted #ccc}.cp a{text-decoration:none;cursor:pointer}.cp .diff .desativado,.cp .diff .dpt .dptt>a.desativado,.cp .dpt .diff .dptt>a.desativado,.cp .diff .desativado *,.cp .diff .dpt .dptt>a.desativado *,.cp .dpt .diff .dptt>a.desativado *{text-decoration:line-through;color:#ddd !important;font-size:90%}.cp .diff .added{color:#04DE2C}.cp .dpt{font-size:1em;position:relative}.cp .dpt.indent{padding-left:1em}.cp .dpt .ementa{padding:2em 0em 2em 35%;font-weight:bold}.cp .dpt .titulo_generico,.cp .dpt .anexo,.cp .dpt .disp_preliminares,.cp .dpt .disp_gerais,.cp .dpt .disp_transitorias,.cp .dpt .disp_finais,.cp .dpt .parte,.cp .dpt .livro,.cp .dpt .titulo,.cp .dpt .capitulo,.cp .dpt .secao,.cp .dpt .subsecao,.cp .dpt .itemsecao{text-align:center;font-weight:bold;margin-bottom:1em;font-size:1.5em;margin-top:3em}.cp .dpt .titulo{margin-top:2em}.cp .dpt .capitulo{margin-top:1.5em;font-size:1.3em}.cp .dpt .secao{margin-top:1.2em;margin-bottom:0.7em;font-size:1.2em}.cp .dpt .subsecao,.cp .dpt .itemsecao{margin-top:1em;margin-bottom:0.6em;font-size:1.2em;font-style:italic}.cp .dpt .artigo{font-size:1.15em;float:left}.cp .dpt .artigo .dptt{position:relative}.cp .dpt .caput{margin-top:0.3333em;font-size:1.15em}.cp .dpt .paragrafo{font-size:1.1em;margin-top:0.2222em}.cp .dpt .inciso{font-size:1.1em;margin-top:0.1667em}.cp .dpt .alinea{font-size:1.0em;margin-top:2px}.cp .dpt .item{font-size:1.0em;margin-top:2px}.cp .dpt .bloco_alteracao{padding-left:10%;font-style:italic;color:#018}.cp .dpt .bloco_alteracao a{text-decoration:underline}.cp .dpt .bloco_alteracao a,.cp .dpt .bloco_alteracao table,.cp .dpt .bloco_alteracao table td{color:#018 !important}.cp .dpt .dn{font-weight:normal;position:relative;font-size:70%}.cp .dpt .dn p,.cp .dpt .dn ul{font-weight:normal;margin:0 0 0 0;list-style:none;padding:0}.cp .dpt .dn .dnl{display:block;text-align:left !important}.cp .dpt .dn .dnl *{display:inline}.cp .dpt .dn .dnl .bullet{padding:0 0.333em;display:inline-block}.cp .dpt .dn .dnl .dnli{min-height:2.5em}.cp .dpt .dn .dnl .dnli:hover ul{transition:opacity 0.5s linear, clip 0s 0.3s;clip:auto;opacity:1;background:rgba(230,230,230,0.9)}.cp .dpt .dn .dnl .dnli ul{transition:opacity 0.5s linear, clip 0s 0.3s;clip:rect(0, 0, 0, 0);opacity:0;position:absolute;background:transparent;right:0;padding:0.2em 0.5em 0em 0.5em;border:1px solid #c7e3d3;border-top:0px;font-size:1.5rem}.cp .dpt .dn .dnl .dnli ul li{display:table-cell;color:#aaa}.cp .dpt .dn .dnl .dnli ul li:hover{color:#787}.cp .dpt .dn .dnl .dnli ul li:hover a{color:#27AE60 !important}.cp .dpt .dn .dnl .dnli ul li .nowner{color:#27AE60 !important}.cp .dpt .dn .dnl .dnli .ntitulo{font-weight:bold;color:#03A203;text-decoration:none}.cp .dpt .dn .dnl .dnli .ntitulo a{color:#294 !important}.cp .dpt .dn .dnl .dnli .ntexto{color:#06D806}.cp .dpt .dn .dnl .dnli .ntexto a{color:#03A203 !important}.cp .dpt .dn .dnl:hover{display:block}.cp .dpt .dn .dnl:hover *{display:block}.cp .dpt .dn .dnl:hover>.bullet{display:none}.cp .dpt .dn .dnl:hover .dnli{margin-top:0.5em;border-top:1px solid #c7e3d3}.cp .dpt .dptt>a{color:#444444}.cp .dpt .dptt>a.nota-alteracao{color:#02baf2;font-size:0.75em}.cp .dpt .dptt>a.nota-alteracao:hover{text-decoration:underline}.cp .dpt .dptt .dne{position:absolute;display:block;right:0;left:0;top:0;height:0;transform:scaleX(0);transform-origin:right;transition:all 0.3s ease;border-top:1px solid #2980B9}.cp .dpt .dptt .dne ul.btns-action{list-style:none;padding:0;position:absolute;right:0;background-color:#2980B9}.cp .dpt .dptt .dne ul.btns-action li{float:left}.cp .dpt .dptt .dne ul.btns-action li:hover{background-color:rgba(0,0,0,0.1)}.cp .dpt .dptt .dne ul.btns-action li a{color:white;padding:0.15em 1em 0;display:inline-block}.cp .dpt .dptt .dne-nota{position:relative;transform:scaleX(1);height:auto;border-top:0px}.cp .dpt .dptt .dne-nota ul.btns-action{display:none}.cp .dpt .dptt .dne-nota .dne-form{margin:1em -2em 0em;text-align:left;font-size:1.6rem}.cp .dpt .dptt:hover .dne{height:0.1667rem;transform:scaleX(1);transition-delay:1s}.cp .dpt .dptt:hover .dne-nota{height:auto;transition-delay:0s}.cp .tipo-vigencias{list-style:none;position:fixed;bottom:0px;left:50%;transform:translate(-50%, 0);margin:0;padding:0;background-color:#2980B9;z-index:1000;opacity:0.9;transition:all 0.3s ease-in-out}.cp .tipo-vigencias li{display:inline-block;border-left:1px solid #fff;float:left}.cp .tipo-vigencias li a{color:white;padding:0.3em 1em 0;display:inline-block;font-size:110%;cursor:pointer}.cp .tipo-vigencias li a.selected{background-color:rgba(0,0,0,0.5)}.cp .tipo-vigencias li:hover{background-color:rgba(0,0,0,0.2)}.cp .tipo-vigencias:hover{opacity:1}.cp.cpe .desativado,.cp.cpe .dpt .dptt>a.desativado{text-decoration:line-through;color:#999 !important}.cp.cpe .desativado table,.cp.cpe .dpt .dptt>a.desativado table,.cp.cpe .desativado table td,.cp.cpe .dpt .dptt>a.desativado table td{border:1px dotted #ccc}.cp.cpe .desativado a.nota-alteracao *{color:#02baf2 !important}.cp.cpe .dpt{display:block}.cp.cpe .dpt>.dpt-actions-fixed{position:absolute;right:-0.8em;top:-0.8em;z-index:3;opacity:0}.cp.cpe .dpt>.dpt-actions-fixed .activate{display:none}.cp.cpe .dpt>.dpt-actions-fixed .deactivate{display:inline}.cp.cpe .dpt>.dpt-actions-fixed .btn-dpt-edit.btn-default{color:#333}.cp.cpe .dpt>.dpt-actions-fixed .btn-dpt-edit.btn-default:hover{color:#fff;background-color:#02baf2}.cp.cpe .dpt>.dpt-actions,.cp.cpe .dpt>.dpt-actions-bottom{display:none}.cp.cpe .dpt>.dpt-text{cursor:text;min-height:30px;border:1px solid transparent}.cp.cpe .dpt>.dpt-text:hover,.cp.cpe .dpt>.dpt-text.hover-fixed{background-color:rgba(0,0,0,0.01);color:#2980B9;border:1px solid #eee;transition:color 0.3s ease}.cp.cpe .dpt>.dpt-text.artigo{float:none}.cp.cpe .dpt>.dpt-text a.link-rotulo{color:#000}.cp.cpe .dpt:hover>.dpt-actions-fixed{opacity:1}.cp.cpe .dpt:hover>.dpt-actions-fixed:hover ~ .dpt-text{background-color:rgba(0,0,0,0.01);color:#2980B9;border:1px solid #eee;transition:color 0.3s ease}.cp.cpe .dpt .semtexto{font-weight:bold;color:#9aaed6}.cp.cpe .dpt .semtexto:hover{color:#5f76a4}.cp.cpe .dpt-alts{margin:0;margin-bottom:1em;padding:0;background-color:transparent;min-height:100px;border:2px dashed #fff}.cp.cpe .dpt-alts:hover{border-color:#d9ddde}.cp.cpe .dpt-alts:empty{border-color:#ddd}.cp.cpe .dpt-alts.drag{width:100% !important;border-color:#d9ddde}.cp.cpe .dpt-alts.drag .dpt{transition-duration:0s !important}.cp.cpe .dpt-alts .dpt{width:100% !important;box-shadow:0 -1px 0 #e5e5e5,0 0 2px rgba(0,0,0,0.12),0 2px 4px rgba(0,0,0,0.24);padding:0;margin:0;background-color:#edf0f1;height:auto !important;min-height:2em;z-index:1}.cp.cpe .dpt-alts .dpt:not(:first-child){border-top:1px solid white}.cp.cpe .dpt-alts .dpt>.dpt-text{padding:0.3em 1em;margin-top:0;margin-bottom:0}.cp.cpe .dpt-alts .dpt>.dpt-text a.link-rotulo{text-decoration:underline}.cp.cpe .dpt-alts .dpt-selected.dpt{margin:0em -0.5em}.cp.cpe .dpt-selected.dpt{width:auto !important;margin:1em -0.5em;border:1px solid #fad46b !important;padding:0;background-color:#fafafa;border-radius:3px;z-index:4}.cp.cpe .dpt-selected.dpt>.dpt-text{border:1px solid transparent}.cp.cpe .dpt-selected.dpt>.dpt-text:hover{border:1px solid transparent;background-color:transparent}.cp.cpe .dpt-selected.dpt>.dpt-form{margin-bottom:0em}.cp.cpe .dpt-selected.dpt>.dpt-actions,.cp.cpe .dpt-selected.dpt>.dpt-actions-bottom{display:table;background-color:#e5e5e5;padding:1em;margin-bottom:0em;width:100%}.cp.cpe .dpt-selected.dpt>.dpt-actions>.btn-action,.cp.cpe .dpt-selected.dpt>.dpt-actions-bottom>.btn-action{display:table-cell;float:none}.cp.cpe .dpt-selected.dpt>.dpt-actions .btn-excluir,.cp.cpe .cp.cpe1_old_apagar .dpt-selected.dpt>.dpt-actions .csform .actions_inserts>li>a.btn-salvar,.cp.cpe1_old_apagar .cp.cpe .dpt-selected.dpt>.dpt-actions .csform .actions_inserts>li>a.btn-salvar,.cp.cpe .dpt-selected.dpt>.dpt-actions-bottom .btn-excluir,.cp.cpe .cp.cpe1_old_apagar .dpt-selected.dpt>.dpt-actions-bottom .csform .actions_inserts>li>a.btn-salvar,.cp.cpe1_old_apagar .cp.cpe .dpt-selected.dpt>.dpt-actions-bottom .csform .actions_inserts>li>a.btn-salvar{display:inline-block;opacity:0.3}.cp.cpe .dpt-selected.dpt>.dpt-actions .btn-excluir:hover,.cp.cpe .cp.cpe1_old_apagar .dpt-selected.dpt>.dpt-actions .csform .actions_inserts>li>a.btn-salvar:hover,.cp.cpe1_old_apagar .cp.cpe .dpt-selected.dpt>.dpt-actions .csform .actions_inserts>li>a.btn-salvar:hover,.cp.cpe .dpt-selected.dpt>.dpt-actions-bottom .btn-excluir:hover,.cp.cpe .cp.cpe1_old_apagar .dpt-selected.dpt>.dpt-actions-bottom .csform .actions_inserts>li>a.btn-salvar:hover,.cp.cpe1_old_apagar .cp.cpe .dpt-selected.dpt>.dpt-actions-bottom .csform .actions_inserts>li>a.btn-salvar:hover{opacity:1}.cp.cpe .dpt-selected.dpt>.dpt-actions-bottom{margin:0}.cp.cpe .dpt-selected .dpt-block{border-top:1px solid #e5e5e5 !important;opacity:0.6;transition:opacity 0.4s ease}.cp.cpe .dpt-selected .dpt-block:hover{opacity:1}.cp.cpe .dpt-selected .dpt-text{opacity:0.7;margin:0;padding:0.7em}.cp.cpe .dpt-selected .dpt-text:hover{opacity:1;background-color:#f5f5f5}.cp.cpe .dpt-selected .dpt-alts{margin:1em}.cp.cpe .dpt-selected .dpt-alts .dpt{box-shadow:0 0 0}.cp.cpe .dpt-selected>.dpt-actions-fixed{opacity:1;top:-12px;right:0.5em}.cp.cpe .dpt-selected>.dpt-actions-fixed .activate{display:inline}.cp.cpe .dpt-selected>.dpt-actions-fixed .deactivate{display:none}.cp.cpe .dpt-selected>.dpt-actions-fixed .btn-dpt-edit{padding-top:2px;padding-bottom:1px}.cp.cpe .dpt-selected>.dpt-actions-fixed .btn-dpt-edit.btn-default{background-color:#fad46b;border:1px solid #fad46b}.cp.cpe .dpt-selected .dropdown-menu.dropdown-menu-left{right:auto !important;left:0;padding:2px 0}.cp.cpe .dpt-selected .dropdown-menu.dropdown-menu-left>.top.arrow{right:88%;left:auto}.cp.cpe .dpt-selected .dropdown-menu li a{padding-top:2px;padding-bottom:2px}.cp.cpe .dpt-selected .btn-group .radius-right{border-bottom-right-radius:4px !important;border-top-right-radius:4px !important}.cp.cpe .dpt-selected:hover>.dpt-actions-fixed{opacity:1}.cp.cpe1_old_apagar{margin-bottom:15em}.cp.cpe1_old_apagar .desativado,.cp.cpe1_old_apagar .dpt .dptt>a.desativado,.cp.cpe1_old_apagar .desativado *,.cp.cpe1_old_apagar .dpt .dptt>a.desativado *{text-decoration:line-through;color:#999 !important}.cp.cpe1_old_apagar .desativado table,.cp.cpe1_old_apagar .dpt .dptt>a.desativado table,.cp.cpe1_old_apagar .desativado table td,.cp.cpe1_old_apagar .dpt .dptt>a.desativado table td,.cp.cpe1_old_apagar .desativado * table,.cp.cpe1_old_apagar .dpt .dptt>a.desativado * table,.cp.cpe1_old_apagar .desativado * table td,.cp.cpe1_old_apagar .dpt .dptt>a.desativado * table td{border:1px dotted #ccc}.cp.cpe1_old_apagar a{text-decoration:none;cursor:pointer}.cp.cpe1_old_apagar .dpt{position:relative;display:block}.cp.cpe1_old_apagar .dpt .semtexto{font-weight:bold;color:#BFD1F6}.cp.cpe1_old_apagar .dpt .artigo{float:none}.cp.cpe1_old_apagar .dpt .caput{margin-top:0}.cp.cpe1_old_apagar .dpt>.actions_right,.cp.cpe1_old_apagar .dpt-selected .csform .dpt>.actions_left{color:#fff;right:0em;position:absolute;opacity:0;transition:all 0.4s ease-in-out;z-index:1000}.cp.cpe1_old_apagar .dpt>.actions_right a.btn-bloco,.cp.cpe1_old_apagar .dpt-selected .csform .dpt>.actions_left a.btn-bloco{background-color:#3498db;color:#ffffff !important;padding:8px 18px 6px;display:inline-block;line-height:1;float:right}.cp.cpe1_old_apagar .dpt>.actions_right a.btn-bloco:hover,.cp.cpe1_old_apagar .dpt-selected .csform .dpt>.actions_left a.btn-bloco:hover{opacity:1;background-image:-webkit-linear-gradient(top, #1c81c4, #0b6dad);background-image:-moz-linear-gradient(top, #1c81c4, #0b6dad);background-image:-ms-linear-gradient(top, #1c81c4, #0b6dad);background-image:-o-linear-gradient(top, #1c81c4, #0b6dad);background-image:linear-gradient(to bottom, #1c81c4, #0b6dad)}.cp.cpe1_old_apagar .dpt:hover>.actions_right,.cp.cpe1_old_apagar .dpt-selected .csform .dpt:hover>.actions_left{opacity:1}.cp.cpe1_old_apagar .dpt .bloco{display:block;clear:both}.cp.cpe1_old_apagar .dpt .bloco *:hover{color:#27AE60}.cp.cpe1_old_apagar .dpt .bloco .de{cursor:pointer}.cp.cpe1_old_apagar .dpt .articulacao{border-top:2px solid #e5e5e5;margin:2em 0}.cp.cpe1_old_apagar .dpt .bloco_alteracao{margin:1em 0;padding:0em;background-color:transparent;min-height:100px;border:2px dashed #fff}.cp.cpe1_old_apagar .dpt .bloco_alteracao:hover{border-color:#d9ddde}.cp.cpe1_old_apagar .dpt .bloco_alteracao.drag{width:100% !important;border-color:#d9ddde}.cp.cpe1_old_apagar .dpt .bloco_alteracao.drag .dpt{transition-duration:0s !important}.cp.cpe1_old_apagar .dpt .bloco_alteracao .dpt{width:100% !important;box-shadow:0 -1px 0 #e5e5e5,0 0 2px rgba(0,0,0,0.12),0 2px 4px rgba(0,0,0,0.24);padding:0.3em 1em;margin:0;background-color:#edf0f1;z-index:1}.cp.cpe1_old_apagar .dpt .bloco_alteracao .dpt:not(:first-child){border-top:1px solid white}.cp.cpe1_old_apagar .dpt .bloco_alteracao .dpt.ui-draggable div{cursor:pointer}.cp.cpe1_old_apagar .dpt .bloco_alteracao .dpt.dpt-comp-selected{transition:all 0.3s ease;width:auto !important;margin:2em -3.7em;box-shadow:0 0 6px rgba(0,0,0,0.16),0 6px 12px rgba(0,0,0,0.32)}.cp.cpe1_old_apagar .dpt-selected{font-size:1em;border:0px solid #CCC;margin:1em -1.8em 1em -1.8em;padding:2.2em 2.2em 1.6em 2.2em;box-shadow:-4px 15px 15px rgba(0,0,0,0.1),0px 6px 6px rgba(0,0,0,0.23);background-image:-webkit-linear-gradient(top, #eaeaee, #ddd);background-image:-moz-linear-gradient(top, #eaeaee, #ddd);background-image:-ms-linear-gradient(top, #eaeaee, #ddd);background-image:-o-linear-gradient(top, #eaeaee, #ddd);background-image:linear-gradient(to bottom, #eaeaee, #ddd)}.cp.cpe1_old_apagar .dpt-selected ul{list-style:none;margin:0;padding:0}.cp.cpe1_old_apagar .dpt-selected .semtexto{color:#999}.cp.cpe1_old_apagar .dpt-selected .bloco{opacity:0.5}.cp.cpe1_old_apagar .dpt-selected .bloco:hover{opacity:1}.cp.cpe1_old_apagar .dpt-selected .bloco a:hover{background:transparent}.cp.cpe1_old_apagar .dpt-selected>.bloco{opacity:1;margin:1em}.cp.cpe1_old_apagar .dpt-selected .bloco_alteracao{margin:0;padding:1em;border:0 transparent;background-image:-webkit-linear-gradient(top, #eaeaee, #ddd);background-image:-moz-linear-gradient(top, #eaeaee, #ddd);background-image:-ms-linear-gradient(top, #eaeaee, #ddd);background-image:-o-linear-gradient(top, #eaeaee, #ddd);background-image:linear-gradient(to bottom, #eaeaee, #ddd)}.cp.cpe1_old_apagar .dpt-selected .bloco_alteracao:hover{border-color:transparent}.cp.cpe1_old_apagar .dpt-selected .bloco_alteracao.drag{width:100% !important}.cp.cpe1_old_apagar .dpt-selected .bloco_alteracao.drag .dpt{transition-duration:0s !important}.cp.cpe1_old_apagar .dpt-selected .bloco_alteracao .dpt{width:auto !important;transition:all 0.3s ease;background-color:white}.cp.cpe1_old_apagar .dpt-selected .bloco_alteracao .dpt:not(:first-child){border-top:0px solid white}.cp.cpe1_old_apagar .dpt-selected>.dpt{padding:0}.cp.cpe1_old_apagar .dpt-selected>.dpt:last-child{padding-bottom:1em}.cp.cpe1_old_apagar .dpt-selected>.actions_right a.btn-bloco,.cp.cpe1_old_apagar .dpt-selected .csform .dpt-selected>.actions_left a.btn-bloco{display:none}.cp.cpe1_old_apagar .dpt-selected .csform{display:block;clear:both;z-index:9;position:static}.cp.cpe1_old_apagar .dpt-selected .csform .btns-action{-webkit-animation:fadeIn 1s ease-in-out;-moz-animation:fadeIn 1s ease-in-out;-o-animation:fadeIn 1s ease-in-out;opacity:1;position:absolute;display:table;transition:all 0.4s ease-in-out}.cp.cpe1_old_apagar .dpt-selected .csform .btns-action a{color:#16407c;display:block;background:transparent;vertical-align:middle;text-align:center;font-weight:normal;text-shadow:0 0 10px rgba(0,0,0,0.3);padding:0.33em 0.4em}.cp.cpe1_old_apagar .dpt-selected .csform .btns-action>li{position:relative;display:table-cell;vertical-align:top}.cp.cpe1_old_apagar .dpt-selected .csform .btns-action>li:hover{background-color:rgba(255,255,255,0.5)}.cp.cpe1_old_apagar .dpt-selected .csform .btns-action>li:hover>a{text-shadow:0 0 5px #777;color:#0a5}.cp.cpe1_old_apagar .dpt-selected .csform .label_status{position:absolute;bottom:0;right:0;color:#889;padding:0.3em;font-size:80%;text-align:right;z-index:15;display:table}.cp.cpe1_old_apagar .dpt-selected .csform .label_status li{display:table-cell;padding:0 0.5em}.cp.cpe1_old_apagar .dpt-selected .csform .actions_parents{z-index:11;top:0em;left:0em}.cp.cpe1_old_apagar .dpt-selected .csform .actions_parents a{padding:0.62em}.cp.cpe1_old_apagar .dpt-selected .csform .actions_parents div,.cp.cpe1_old_apagar .dpt-selected .csform .actions_parents li{font-size:80%;display:table-cell;vertical-align:middle;border-right:1px solid #CCC}.cp.cpe1_old_apagar .dpt-selected .csform .actions_parents div{padding:0 0.4em;font-stretch:condensed;font-variant:small-caps;font-weight:bold;text-shadow:0 0 10px #fff}.cp.cpe1_old_apagar .dpt-selected .csform .actions_parents>li:hover a{color:#16407c;font-weight:normal}.cp.cpe1_old_apagar .dpt-selected .csform .actions_top,.cp.cpe1_old_apagar .dpt-selected .csform .actions_bottom{top:0em;right:0em}.cp.cpe1_old_apagar .dpt-selected .csform .actions_top a,.cp.cpe1_old_apagar .dpt-selected .csform .actions_bottom a{padding-right:1em;padding-left:1em}.cp.cpe1_old_apagar .dpt-selected .csform .actions_top li,.cp.cpe1_old_apagar .dpt-selected .csform .actions_bottom li{display:table-cell;vertical-align:middle;border-left:1px solid #CCC}.cp.cpe1_old_apagar .dpt-selected .csform .actions_bottom{top:auto;left:0;bottom:0;display:inline-block;border-top:1px solid #CCC}.cp.cpe1_old_apagar .dpt-selected .csform .actions_bottom a{padding:0 0.4em}.cp.cpe1_old_apagar .dpt-selected .csform .actions_bottom li{border:0px;border-right:1px solid #CCC}.cp.cpe1_old_apagar .dpt-selected .csform .actions_right,.cp.cpe1_old_apagar .dpt-selected .csform .actions_left{top:2.2em;right:0em;bottom:0;display:block}.cp.cpe1_old_apagar .dpt-selected .csform .actions_right li,.cp.cpe1_old_apagar .dpt-selected .csform .actions_left li{width:2.2em;display:block;border-bottom:1px solid #CCC}.cp.cpe1_old_apagar .dpt-selected .csform .actions_right li:first-child,.cp.cpe1_old_apagar .dpt-selected .csform .actions_left li:first-child{border-top:1px solid #CCC}.cp.cpe1_old_apagar .dpt-selected .csform .actions_left{right:auto;left:0em}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts{background:transparent;position:relative;z-index:19;display:table;width:100%}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li{display:table-cell}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li:hover>a{background-image:-webkit-linear-gradient(top, #1c81c4, #0b6dad);background-image:-moz-linear-gradient(top, #1c81c4, #0b6dad);background-image:-ms-linear-gradient(top, #1c81c4, #0b6dad);background-image:-o-linear-gradient(top, #1c81c4, #0b6dad);background-image:linear-gradient(to bottom, #1c81c4, #0b6dad)}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a{background-image:-webkit-linear-gradient(top, #3498DB, #2980C9);background-image:-moz-linear-gradient(top, #3498DB, #2980C9);background-image:-ms-linear-gradient(top, #3498DB, #2980C9);background-image:-o-linear-gradient(top, #3498DB, #2980C9);background-image:linear-gradient(to bottom, #3498DB, #2980C9);border-right:1px solid #fff;padding:0.2em;display:block;color:white;text-align:center;white-space:nowrap}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-excluir,.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-salvar{text-align:left;background:#A70808;color:#c99;padding-left:1.7em;position:relative}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-excluir:hover,.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-salvar:hover{background-color:#c70808;color:#ecc}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-excluir::before,.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-salvar::before{z-index:20;position:absolute;background:url(/static/img/icon_delete_white.png) no-repeat 50% 50%;content:"";top:0;left:0;display:block;color:black;margin-left:0.4em;height:100%;width:2em}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-salvar{background:#1f8b4d;color:white}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-salvar:hover{background:#2d9c5c;color:white}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-salvar::before{background:url(/static/img/icon_save_white.png) no-repeat 50% 50%}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a span{padding:0 0.7em}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li:last-child>a{border-right:0px solid #fff}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>ul li:nth-child(even) a{background:#3385CA}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>ul li a{border-right:1px solid #fff;display:block;color:white;background:#2980C9;font-size:80%;padding:0.23em 1em}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>ul li a:hover{background:#0a5ea4}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.add_prior{table-layout:fixed}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.add_prior>ul{transform:translateY(30px);transition:transform 0.1s linear, opacity 0.1s linear, clip 0s 0.3s;clip:rect(0, 0, 0, 0);opacity:0;position:absolute;margin-left:0.5em;box-shadow:0px 6px 18px rgba(0,0,0,0.19),0px 2px 6px rgba(0,0,0,0.23);-webkit-transition-delay:0.4s;transition-delay:0.4s}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.add_prior>ul li a{border-right:0px !important}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.add_prior>ul li:first-child::before{border-width:0.375rem;border-style:inset inset solid;content:"";display:block;height:0px;width:0px;border-color:transparent transparent #3385CA;position:absolute;top:-0.71rem;left:0.9375rem}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.add_prior>ul li:first-child:hover::before{border-color:transparent transparent #0A5EA4}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.add_prior>ul::after{content:"";position:absolute;z-index:-1;left:0;top:rem-calc(-25px);height:rem-calc(25px);width:100%;transition:all 0.3s cubic-bezier(0.55, 0, 0.1, 1)}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.add_prior:hover>ul{transform:translateY(7px);transition:transform 0.4s linear, opacity 0.4s linear, clip 0s 0.2s;opacity:1;clip:rect(-100px, 2000px, 2000px, -100px)}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir{display:block;position:static}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul{transform:translateY(30px);transition:transform 0.1s linear, opacity 0.1s linear, clip 0s 0.3s;clip:rect(0, 0, 0, 0);opacity:0;position:absolute;margin-left:0.5em;box-shadow:0px 6px 18px rgba(0,0,0,0.19),0px 2px 6px rgba(0,0,0,0.23);-webkit-transition-delay:0.4s;transition-delay:0.4s}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul li a{border-right:0px !important}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul li:first-child::before{border-width:0.375rem;border-style:inset inset solid;content:"";display:block;height:0px;width:0px;border-color:transparent transparent #3385CA;position:absolute;top:-0.71rem;left:0.9375rem}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul li:first-child:hover::before{border-color:transparent transparent #0A5EA4}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul::after{content:"";position:absolute;z-index:-1;left:0;top:rem-calc(-25px);height:rem-calc(25px);width:100%;transition:all 0.3s cubic-bezier(0.55, 0, 0.1, 1)}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir:hover>ul{transform:translateY(7px);transition:transform 0.4s linear, opacity 0.4s linear, clip 0s 0.2s;opacity:1;clip:rect(-100px, 2000px, 2000px, -100px)}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul{right:0.5em}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul li a{background-color:#A70808}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul li a:hover{background:#c70808}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul li:first-child::before{border-color:transparent transparent #A70808;right:10%;left:auto}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul li:first-child:hover::before{border-color:transparent transparent #c70808}.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante,.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante_fixo{z-index:2000}.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante>li>ul,.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante_fixo>li>ul{transform:translateY(30px);transition:transform 0.1s linear, opacity 0.1s linear, clip 0s 0.3s;clip:rect(0, 0, 0, 0);opacity:0;position:absolute;margin-left:0.5em;box-shadow:0px 6px 18px rgba(0,0,0,0.19),0px 2px 6px rgba(0,0,0,0.23);-webkit-transition-delay:0.4s;transition-delay:0.4s}.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante>li>ul li a,.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante_fixo>li>ul li a{border-right:0px !important}.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante>li>ul li:first-child::before,.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante_fixo>li>ul li:first-child::before{border-width:0.375rem;border-style:inset inset solid;content:"";display:block;height:0px;width:0px;border-color:transparent transparent #3385CA;position:absolute;top:-0.71rem;left:0.9375rem}.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante>li>ul li:first-child:hover::before,.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante_fixo>li>ul li:first-child:hover::before{border-color:transparent transparent #0A5EA4}.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante>li>ul::after,.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante_fixo>li>ul::after{content:"";position:absolute;z-index:-1;left:0;top:rem-calc(-25px);height:rem-calc(25px);width:100%;transition:all 0.3s cubic-bezier(0.55, 0, 0.1, 1)}.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante>li:hover>ul,.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante_fixo>li:hover>ul{transform:translateY(7px);transition:transform 0.4s linear, opacity 0.4s linear, clip 0s 0.2s;opacity:1;clip:rect(-100px, 2000px, 2000px, -100px)}.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante>li.menu_excluir>ul li:first-child::before,.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante_fixo>li.menu_excluir>ul li:first-child::before{right:auto;left:0.9375rem}.cp.cpe1_old_apagar .dpt-selected .csform textarea{margin:0;resize:vertical;min-height:12.6em;border:0px;font-size:120%;width:100%}.cp.cpe1_old_apagar .dpt-selected .csform textarea:focus{background:#fff}.cp.cpe1_old_apagar .dpt-selected .csform textarea::-webkit-input-placeholder{color:#c70808;opacity:0.6;font-size:80%}.cp.cpe1_old_apagar .dpt-selected .csform textarea:-moz-placeholder{color:#c70808}.cp.cpe1_old_apagar .dpt-selected .csform textarea::-moz-placeholder{color:#c70808}.cp.cpe1_old_apagar .dpt-selected .csform textarea:-ms-input-placeholder{color:#c70808;opacity:0.6}.cp.cpe1_old_apagar .selected{background-color:rgba(255,255,255,0.5)}.cp.cpe1_old_apagar .selected a:hover{color:#16407c !important;font-weight:normal !important}.result-busca-dispositivo,.lista-dispositivo{padding:0 0 1em;min-height:3em}.result-busca-dispositivo ul,.lista-dispositivo ul{list-style:none;margin:0;padding:1em 0 0;transition:all 2s linear;clear:both}.result-busca-dispositivo ul li,.lista-dispositivo ul li{display:table;border-collapse:separate;border-bottom:1px solid white;width:100%}.result-busca-dispositivo ul li.ta_title,.lista-dispositivo ul li.ta_title{background-color:rgba(0,0,0,0.15);border-radius:4px 4px 0 0;width:100%}.result-busca-dispositivo ul li.ta_title span,.lista-dispositivo ul li.ta_title span{padding:0.5em}.result-busca-dispositivo ul li:last-child .itemlabel,.lista-dispositivo ul li:last-child .itemlabel{border-radius:0 0 4px 0px;margin:0px}.result-busca-dispositivo ul li:last-child .iteminput,.lista-dispositivo ul li:last-child .iteminput{border-radius:0 0 0px 4px}.result-busca-dispositivo ul li .iteminput,.lista-dispositivo ul li .iteminput{background-color:rgba(0,0,0,0.1);border-right:1px solid white;display:table-cell;padding:0.5em;vertical-align:middle;text-align:center}.result-busca-dispositivo ul li .iteminput input,.lista-dispositivo ul li .iteminput input{margin:0}.result-busca-dispositivo ul li .itemlabel,.lista-dispositivo ul li .itemlabel{background-color:rgba(0,0,0,0.1);display:table-cell;padding:0.5em;vertical-align:middle;width:100%}.result-busca-dispositivo ul li .itemlabel label,.lista-dispositivo ul li .itemlabel label{line-height:1;font-family:"SourceSansPro", Helvetica, Arial, sans-serif;display:block;margin:0px}.result-busca-dispositivo ul li .itemlabel .artigo,.lista-dispositivo ul li .itemlabel .artigo{float:none}.result-busca-dispositivo .nomenclatura_heranca,.lista-dispositivo .nomenclatura_heranca{font-size:90%;color:#057dba;display:inline}.cp-nav-parents>.dropdown-menu{left:0;right:auto}.cp-nav-parents>.dropdown-menu::before{content:'';position:absolute;top:-11px;width:100%;height:11px}.cp-nav-parents:hover>.dropdown-menu{display:block}.table-notificacoes tbody tr td{border-top:1px solid white;padding:5px;vertical-align:middle}.table-notificacoes tbody tr td ul{margin:0px}.table-notificacoes tbody tr td ul li:hover{background-color:rgba(0,0,0,0.1)}.btn-modal-open{float:right}.class_color_container{background:#ddd !important}.clear{clear:both}.mce-tinymce.mce-container{border:1px solid #ccc !important;margin-right:2px}.mce-btn button:hover{background-color:rgba(0,0,0,0.1) !important;text-shadow:0 0 5px #fff;box-shadow:0 0 5px #777}.mce-menu{background:#eee !important}.displaynone{display:none !important}@media only screen and (max-width: 800px){.cp .fixed{z-index:98;position:relative}.cp.cpe1 .dpt-selected{margin:1em 0}.cp.cpe1 .dpt-selected .csform .actions_parents,.cp.cpe1 .dpt-selected .csform .label_status{font-size:80%;position:static !important;display:block !important;padding:0em;height:auto !important;left:0;right:auto;text-align:left}.cp.cpe1 .dpt-selected .csform .actions_parents div,.cp.cpe1 .dpt-selected .csform .actions_parents li,.cp.cpe1 .dpt-selected .csform .label_status div,.cp.cpe1 .dpt-selected .csform .label_status li{display:inline-block !important}.cp.cpe1 .dpt-selected .csform .actions_inserts>li>ul{transform:translateY(30px);transition:transform 0.1s linear, opacity 0.1s linear, clip 0s 0.3s;clip:rect(0, 0, 0, 0);opacity:0;position:absolute;margin-left:0.5em;box-shadow:0px 6px 18px rgba(0,0,0,0.19),0px 2px 6px rgba(0,0,0,0.23);-webkit-transition-delay:0.4s;transition-delay:0.4s}.cp.cpe1 .dpt-selected .csform .actions_inserts>li>ul li a{border-right:0px !important}.cp.cpe1 .dpt-selected .csform .actions_inserts>li>ul li:first-child::before{border-width:0.375rem;border-style:inset inset solid;content:"";display:block;height:0px;width:0px;border-color:transparent transparent #3385CA;position:absolute;top:-0.71rem;left:0.9375rem}.cp.cpe1 .dpt-selected .csform .actions_inserts>li>ul li:first-child:hover::before{border-color:transparent transparent #0A5EA4}.cp.cpe1 .dpt-selected .csform .actions_inserts>li>ul::after{content:"";position:absolute;z-index:-1;left:0;top:rem-calc(-25px);height:rem-calc(25px);width:100%;transition:all 0.3s cubic-bezier(0.55, 0, 0.1, 1)}.cp.cpe1 .dpt-selected .csform .actions_inserts>li:hover>ul{transform:translateY(7px);transition:transform 0.4s linear, opacity 0.4s linear, clip 0s 0.2s;opacity:1;clip:rect(-100px, 2000px, 2000px, -100px)}.cp.cpe1 .dpt-selected .csform .actions_inserts>li>a span{display:none}.cp.cpe1 .dpt-selected .csform .actions_inserts>li>a.btn-excluir,.cp.cpe1 .cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-salvar,.cp.cpe1_old_apagar .cp.cpe1 .dpt-selected .csform .actions_inserts>li>a.btn-salvar,.cp.cpe1 .dpt-selected .csform .actions_inserts>li>a.btn-salvar{padding-left:0;min-width:1em}.cp.cpe1 .dpt-selected .csform .actions_inserts>li>a.btn-excluir::before,.cp.cpe1 .cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-salvar::before,.cp.cpe1_old_apagar .cp.cpe1 .dpt-selected .csform .actions_inserts>li>a.btn-salvar::before,.cp.cpe1 .dpt-selected .csform .actions_inserts>li>a.btn-salvar::before{width:100%;margin:0}.cp.cpe1 .dpt-selected .csform .actions_inserts>li.add_in,.cp.cpe1 .dpt-selected .csform .actions_inserts>li.add_next,.cp.cpe1 .dpt-selected .csform .actions_inserts>li.add_prior{position:static}.cp.cpe1 .dpt-selected .csform .actions_inserts>li.add_in>ul{left:1em !important;right:1em !important;margin-left:0}.cp.cpe1 .dpt-selected .csform .actions_inserts>li.add_in>ul li:first-child::before{left:37%}.cp.cpe1 .dpt-selected .csform .actions_inserts>li.add_next>ul{left:0 !important;right:1em !important}.cp.cpe1 .dpt-selected .csform .actions_inserts>li.add_prior>ul{left:1em !important;right:0 !important;margin-left:0;margin-right:0.5em}.cp.cpe1 .dpt-selected .csform .actions_inserts>li.add_prior>ul li:first-child::before{right:42%;left:auto}.cp.cpe1 .dpt-selected .csform .actions_inserts>li.menu_excluir>ul{left:10% !important;right:0 !important;margin-left:0;margin-right:0.5em}.cp.cpe1 .dpt-selected .csform .actions_inserts>li.menu_excluir>ul li:first-child::before{right:0;left:auto}}@media print{.cp .vigencias,.toggle-topbar,.menu-icon,.button,.tipo-vigencias,.dne{display:none}#btn_font_menos,#btn_font_mais{display:none}.container{width:100%}} diff --git a/scripts_docker/shell_sapl.sh b/scripts_docker/shell_sapl.sh index cfddefcdc..4c993a61d 100755 --- a/scripts_docker/shell_sapl.sh +++ b/scripts_docker/shell_sapl.sh @@ -1,2 +1,3 @@ #!/bin/bash -docker run -ti sapl_web /bin/bash + +docker run --rm -ti sapl_web /bin/sh diff --git a/start.sh b/start.sh new file mode 100755 index 000000000..226c70de4 --- /dev/null +++ b/start.sh @@ -0,0 +1,53 @@ +#!/bin/sh + + +create_env() { + # check if file exists + if [ -f "/var/interlegis/sapl/data/secret.key" ]; then + KEY=`cat /var/interlegis/sapl/data/secret.key` + else + KEY=`python3 genkey.py` + echo $KEY > data/secret.key + fi + + # TODO: rename env-test-bash to .env + FILENAME="/var/interlegis/sapl/sapl/.env" + + if [ -z "${DATABASE_URL:-}" ]; then + DATABASE_URL="postgresql://sapl:sapl@sapldb:5432/sapl" + fi + + # ALWAYS replace the content of .env variable + # If want to conditionally create only if absent then use IF below + # if [ ! -f $FILENAME ]; then + + touch $FILENAME + + + # explicitly use '>' to erase any previous content + echo "SECRET_KEY="$KEY > $FILENAME + # now only appends + echo "DATABASE_URL = "$DATABASE_URL >> $FILENAME + echo "DEBUG = ""${DEBUG-False}" >> $FILENAME + echo "EMAIL_USE_TLS = ""${USE_TLS-True}" >> $FILENAME + echo "EMAIL_PORT = ""${EMAIL_PORT-587}" >> $FILENAME + echo "EMAIL_HOST = ""${EMAIL_HOST-''}" >> $FILENAME + echo "EMAIL_HOST_USER = ""${EMAIL_HOST_USER-''}" >> $FILENAME + echo "EMAIL_HOST_PASSWORD = ""${EMAIL_HOST_PASSWORD-''}" >> $FILENAME +} + +echo "creating .env file..." +create_env +echo "done." + +# # python3 gen-env.py + +python3 manage.py bower install + +/bin/sh busy-wait.sh + +python3 manage.py migrate +python3 manage.py collectstatic --no-input +python3 manage.py rebuild_index --noinput + +/bin/sh gunicorn_start.sh