Ajout du repertoire extra avec droitdusol.css
This commit is contained in:
parent
91e039b750
commit
c8afe07c50
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,30 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('cartads', '0004_remove_cartads_application'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='cartads',
|
||||
name='wsdl_url',
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='cartads',
|
||||
name='wsdl_url_etapedossier',
|
||||
field=models.CharField(default='url', max_length=256, verbose_name='WSDL URL EtapeDossier'),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='cartads',
|
||||
name='wsdl_url_portail',
|
||||
field=models.CharField(default='url', max_length=256, verbose_name='WSDL URL Portail'),
|
||||
preserve_default=False,
|
||||
),
|
||||
]
|
Binary file not shown.
|
@ -0,0 +1,40 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('cartads', '0005_auto_20180424_1616'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='cartads',
|
||||
name='wsdl_url_etapedossier',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='cartads',
|
||||
name='wsdl_url_portail',
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='cartads',
|
||||
name='cle_token_gfi',
|
||||
field=models.CharField(default='cle_token_gfi', max_length=128, verbose_name='Cle Token GFI'),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='cartads',
|
||||
name='sendfile_ws_url',
|
||||
field=models.CharField(default='https://api-rec.grandlyon.com/ads-sendfile-rec/sendfile.aspx', max_length=256, verbose_name='sendfile ws url'),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='cartads',
|
||||
name='wsdl_ads_dir_url',
|
||||
field=models.CharField(default='https://passerelle.guichet-recette.grandlyon.com/media/bap/cartads-rec/', max_length=256, verbose_name='WSDL ADS Dir URL'),
|
||||
preserve_default=False,
|
||||
),
|
||||
]
|
|
@ -84,8 +84,9 @@ def sudsobject_to_dict(sudsobject):
|
|||
class CartADS(BaseResource):
|
||||
token_url = models.URLField(_('Token URL'), max_length=256)
|
||||
token_authorization = models.CharField(_('Token Authorization'), max_length=128)
|
||||
wsdl_url_portail = models.CharField(_('WSDL URL Portail'), max_length=256) # not URLField, it can be file://
|
||||
wsdl_url_etapedossier = models.CharField(_('WSDL URL EtapeDossier'), max_length=256) # not URLField, it can be file://
|
||||
wsdl_ads_dir_url = models.CharField(_('WSDL ADS Dir URL'), max_length=256) # not URLField, it can be file://
|
||||
sendfile_ws_url = models.CharField(_('sendfile ws url'), max_length=256) # not URLField, it can be file://
|
||||
cle_token_gfi = models.CharField(_('Cle Token GFI'), max_length=128)
|
||||
verify_cert = models.BooleanField(default=True,
|
||||
verbose_name=_('Check HTTPS Certificate validity'))
|
||||
# TODO : a mettre en param du connecteur
|
||||
|
@ -148,7 +149,7 @@ class CartADS(BaseResource):
|
|||
|
||||
return Reply(resp.status_code, resp.headers, resp.content)
|
||||
|
||||
return Client(url=self.wsdl_url_portail+wsdl_file, transport=Transport(self, attachments))
|
||||
return Client(url=self.wsdl_ads_dir_url+wsdl_file, transport=Transport(self, attachments))
|
||||
|
||||
|
||||
@endpoint(perm='can_access', methods=['get','post'])
|
||||
|
@ -244,7 +245,7 @@ class CartADS(BaseResource):
|
|||
# TODO : mettre en parametre l'url du ws sendfile
|
||||
for x in range(0, len(b64_fileContent)/size_max + 1):
|
||||
#respHttp = self.requests.post('https://api-rec.grandlyon.com/ads-sendfile-dev/sendfile.aspx',
|
||||
respHttp = self.requests.post('https://api-rec.grandlyon.com/ads-sendfile-rec/sendfile.aspx',
|
||||
respHttp = self.requests.post(self.sendfile_ws_url,
|
||||
data={'fileName': self.dirname+zipFileName,
|
||||
'b64_fileContent': b64_fileContent[x*size_max:(x+1)*size_max],
|
||||
'part': str(x),
|
||||
|
@ -325,11 +326,12 @@ class CartADS(BaseResource):
|
|||
|
||||
#07/05/2018, avec "cle-secrete-gfi!", "!gf1-cl3-s3cr3t3", utilisée dans CartADS de REC :
|
||||
#{'date':'23/01/2028 15:10:00','login':'gnm','password':'Gu!che7'}
|
||||
if not "dev" in self.wsdl_url_portail:
|
||||
return 'ieTluf0q6vwjitxope55YZ2ud0CEtuO9BBHr2hQaxySeDrz66mntHl83Wqj7oadMSyZqwSkzVdZJrQ92Zg2p3bwkAuv5yUzwmpBfdtAYYLE='
|
||||
else:
|
||||
#07/05/2018, avec "cle-secrete-gly!", "!gl1-cl3-s3cr3t3", utilisée dans CartADS de DEV :
|
||||
#{'date':'23/01/2028 15:10:00','login':'gnm','password':'Gu!che7'}
|
||||
if self.cle_token_gfi == "cle-secrete-gfi!":
|
||||
return "ieTluf0q6vwjitxope55YZ2ud0CEtuO9BBHr2hQaxySeDrz66mntHl83Wqj7oadMSyZqwSkzVdZJrQ92Zg2p3bwkAuv5yUzwmpBfdtAYYLE="
|
||||
|
||||
#07/05/2018, avec "cle-secrete-gly!", "!gl1-cl3-s3cr3t3", utilisée dans CartADS de DEV :
|
||||
#{'date':'23/01/2028 15:10:00','login':'gnm','password':'Gu!che7'}
|
||||
if self.cle_token_gfi == "cle-secrete-gly!":
|
||||
return "HQgzlNovC9eyesEH5Fl6P8aBDYkgtVDq/GiOxLL3XfhcsiRecO3IJyqXro6Z3wekk08QwXvVx9tqeqzk81MS8b4LYBhUkj2bFeiDGBsLHFc="
|
||||
|
||||
|
||||
|
@ -373,11 +375,7 @@ class CartADS(BaseResource):
|
|||
|
||||
def getKey(objet):
|
||||
return objet['id']
|
||||
|
||||
data = sorted(out, key=getKey)
|
||||
|
||||
print >> open('/home/grandlyon/log/cartads.debug', 'a+'), datetime.datetime.now(), "data: ", data
|
||||
return {'data': data}
|
||||
return {'data': sorted(out, key=getKey)}
|
||||
|
||||
@endpoint(perm='can_access')
|
||||
def get_liste_pdf(self, request, type_dossier):
|
||||
|
@ -439,70 +437,61 @@ class CartADS(BaseResource):
|
|||
resp = self.get_client('cartads-dossier.wsdl').service.GetInfosDossier(self.get_token_cartads(), id_dossier)
|
||||
return {'data': sudsobject_to_dict(resp)}
|
||||
|
||||
@endpoint(perm='can_access')
|
||||
def write_wcs_files(self, request, type_dossier):
|
||||
h = HTMLParser.HTMLParser() # h.unescape(string) decode le html qui vient du web service en unicode : http://fredericiana.com/2010/10/08/decoding-html-entities-to-text-in-python/
|
||||
output_string = u"<!--#### A inserer a partir du field 'Pièces à joindre' jusqu'a la fin des </fields> -->\n"
|
||||
|
||||
dict_resp = self.get_objets_demande(request, type_dossier)
|
||||
for objet in dict_resp['data']:
|
||||
#print >> open('/home/grandlyon/log/cartads.debug', 'a+'), datetime.datetime.now(), "objet: ", objet
|
||||
#return {'data': dict_resp}
|
||||
|
||||
resp = self.get_pieces(request, type_dossier, objet["id"])
|
||||
dict_resp = resp["data"]
|
||||
|
||||
#print >> open('/home/grandlyon/log/cartads.debug', 'a+'), datetime.datetime.now(), "dict_resp: ", dict_resp
|
||||
|
||||
date_file = datetime.datetime.now()
|
||||
#TODO: faire un id unique et invariant si on reimporte le form (si ajout de champs dans le BO cartads)
|
||||
#(par exemple : 1000*objet["id"]+10*no du champ+no de la piece si elle est envoyee 6 fois)
|
||||
id = 100*objet["id"]
|
||||
|
||||
output_string += u"<field>\n"
|
||||
output_string += u" <label>Pièces à joindre</label>\n"
|
||||
output_string += u" <type>page</type>\n"
|
||||
output_string += u" <condition>\n"
|
||||
output_string += u" <type>python</type>\n"
|
||||
output_string += u' <value>form_var_objet_raw == "'+str(objet["id"]).decode('utf8')+u'"</value>\n'
|
||||
output_string += u" </condition><id>"+str(id).decode('utf8')+u"</id>\n"
|
||||
id += 1
|
||||
def write_wcs_page(self, request, no_page, label_page, output_string, objet, id):
|
||||
output_string += u"<field>\n"
|
||||
output_string += u" <label>"+label_page+u"</label>\n"
|
||||
output_string += u" <type>page</type>\n"
|
||||
output_string += u" <condition>\n"
|
||||
output_string += u" <type>python</type>\n"
|
||||
output_string += u' <value>form_var_objet_raw == "'+str(objet["id"]).decode('utf8')+u'"'
|
||||
if no_page==u"5":
|
||||
output_string += u' and form_var_demolition == "Oui"'
|
||||
output_string += u' </value>\n'
|
||||
output_string += u" </condition><id>"+str(id).decode('utf8')+u"</id>\n"
|
||||
output_string += u" </field><field>\n"
|
||||
output_string += u' <label><p><strong><span style="color: rgb(134, 134, 134); font-family: Roboto, sans-serif; letter-spacing: 1px;">'+no_page+'. </span><strong class="label" id="label'+str(id).decode('utf8')+u'">'+label_page+'</strong></strong></p></label>\n'
|
||||
output_string += u" <type>comment</type>\n"
|
||||
# on incremente l'id du label apres rempli l'id labelxxxx du commentaire du label
|
||||
id += 1
|
||||
output_string += u" <id>"+str(id).decode('utf8')+u"</id>\n"
|
||||
id += 1
|
||||
output_string += u" </field><field>\n"
|
||||
output_string += u' <label>[is form_option_type_dossier "foo"] [end]'
|
||||
output_string += u"\n"
|
||||
output_string += u'<span id="logo_commune"></span>\n'
|
||||
output_string += u"\n"
|
||||
output_string += u"\n"
|
||||
output_string += u'<script type="text/javascript">\n'
|
||||
output_string += u"function slugify(text)\n"
|
||||
output_string += u"{\n"
|
||||
output_string += u" return text.toString().toLowerCase()\n"
|
||||
output_string += u" .replace(/\s+/g, '-') // Replace spaces with -\n"
|
||||
output_string += u" .replace(/\'/g, '-') // Replace ' with -\n"
|
||||
output_string += u" .replace(/ô/g, 'o').replace(/é/g, 'e').replace(/è/g, 'e') // Remove accent\n"
|
||||
output_string += u" .replace(/[^\w\-]+/g, '') // Remove all non-word chars\n"
|
||||
output_string += u" .replace(/\-\-+/g, '-') // Replace multiple - with single -\n"
|
||||
output_string += u" .replace(/^-+/, '') // Trim - from start of text\n"
|
||||
output_string += u" .replace(/-+$/, ''); // Trim - from end of text\n"
|
||||
output_string += u"}\n"
|
||||
output_string += u"function setLogo()\n"
|
||||
output_string += u"{\n"
|
||||
output_string += u' var selectedText ="[form_var_commune]";\n'
|
||||
output_string += u" var communeChanged = slugify(selectedText);\n"
|
||||
output_string += u" // Pour enlever arrondissement de Lyon\n"
|
||||
output_string += u' if( selectedText.startsWith("Lyon") ) communeChanged = "lyon"\n'
|
||||
output_string += u' $("#logo_commune").html(\'<img src="[portal_url]static/grandlyon-gnm/producers/\'+communeChanged+\'.png" />\');\n'
|
||||
output_string += u"}\n"
|
||||
output_string += u"setLogo();\n"
|
||||
output_string += u"</script>\n"
|
||||
output_string += u"\n"
|
||||
output_string += u"</label>\n"
|
||||
output_string += u" <type>comment</type>\n"
|
||||
output_string += u" <extra_css_class>imgCommune</extra_css_class>\n"
|
||||
output_string += u" <id>"+str(id).decode('utf8')+u"</id>\n"
|
||||
id += 1
|
||||
if no_page==u"3":
|
||||
output_string += u" </field><field>\n"
|
||||
output_string += u' <label>[is form_option_type_dossier "foo"] [end]'
|
||||
output_string += u"\n"
|
||||
output_string += u'<span id="logo_commune"></span>\n'
|
||||
output_string += u"\n"
|
||||
output_string += u"\n"
|
||||
output_string += u'<script type="text/javascript">\n'
|
||||
output_string += u"function slugify(text)\n"
|
||||
output_string += u"{\n"
|
||||
output_string += u" return text.toString().toLowerCase()\n"
|
||||
output_string += u" .replace(/\s+/g, '-') // Replace spaces with -\n"
|
||||
output_string += u" .replace(/\'/g, '-') // Replace ' with -\n"
|
||||
output_string += u" .replace(/ô/g, 'o').replace(/é/g, 'e').replace(/è/g, 'e') // Remove accent\n"
|
||||
output_string += u" .replace(/[^\w\-]+/g, '') // Remove all non-word chars\n"
|
||||
output_string += u" .replace(/\-\-+/g, '-') // Replace multiple - with single -\n"
|
||||
output_string += u" .replace(/^-+/, '') // Trim - from start of text\n"
|
||||
output_string += u" .replace(/-+$/, ''); // Trim - from end of text\n"
|
||||
output_string += u"}\n"
|
||||
output_string += u"function setLogo()\n"
|
||||
output_string += u"{\n"
|
||||
output_string += u' var selectedText ="[form_var_commune]";\n'
|
||||
output_string += u" var communeChanged = slugify(selectedText);\n"
|
||||
output_string += u" // Pour enlever arrondissement de Lyon\n"
|
||||
output_string += u' if( selectedText.startsWith("Lyon") ) communeChanged = "lyon"\n'
|
||||
output_string += u' $("#logo_commune").html(\'<img src="[portal_url]static/grandlyon-gnm/producers/\'+communeChanged+\'.png" />\');\n'
|
||||
output_string += u"}\n"
|
||||
output_string += u"setLogo();\n"
|
||||
output_string += u"</script>\n"
|
||||
output_string += u"\n"
|
||||
output_string += u"</label>\n"
|
||||
output_string += u" <type>comment</type>\n"
|
||||
output_string += u" <extra_css_class>imgCommune</extra_css_class>\n"
|
||||
output_string += u" <id>"+str(id).decode('utf8')+u"</id>\n"
|
||||
id += 1
|
||||
output_string += u" </field><field>\n"
|
||||
output_string += u" <label><p><strong>2/ Votre dossier est pr&ecirc;t &agrave; &ecirc;tre d&eacute;pos&eacute;.</strong></p><p>Merci de nous faire parvenir les pi&egrave;ces ci-dessous.</p><p>&nbsp;</p></label>\n"
|
||||
output_string += u" <label><p><strong>Votre dossier est pr&ecirc;t &agrave; &ecirc;tre d&eacute;pos&eacute;.</strong></p><p>Merci de nous faire parvenir les pi&egrave;ces ci-dessous.</p><p>&nbsp;</p></label>\n"
|
||||
output_string += u" <type>comment</type>\n"
|
||||
output_string += u" <id>"+str(id).decode('utf8')+u"</id>\n"
|
||||
id += 1
|
||||
|
@ -518,7 +507,37 @@ class CartADS(BaseResource):
|
|||
output_string += u" <allow_portfolio_picking>True</allow_portfolio_picking>\n"
|
||||
output_string += u" <id>"+str(id).decode('utf8')+u"</id>\n"
|
||||
id += 1
|
||||
output_string += u" </field>\n"
|
||||
output_string += u" </field>\n"
|
||||
|
||||
return output_string, id
|
||||
|
||||
@endpoint(perm='can_access')
|
||||
def write_wcs_files(self, request, type_dossier):
|
||||
h = HTMLParser.HTMLParser() # h.unescape(string) decode le html qui vient du web service en unicode : http://fredericiana.com/2010/10/08/decoding-html-entities-to-text-in-python/
|
||||
output_string = u"<!--#### A inserer a partir du field 'Pièces obligatoires' jusqu'a la fin des </fields> -->\n"
|
||||
|
||||
# page en cours de construction : 0 = pieces obligatoires
|
||||
current_page = 0
|
||||
|
||||
dict_resp = self.get_objets_demande(request, type_dossier)
|
||||
for objet in dict_resp['data']:
|
||||
#print >> open('/home/grandlyon/log/cartads.debug', 'a+'), datetime.datetime.now(), "objet: ", objet
|
||||
#return {'data': dict_resp}
|
||||
|
||||
resp = self.get_pieces(request, type_dossier, objet["id"])
|
||||
dict_resp = resp["data"]
|
||||
|
||||
#print >> open('/home/grandlyon/log/cartads.debug', 'a+'), datetime.datetime.now(), "dict_resp: ", dict_resp
|
||||
|
||||
date_file = datetime.datetime.now()
|
||||
#TODO: faire un id unique et invariant si on reimporte le form (si ajout de champs dans le BO cartads)
|
||||
#(par exemple : 1000*objet["id"]+10*no du champ+no de la piece si elle est envoyee 6 fois)
|
||||
# Attention l'id ne doit pas contenir de - sinon provoque Internal Server error a l'import dans wcs
|
||||
id = 100*objet["id"]
|
||||
|
||||
# page en cours de construction : 0 = pieces obligatoires
|
||||
current_page = 0
|
||||
output_string, id = self.write_wcs_page(request, u"3", u"Pièces obligatoires", output_string, objet, id)
|
||||
|
||||
|
||||
for piece in dict_resp['Piece']:
|
||||
|
@ -526,6 +545,17 @@ class CartADS(BaseResource):
|
|||
#for key, value in piece.items():
|
||||
#print >> open('/home/grandlyon/log/'+type_dossier+'_'+date_file.strftime('%Y%m%d%H%M%S')+'.wcs', 'a+'), key,": ", value
|
||||
#self.print_wcs_files(type_dossier, date_file, key+": "+str(value))
|
||||
|
||||
if piece["Reglementaire"] == False and current_page == 0:
|
||||
# page en cours de construction : 1 = pieces selon le dossier
|
||||
current_page = 1
|
||||
output_string, id = self.write_wcs_page(request, u"4", u"Pièces selon le dossier", output_string, objet, id)
|
||||
|
||||
if str(piece["CodePiece"]).startswith("PCA") and current_page == 1:
|
||||
# page en cours de construction : 2 = pieces pour demolition
|
||||
current_page = 2
|
||||
output_string, id = self.write_wcs_page(request, u"5", u"Pièces pour démolition", output_string, objet, id)
|
||||
|
||||
output_string += u"<field>\n"
|
||||
output_string += u" <label>"+str(piece["CodePiece"]).decode('utf8')+u" - "+h.unescape(piece["Libelle"])+u"</label>\n"
|
||||
output_string += u" <type>file</type>\n"
|
||||
|
@ -543,7 +573,7 @@ class CartADS(BaseResource):
|
|||
output_string += u" <id>"+str(id).decode('utf8')+u"</id>\n"
|
||||
output_string += u"</field>\n"
|
||||
|
||||
#test : ajouter 5 PJ supplementaires par pièce
|
||||
# ajoute 5 PJ supplementaires par pièce
|
||||
for i in range(2):
|
||||
output_string += u" <field>\n"
|
||||
output_string += u" <label>"+str(piece["CodePiece"]).decode('utf8')+u" - "+h.unescape(piece["Libelle"])+u" "+str(i+1)+u"</label>\n"
|
||||
|
|
Binary file not shown.
|
@ -0,0 +1,118 @@
|
|||
/* img commune */
|
||||
@media screen and (min-width: 1000px) {
|
||||
.formdef-permis-de-construire .imgCommune img,
|
||||
.formdef-certificat-d-urbanisme .imgCommune img {
|
||||
position: absolute;
|
||||
top: 132px;
|
||||
left: 500px;
|
||||
height: 100px;
|
||||
}
|
||||
}
|
||||
|
||||
/* File upload styling for permis de construire */
|
||||
.formdef-permis-de-construire .FileWithPreviewWidget {
|
||||
display: flow-root;
|
||||
border-bottom: 0.1em solid #80808052;
|
||||
background-color: #d3d3d333;
|
||||
}
|
||||
.formdef-permis-de-construire .FileWithPreviewWidget .title,
|
||||
.formdef-permis-de-construire .FileWithPreviewWidget .content,
|
||||
.formdef-permis-de-construire .FileWidget {
|
||||
display: inline-block;
|
||||
}
|
||||
.formdef-permis-de-construire .widget .title {
|
||||
padding: 10px;
|
||||
}
|
||||
.formdef-permis-de-construire form.quixote div.widget {
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
.formdef-permis-de-construire .FileWithPreviewWidget .content {
|
||||
position: relative;
|
||||
float: right;
|
||||
max-width: 258px;
|
||||
height: 35px;
|
||||
}
|
||||
.formdef-permis-de-construire .FileWithPreviewWidget.widget-required.has-no-file {
|
||||
background-color: #ff000030;
|
||||
}
|
||||
.formdef-permis-de-construire .FileWithPreviewWidget.has-file {
|
||||
background-color: #b9d4b9;
|
||||
}
|
||||
.formdef-permis-de-construire .FileWithPreviewWidget .fileprogress,
|
||||
.formdef-permis-de-construire .FileWithPreviewWidget .fileinfo {
|
||||
position: relative;
|
||||
top: -35px;
|
||||
}
|
||||
.formdef-permis-de-construire .FileWithPreviewWidget.widget-readonly .fileinfo {
|
||||
top: 10px;
|
||||
padding-right: 10px;
|
||||
}
|
||||
.formdef-permis-de-construire .FileWithPreviewWidget .hint {
|
||||
position: relative;
|
||||
color:#ffffff00;
|
||||
padding: 3px 8px 5px 8px;
|
||||
top: -10px;
|
||||
left: -270px;
|
||||
}
|
||||
/*.formdef-permis-de-construire .FileWithPreviewWidget .hint:hover,*/
|
||||
.formdef-permis-de-construire .FileWithPreviewWidget .hint:active {
|
||||
position: relative;
|
||||
background-color: #d0e3ff;
|
||||
border: 0.01em solid #4e4e4e;
|
||||
color: #000;
|
||||
z-index: 99999;
|
||||
}
|
||||
.formdef-permis-de-construire .FileWithPreviewWidget .hint:before {
|
||||
position: relative;
|
||||
content: "ⓘ";
|
||||
font-size: 1.3em;
|
||||
color: #4242d0;
|
||||
float: right;
|
||||
top: -20px;
|
||||
cursor: help;
|
||||
}
|
||||
.formdef-permis-de-construire .FileWithPreviewWidget.has-file + .FileWithPreviewWidget.plus label,
|
||||
.formdef-permis-de-construire .FileWithPreviewWidget.has-file .error,
|
||||
.formdef-permis-de-construire .FileWithPreviewWidget.has-file .hint,
|
||||
.formdef-permis-de-construire .FileWithPreviewWidget.plus {
|
||||
display: none;
|
||||
}
|
||||
.formdef-permis-de-construire .FileWithPreviewWidget.has-file + .FileWithPreviewWidget.plus {
|
||||
display: flow-root;
|
||||
position: relative;
|
||||
top: -7px;
|
||||
background-color: #b9d4b9;
|
||||
height: 43px;
|
||||
}
|
||||
.formdef-permis-de-construire .FileWithPreviewWidget.has-file + .FileWithPreviewWidget.plus2 {
|
||||
top: -14px;
|
||||
}
|
||||
.formdef-permis-de-construire .FileWithPreviewWidget.has-file + .FileWithPreviewWidget.plus3 {
|
||||
top: -21px;
|
||||
}
|
||||
.formdef-permis-de-construire .FileWithPreviewWidget.has-file + .FileWithPreviewWidget.plus4 {
|
||||
top: -28px;
|
||||
}
|
||||
.formdef-permis-de-construire .FileWithPreviewWidget.has-file + .FileWithPreviewWidget.plus5 {
|
||||
top: -35px;
|
||||
}
|
||||
.formdef-permis-de-construire .FileWithPreviewWidget.plus.widget-readonly.has-no-file {
|
||||
display: none;
|
||||
}
|
||||
.formdef-permis-de-construire .FileWithPreviewWidget.has-no-file .error {
|
||||
left: -180px;
|
||||
position: relative;
|
||||
line-height: 0px;
|
||||
color: red;
|
||||
font-weight: bold;
|
||||
top: -25px;
|
||||
}
|
||||
|
||||
/* case à cocher */
|
||||
.formdef-permis-de-construire .checkbox-cerfa .content,
|
||||
.formdef-permis-de-construire .checkbox-cerfa .title {
|
||||
display: inline;
|
||||
}
|
||||
.formdef-permis-de-construire .checkbox-cerfa .content {
|
||||
float: left;
|
||||
}
|
Reference in New Issue