Overview
Comment:Fix and improve UX for mobile use
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | dev | 1.0.0-alpha6
Files: files | file ages | folders
SHA1: cea689ace6439e72e8e097a6d0a61508202562e1
User & Date: bohwaz on 2020-11-11 15:19:58
Other Links: branch diff | manifest | tags
Context
2020-11-11
15:49
Fix negative values in expense/revenue (thanks @Fred) check-in: 9e0fbf1dd9 user: bohwaz tags: dev, 1.0.0-alpha6
15:19
Fix and improve UX for mobile use check-in: cea689ace6 user: bohwaz tags: dev, 1.0.0-alpha6
13:46
Fix: adding a payment to a service should be done after the service is saved check-in: 87493a2303 user: bohwaz tags: dev, 1.0.0-alpha6
Changes

Modified src/templates/acc/charts/index.tpl from [222ec4aa08] to [085c49afb1].

30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
		<tbody>
			{foreach from=$list item="item"}
				<tr{if $item.archived} class="disabled"{/if}>
					<td>{$item.country|get_country_name}</td>
					<th><a href="{$admin_url}acc/charts/accounts/?id={$item.id}">{$item.label}</a></th>
					<td>{if $item.code}Officiel{else}Personnel{/if}</td>
					<td>{if $item.archived}<em>Archivé</em>{/if}</td>
					<td>
						{linkbutton shape="star" label="Comptes favoris" href="acc/charts/accounts/?id=%d"|args:$item.id}
						{linkbutton shape="menu" label="Tous les comptes" href="acc/charts/accounts/all.php?id=%d"|args:$item.id}
						{if $session->canAccess('compta', Membres::DROIT_ADMIN)}
							{linkbutton shape="edit" label="Modifier" href="acc/charts/edit.php?id=%d"|args:$item.id}
							{linkbutton shape="export" label="Export CSV" href="acc/charts/export.php?id=%d"|args:$item.id}
							{linkbutton shape="export" label="Export tableur" href="acc/charts/export.php?id=%d&ods"|args:$item.id}
							{if !$item.code && !$item.archived}







|







30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
		<tbody>
			{foreach from=$list item="item"}
				<tr{if $item.archived} class="disabled"{/if}>
					<td>{$item.country|get_country_name}</td>
					<th><a href="{$admin_url}acc/charts/accounts/?id={$item.id}">{$item.label}</a></th>
					<td>{if $item.code}Officiel{else}Personnel{/if}</td>
					<td>{if $item.archived}<em>Archivé</em>{/if}</td>
					<td class="actions">
						{linkbutton shape="star" label="Comptes favoris" href="acc/charts/accounts/?id=%d"|args:$item.id}
						{linkbutton shape="menu" label="Tous les comptes" href="acc/charts/accounts/all.php?id=%d"|args:$item.id}
						{if $session->canAccess('compta', Membres::DROIT_ADMIN)}
							{linkbutton shape="edit" label="Modifier" href="acc/charts/edit.php?id=%d"|args:$item.id}
							{linkbutton shape="export" label="Export CSV" href="acc/charts/export.php?id=%d"|args:$item.id}
							{linkbutton shape="export" label="Export tableur" href="acc/charts/export.php?id=%d&ods"|args:$item.id}
							{if !$item.code && !$item.archived}

Modified src/templates/acc/reports/_header.tpl from [31fe879fc1] to [f3e75759d5].

15
16
17
18
19
20
21
22
23
24
25
	{if isset($projet)}
		<h3>Projet&nbsp;: {$projet.libelle}</h3>
	{else}
		<p>Exercice comptable {if $year.closed}clôturé{else}en cours{/if} du
			{$year.start_date|date_fr:'d/m/Y'} au {$year.end_date|date_fr:'d/m/Y'}, généré le {$close_date|date_fr:'d/m/Y'}</p>
	{/if}

	<p class="noprint">
		<button onclick="window.print(); return false;" class="icn-btn" data-icon="⎙">Imprimer</button>
	</p>
</div>







|



15
16
17
18
19
20
21
22
23
24
25
	{if isset($projet)}
		<h3>Projet&nbsp;: {$projet.libelle}</h3>
	{else}
		<p>Exercice comptable {if $year.closed}clôturé{else}en cours{/if} du
			{$year.start_date|date_fr:'d/m/Y'} au {$year.end_date|date_fr:'d/m/Y'}, généré le {$close_date|date_fr:'d/m/Y'}</p>
	{/if}

	<p class="noprint print-btn">
		<button onclick="window.print(); return false;" class="icn-btn" data-icon="⎙">Imprimer</button>
	</p>
</div>

Modified src/templates/admin/config/membres.tpl from [390ae58764] to [97234c6526].

92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108

<form method="post" action="{$self_url}">
    <fieldset>
        <legend>Ajouter un champ personnalisé</legend>
        <dl>
            <dt><label for="f_name">Nom unique</label> <b title="(Champ obligatoire)">obligatoire</b></dt>
            <dd class="help">Ne peut comporter que des lettres minuscules et des tirets bas.</dd>
            <dd><input type="text" name="new" id="f_name" value="{form_field name=new}" size="30" required="required" /></dd>
            <dt><label for="f_title">Titre</label> <b title="(Champ obligatoire)">obligatoire</b></dt>
            <dd><input type="text" name="new_title" id="f_title" value="{form_field name=new_title}" size="60" required="required" /></dd>
            <dt><label for="f_type">Type de champ</label> <b title="(Champ obligatoire)">obligatoire</b></dt>
            <dd>
                <select name="new_type" id="f_type" required="required">
                    {foreach from=$types key="type" item="nom"}
                    <option value="{$type}" {form_field name=new_type selected=$type}>{$nom}</option>
                    {/foreach}
                </select>







|

|







92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108

<form method="post" action="{$self_url}">
    <fieldset>
        <legend>Ajouter un champ personnalisé</legend>
        <dl>
            <dt><label for="f_name">Nom unique</label> <b title="(Champ obligatoire)">obligatoire</b></dt>
            <dd class="help">Ne peut comporter que des lettres minuscules et des tirets bas.</dd>
            <dd><input type="text" name="new" id="f_name" value="{form_field name=new}" required="required" /></dd>
            <dt><label for="f_title">Titre</label> <b title="(Champ obligatoire)">obligatoire</b></dt>
            <dd><input type="text" name="new_title" id="f_title" value="{form_field name=new_title}" required="required" /></dd>
            <dt><label for="f_type">Type de champ</label> <b title="(Champ obligatoire)">obligatoire</b></dt>
            <dd>
                <select name="new_type" id="f_type" required="required">
                    {foreach from=$types key="type" item="nom"}
                    <option value="{$type}" {form_field name=new_type selected=$type}>{$nom}</option>
                    {/foreach}
                </select>
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
        {if $nom == 'passe'}{continue}{/if}
        <fieldset id="f_{$nom}">
            <legend>{$nom}</legend>
            <dl>
                <dt><label>Type</label></dt>
                <dd><input type="hidden" name="champs[{$nom}][type]" value="{$champ.type}" />{$champ.type|get_type}</dd>
                <dt><label for="f_{$nom}_title">Titre</label> <b title="(Champ obligatoire)">obligatoire</b></dt>
                <dd><input type="text" name="champs[{$nom}][title]" id="f_{$nom}_title" value="{form_field data=$champs->$nom name=title}" size="60" required="required" /></dd>
                <dt><label for="f_{$nom}_help">Aide</label></dt>
                <dd><input type="text" name="champs[{$nom}][help]" id="f_{$nom}_help" value="{form_field data=$champs->$nom name=help}" size="100" /></dd>
                <dt><label><input type="checkbox" name="champs[{$nom}][private]" value="1" {form_field data=$champs->$nom name=private checked="1"} /> Caché pour les membres</label></dt>
                <dd class="help">Si coché, ce champ ne sera pas visible par les membres dans leur espace personnel.</dd>
                <dt><label><input type="checkbox" name="champs[{$nom}][editable]" value="1" {form_field data=$champs->$nom name=editable checked="1"} /> Modifiable par les membres</label></dt>
                <dd class="help">Si coché, les membres pourront changer cette information depuis leur espace personnel.</dd>
                <dt><label><input type="checkbox" name="champs[{$nom}][mandatory]" value="1" {form_field data=$champs->$nom name=mandatory checked="1"} /> Champ obligatoire</label></dt>
                <dd class="help">Si coché, ce champ ne pourra rester vide.</dd>
                {if $champ.type == 'select' || $champ.type == 'multiple'}
                    <dt><label>Options disponibles</label></dt>
                    {if $champ.type == 'multiple'}
                        <dd class="help">Attention changer l'ordre des options peut avoir des effets indésirables.</dd>
                    {else}
                        <dd class="help">Attention renommer ou supprimer une option n'affecte pas ce qui a déjà été enregistré dans les fiches des membres.</dd>
                    {/if}
                    <dd>
                        <{if $champ.type == 'multiple'}ol{else}ul{/if} class="options">
                        {if !empty($champ.options)}
                            {foreach from=$champ.options key="key" item="opt"}
                                <li><input type="text" name="champs[{$nom}][options][]" value="{$opt}" size="50" /></li>
                            {/foreach}
                        {/if}
                        {if $champ.type == 'select' || empty($champ.options) || count($champ.options) < 32}
                            <li><input type="text" name="champs[{$nom}][options][]" value="" size="50" /></li>
                        {/if}
                    </dd>
                {/if}
                <dt><label for="f_{$nom}_list_row">Numéro de colonne dans la liste des membres</label></dt>
                <dd class="help">Laisser vide ou indiquer le chiffre zéro pour que ce champ n'apparaisse pas dans la liste des membres. Inscrire un chiffre entre 1 et 10 pour indiquer l'ordre d'affichage du champ dans le tableau de la liste des membres.</dd>
                <dd><input type="number" id="f_{$nom}_list_row" name="champs[{$nom}][list_row]" min="0" max="10" value="{form_field data=$champs->$nom name=list_row}" /></dd>
            </dl>







|

|

















|



|







122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
        {if $nom == 'passe'}{continue}{/if}
        <fieldset id="f_{$nom}">
            <legend>{$nom}</legend>
            <dl>
                <dt><label>Type</label></dt>
                <dd><input type="hidden" name="champs[{$nom}][type]" value="{$champ.type}" />{$champ.type|get_type}</dd>
                <dt><label for="f_{$nom}_title">Titre</label> <b title="(Champ obligatoire)">obligatoire</b></dt>
                <dd><input type="text" name="champs[{$nom}][title]" id="f_{$nom}_title" value="{form_field data=$champs->$nom name=title}" required="required" /></dd>
                <dt><label for="f_{$nom}_help">Aide</label></dt>
                <dd><input type="text" name="champs[{$nom}][help]" id="f_{$nom}_help" value="{form_field data=$champs->$nom name=help}" /></dd>
                <dt><label><input type="checkbox" name="champs[{$nom}][private]" value="1" {form_field data=$champs->$nom name=private checked="1"} /> Caché pour les membres</label></dt>
                <dd class="help">Si coché, ce champ ne sera pas visible par les membres dans leur espace personnel.</dd>
                <dt><label><input type="checkbox" name="champs[{$nom}][editable]" value="1" {form_field data=$champs->$nom name=editable checked="1"} /> Modifiable par les membres</label></dt>
                <dd class="help">Si coché, les membres pourront changer cette information depuis leur espace personnel.</dd>
                <dt><label><input type="checkbox" name="champs[{$nom}][mandatory]" value="1" {form_field data=$champs->$nom name=mandatory checked="1"} /> Champ obligatoire</label></dt>
                <dd class="help">Si coché, ce champ ne pourra rester vide.</dd>
                {if $champ.type == 'select' || $champ.type == 'multiple'}
                    <dt><label>Options disponibles</label></dt>
                    {if $champ.type == 'multiple'}
                        <dd class="help">Attention changer l'ordre des options peut avoir des effets indésirables.</dd>
                    {else}
                        <dd class="help">Attention renommer ou supprimer une option n'affecte pas ce qui a déjà été enregistré dans les fiches des membres.</dd>
                    {/if}
                    <dd>
                        <{if $champ.type == 'multiple'}ol{else}ul{/if} class="options">
                        {if !empty($champ.options)}
                            {foreach from=$champ.options key="key" item="opt"}
                                <li><input type="text" name="champs[{$nom}][options][]" value="{$opt}" /></li>
                            {/foreach}
                        {/if}
                        {if $champ.type == 'select' || empty($champ.options) || count($champ.options) < 32}
                            <li><input type="text" name="champs[{$nom}][options][]" value="" /></li>
                        {/if}
                    </dd>
                {/if}
                <dt><label for="f_{$nom}_list_row">Numéro de colonne dans la liste des membres</label></dt>
                <dd class="help">Laisser vide ou indiquer le chiffre zéro pour que ce champ n'apparaisse pas dans la liste des membres. Inscrire un chiffre entre 1 et 10 pour indiquer l'ordre d'affichage du champ dans le tableau de la liste des membres.</dd>
                <dd><input type="number" id="f_{$nom}_list_row" name="champs[{$nom}][list_row]" min="0" max="10" value="{form_field data=$champs->$nom name=list_row}" /></dd>
            </dl>

Modified src/templates/admin/index.tpl from [de2904cc75] to [280594afc5].

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{include file="admin/_head.tpl" title="Bonjour %s !"|args:$user.identite current="home"}

{$banniere|raw}

<nav class="tabs">
    <ul>
        <li><a href="{$admin_url}mes_infos.php">Modifier mes informations personnelles</a></li>
        <li><a href="{$admin_url}mes_cotisations.php">Suivi de mes cotisations</a></li>
    </ul>
</nav>

<aside class="describe">
    <h3>{$config.nom_asso}</h3>
    {if !empty($config.adresse_asso)}
    <p>







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{include file="admin/_head.tpl" title="Bonjour %s !"|args:$user.identite current="home"}

{$banniere|raw}

<nav class="tabs">
    <ul>
        <li><a href="{$admin_url}mes_infos.php">Modifier mes informations personnelles</a></li>
        <li><a href="{$admin_url}my_services.php">Suivi de mes cotisations</a></li>
    </ul>
</nav>

<aside class="describe">
    <h3>{$config.nom_asso}</h3>
    {if !empty($config.adresse_asso)}
    <p>

Modified src/templates/services/_service_form.tpl from [f4b4371dba] to [576ac0d0e7].

1
2
3
4
5
6
7
8
9
10
{form_errors}

<form method="post" action="{$self_url}" data-focus="1">

	<fieldset>
		<legend>{$legend}</legend>
		<dl>
			{input name="label" type="text" required=1 label="Libellé" source=$service}
			{input name="description" type="textarea" label="Description" source=$service}



|







1
2
3
4
5
6
7
8
9
10
{form_errors}

<form method="post" action="{$self_url}">

	<fieldset>
		<legend>{$legend}</legend>
		<dl>
			{input name="label" type="text" required=1 label="Libellé" source=$service}
			{input name="description" type="textarea" label="Description" source=$service}

Modified src/www/admin/static/admin.css from [7683289c5f] to [799a6dd915].

414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
    padding: .2em .4em;
    margin: .2em .5em;
    transition: color .3s, background-color .3s;
    color: #333;
}

form .radio-btn h3 {
    color: rgb(var(--gMainColor));
    text-decoration: underline;
}

form .radio-btn input {
    margin: 1em;
}








<







414
415
416
417
418
419
420

421
422
423
424
425
426
427
    padding: .2em .4em;
    margin: .2em .5em;
    transition: color .3s, background-color .3s;
    color: #333;
}

form .radio-btn h3 {

    text-decoration: underline;
}

form .radio-btn input {
    margin: 1em;
}

587
588
589
590
591
592
593


594
595
596
597
598
599
600
601
602
603

604
605

606
607
608
609
610
611
612
613
614








615
616
617
618
619
620
621
    color: #fff;
}

/** Dialogs pop-ins */
#dialog {
    width: 100%;
    height: 100%;


    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    background: rgba(0, 0, 0, 0.7);
    position: fixed;
    opacity: 1;
    transition: opacity .5s;
    z-index: 100000;
    display: flex;

    align-items: center;
    justify-content: center;

}

#dialog > iframe {
    width: 90%;
    height: 90%;
    border: none;
    transition: width .5s, height .5s;
    box-shadow: 0px 0px 5px #000;
}









.loader {
    width: 100%;
    min-height: 32px;
    display: block;
    position: relative;
}







>
>










>


>






<


>
>
>
>
>
>
>
>







586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614

615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
    color: #fff;
}

/** Dialogs pop-ins */
#dialog {
    width: 100%;
    height: 100%;
    margin: 0;
    padding: 0;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    background: rgba(0, 0, 0, 0.7);
    position: fixed;
    opacity: 1;
    transition: opacity .5s;
    z-index: 100000;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    border: none;
}

#dialog > iframe {
    width: 90%;
    height: 90%;
    border: none;

    box-shadow: 0px 0px 5px #000;
}

#dialog button {
    background: rgb(var(--gMainColor));
    color: #fff;
    font-size: 1.3em;
    display: block;
    width: 90%;
}

.loader {
    width: 100%;
    min-height: 32px;
    display: block;
    position: relative;
}
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
.year-header {
    text-align: center;
    margin-bottom: .8em;
    padding-bottom: .5em;
    border-bottom: 1pt solid #999;
}

.year-header button {
    font-size: 1.3rem;
}

.year-infos {
    text-align: center;
}








|







985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
.year-header {
    text-align: center;
    margin-bottom: .8em;
    padding-bottom: .5em;
    border-bottom: 1pt solid #999;
}

.year-header .print-btn button {
    font-size: 1.3rem;
}

.year-infos {
    text-align: center;
}

Modified src/www/admin/static/handheld.css from [2785cac0a7] to [b035449fe2].

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
body {
	background-position: -180px 0px;
	background-attachment: scroll;
	font-size: 11pt;
}

.header h1 {
	margin: 0;
	text-align: center;
	font-size: 1.2em;
	margin: 70pt 0 .3em 0;
}

.header .menu {
	background: none !important;
	position: fixed;
	bottom: inherit;
	overflow: visible;










|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
body {
	background-position: -180px 0px;
	background-attachment: scroll;
	font-size: 11pt;
}

.header h1 {
	margin: 0;
	text-align: center;
	font-size: 1.2em;
	margin: 6em 0 .3em 0;
}

.header .menu {
	background: none !important;
	position: fixed;
	bottom: inherit;
	overflow: visible;
77
78
79
80
81
82
83


84
85
86
87
88
89

90
91
92
93
94
95
96
97
98


99
100
101
102

103
104
105
106

107
108
109
110
111
112
113
114
115
116
117
118

119
120
121
122
123
124






125
126
127
128
129
130
131

.header .menu > ul > li.current_parent b {
	color: rgb(var(--gMainColor));
}

.header .menu > ul > li.current > ul, .header .menu > ul > li.current_parent > ul {
	display: flex;


	position: absolute;
	top: 30pt;
	left: 0;
	right: 0;
	background: #fff;
	background: rgba(255, 255, 255, 0.75);

}

.header .menu > ul > li.current > ul li, .header .menu > ul > li.current_parent > ul li {
	flex-grow: 1;
	text-align: center;
	display: block;
}

.header .menu > ul > li.current > ul a, .header .menu > ul > li.current_parent > ul a {


    color: #9c4f15;
    color: rgb(var(--gMainColor));
    padding: 2pt 3pt;
    text-decoration: underline;

}

.header .menu > ul > li > ul li.current a {
	color: rgb(var(--gSecondColor));

}

main {
	margin: 0;
	padding: .1em;
}

ul.actions {
	border: none;
	padding: 0;
	text-align: center;
	margin: .3em 0;

}

ul.actions li a, ul.actions li label {
	margin: .1em;
	border-radius: .5em;
}







.filterCategory, .searchMember {
	width: auto;
	float: none;
}

pre.sql_schema, .wikiChildren, fieldset.wikiMain, fieldset.wikiRights, fieldset.wikiEncrypt {







>
>




<

>



<





>
>
|
|
|
|
>



|
>







|


<

>


|



>
>
>
>
>
>







77
78
79
80
81
82
83
84
85
86
87
88
89

90
91
92
93
94

95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121

122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142

.header .menu > ul > li.current_parent b {
	color: rgb(var(--gMainColor));
}

.header .menu > ul > li.current > ul, .header .menu > ul > li.current_parent > ul {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	position: absolute;
	top: 30pt;
	left: 0;
	right: 0;

	background: rgba(255, 255, 255, 0.75);
	border-bottom: .2rem solid rgba(var(--gMainColor), 0.5);
}

.header .menu > ul > li.current > ul li, .header .menu > ul > li.current_parent > ul li {

	text-align: center;
	display: block;
}

.header .menu > ul > li.current > ul a, .header .menu > ul > li.current_parent > ul a {
	background: rgb(var(--gSecondColor), 0.3);
	border-radius: .5em;
	margin: .2rem;
	color: rgb(var(--gMainColor));
	padding: .3em .5em;
	font-size: .9em;
	font-weight: normal;
}

.header .menu > ul > li > ul li.current a {
	background: rgb(var(--gSecondColor));
	color: #fff;
}

main {
	margin: 0;
	padding: .1em;
}

nav.tabs ul {
	border: none;
	padding: 0;

	margin: .3em 0;
	justify-content: center;
}

nav.tabs ul li a, nav.tabs ul li label {
	margin: .1em;
	border-radius: .5em;
}

nav.tabs .sub {
	margin: 1em 0;
	border: none;
	border-top: .2rem dashed rgb(var(--gSecondColor));
}

.filterCategory, .searchMember {
	width: auto;
	float: none;
}

pre.sql_schema, .wikiChildren, fieldset.wikiMain, fieldset.wikiRights, fieldset.wikiEncrypt {
161
162
163
164
165
166
167




168
169
170
171
172
173
174
175
176
177









178
179
180
181
182
183
184
185
186
187







188



189















190


191
192





















	width: auto;
	margin-left: 0;
	margin-right: 0;
}

/* Petits écrans (smartphones) */
@media screen and (max-width:600px) {




	table.list td, table.list th {
		display: inline-block;
		border-left: 1px solid #999;
		width: auto !important;
	}

	colgroup {
		/* Hack pour désactiver les largeurs de colonnes */
		display: none;
	}










	table.list td:first-child, table.list th:first-child {
		border-left: none;
	}

	.infos_asso {
		float: none;
		width: auto;
	}








	input[type=text], textarea, input[type=password], input[type=email], input[type=url], input[type=tel], select {



		min-width: 3em;















		width: 95%;


	}
}




























>
>
>
>


|







>
>
>
>
>
>
>
>
>










>
>
>
>
>
>
>
|
>
>
>
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|
>
>

|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
	width: auto;
	margin-left: 0;
	margin-right: 0;
}

/* Petits écrans (smartphones) */
@media screen and (max-width:600px) {
	table.list tr {
		display: block;
	}

	table.list td, table.list th {
		display: inline-block;
		border-left: 2px dashed #999;
		width: auto !important;
	}

	colgroup {
		/* Hack pour désactiver les largeurs de colonnes */
		display: none;
	}

	.print-btn {
		display: none;
	}

	.radio-btn input {
		position: absolute;
		right: 1em;
	}

	table.list td:first-child, table.list th:first-child {
		border-left: none;
	}

	.infos_asso {
		float: none;
		width: auto;
	}

	nav.acc-year {
		flex-direction: column;
		border: none;
		border-radius: 0;
		background: rgba(var(--gMainColor), 0.2);
		font-size: .8em;
	}

	.actions, table.list .actions {
		text-align: center;
	}

	.actions a {
		margin: .2em;
		font-size: .9em;
	}

	nav.tabs aside {
		float: none;
		text-align: center;
	}

	#dialog {
		background: black;
	}

	#dialog > iframe {
		width: 100%;
		height: 100%;
		margin: 0;
	}

	#dialog > button {
		border: none;
		background: none;
	}

	body#popup main {
		margin: .2em;
	}

	dl.list {
		text-align: center;
	}

	table.statement td, table.statement tr {
		display: block;
	}

	dl.describe {
		grid-template: auto / 30% 1fr;
	}
}

Modified src/www/admin/static/scripts/global.js from [772e0fb33f] to [27094d6a98].

96
97
98
99
100
101
102









103
104
105
106
107
108
109
110
111

112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
		if (null !== g.dialog) {
			g.closeDialog();
		}

		g.dialog = document.createElement('dialog');
		g.dialog.id = 'dialog';
		g.dialog.open = true;









		g.dialog.style.opacity = content.style.width = content.style.height = 0;
		g.dialog.appendChild(content);
		g.dialog.onclick = (e) => { if (e.target == g.dialog) g.closeDialog(); };
		window.onkeyup = (e) => { if (e.key == 'Escape') g.closeDialog(); };

		document.body.appendChild(g.dialog);

		// Restore CSS defaults
		window.setTimeout(() => { g.dialog.style.opacity = content.style.width = content.style.height = ''; }, 50);

	}

	g.openFrameDialog = function (url) {
		var iframe = document.createElement('iframe');
		iframe.src = url;
		iframe.name = 'dialog';
		iframe.frameborder = '0';
		iframe.scrolling = 'yes';
		iframe.width = iframe.height = 0;
		iframe.onload = () => { iframe.contentWindow.onkeyup = (e) => { if (e.key == 'Escape') g.closeDialog(); };}

		g.openDialog(iframe);
	};

	g.closeDialog = function () {
		if (null === g.dialog) {
			return;
		}

		var d = g.dialog;
		var c = d.firstChild;
		d.style.opacity = c.style.width = c.style.height = 0;
		window.onkeyup = g.dialog = null;

		window.setTimeout(() => { d.parentNode.removeChild(d); }, 500);
	}

	// From KD2fw/js/xhr.js
	g.load = function(b,d,f,e){var a=new XMLHttpRequest();if(!a||!b)return false;if(a.overrideMimeType)a.overrideMimeType('text/xml');b+=(b.indexOf('?')+1?'&':'?')+(+(new Date));a.onreadystatechange=function(){if(a.readyState!=4)return;if((s=a.status)==200){if(!d)return true;var c=a.responseText;if(f=='json'){return((j=window.JSON)&&j.parse)?j.parse(c):eval('('+c.replace(/[\n\r]/g,'')+')')}d(c)}else if(e){e(s)}};a.open('GET',b,true);a.send(null)};







>
>
>
>
>
>
>
>
>
|







|
>




















<
|







96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141

142
143
144
145
146
147
148
149
		if (null !== g.dialog) {
			g.closeDialog();
		}

		g.dialog = document.createElement('dialog');
		g.dialog.id = 'dialog';
		g.dialog.open = true;

		var btn = document.createElement('button');
		btn.className = 'icn-btn';
		btn.setAttribute('data-icon', '✘');
		btn.type = 'button';
		btn.innerHTML = 'Fermer';
		btn.onclick = g.closeDialog;
		g.dialog.appendChild(btn);

		content.style.opacity = g.dialog.style.opacity = 0;
		g.dialog.appendChild(content);
		g.dialog.onclick = (e) => { if (e.target == g.dialog) g.closeDialog(); };
		window.onkeyup = (e) => { if (e.key == 'Escape') g.closeDialog(); };

		document.body.appendChild(g.dialog);

		// Restore CSS defaults
		window.setTimeout(() => { g.dialog.style.opacity = ''; }, 50);
		window.setTimeout(() => { content.style.opacity = ''; }, 100);
	}

	g.openFrameDialog = function (url) {
		var iframe = document.createElement('iframe');
		iframe.src = url;
		iframe.name = 'dialog';
		iframe.frameborder = '0';
		iframe.scrolling = 'yes';
		iframe.width = iframe.height = 0;
		iframe.onload = () => { iframe.contentWindow.onkeyup = (e) => { if (e.key == 'Escape') g.closeDialog(); };}

		g.openDialog(iframe);
	};

	g.closeDialog = function () {
		if (null === g.dialog) {
			return;
		}

		var d = g.dialog;

		d.style.opacity = 0;
		window.onkeyup = g.dialog = null;

		window.setTimeout(() => { d.parentNode.removeChild(d); }, 500);
	}

	// From KD2fw/js/xhr.js
	g.load = function(b,d,f,e){var a=new XMLHttpRequest();if(!a||!b)return false;if(a.overrideMimeType)a.overrideMimeType('text/xml');b+=(b.indexOf('?')+1?'&':'?')+(+(new Date));a.onreadystatechange=function(){if(a.readyState!=4)return;if((s=a.status)==200){if(!d)return true;var c=a.responseText;if(f=='json'){return((j=window.JSON)&&j.parse)?j.parse(c):eval('('+c.replace(/[\n\r]/g,'')+')')}d(c)}else if(e){e(s)}};a.open('GET',b,true);a.send(null)};
252
253
254
255
256
257
258




259
260
261
262
263
264
265

		i.appendChild(span);
		g.closeDialog();
		i.firstChild.focus();
	};

	g.formatMoney = (v) => {




		var s = v < 0 ? '-' : '';
		v = '' + Math.abs(v);
		return s + (v.substr(0, v.length-2) || '0') + ',' + ('00' + v).substr(-2);
	};

	g.getMoneyAsInt = (v) => {
		v = v.replace(/[^0-9.,]/, '');







>
>
>
>







261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278

		i.appendChild(span);
		g.closeDialog();
		i.firstChild.focus();
	};

	g.formatMoney = (v) => {
		if (!v) {
			return '0,00';
		}

		var s = v < 0 ? '-' : '';
		v = '' + Math.abs(v);
		return s + (v.substr(0, v.length-2) || '0') + ',' + ('00' + v).substr(-2);
	};

	g.getMoneyAsInt = (v) => {
		v = v.replace(/[^0-9.,]/, '');