Use disabled template for mappings and lists
[cascardo/ipsilon.git] / templates / admin / plugin_config.html
1 {% extends "master-admin.html" %}
2 {% block scripts %}
3     <script>
4         $( document ).on("click", ".add-field",
5             function() {
6                 var buttonRow = $(this).parents(".add-row")
7                 var ourTable = $(this).parents(".extensible-table")
8                 var lastRow = $(ourTable).find(".list-field:last")
9                 var newRow = $(lastRow).clone()
10                 lastRow.show()
11                 var inputFields = lastRow.find("input")
12                 for (i = 0; i < inputFields.length; i++) {
13                     $(inputFields[i]).prop("disabled", false)
14                 }
15                 var lastIndex = parseInt(newRow.find("td:first").text())
16                 newRow.find("td:first").text(lastIndex + 1)
17                 var inputFields = newRow.find("input")
18                 for (i = 0; i < inputFields.length; i++) {
19                     var separator = (lastIndex-1).toString()+"-"
20                     var nArr = $(inputFields[i]).attr("name").split(separator)
21                     var newidx = lastIndex.toString()+"-"
22                     if (nArr.length === 2) {
23                         $(inputFields[i]).attr("name", nArr[0]+newidx+nArr[1])
24                     }
25                     $(inputFields[i]).attr("value", "")
26                 }
27                 $(newRow).appendTo(ourTable)
28                 $(buttonRow).appendTo(ourTable)
29             }
30         );
31     </script>
32 {% endblock %}
33 {% block main %}
34 {% if user.is_admin %}
35
36     <div class = "row">
37         <div class="col-md-3 col-sm-3 col-xs-6">
38             <h2>{{ title }}</h2>
39         </div>
40         <div class="col-md-3 col-sm-3 col-xs-6" role="alert">
41           {% if message %}
42             <div class="alert alert-{{message_type}}">
43                 <p>{{ message }}</p>
44             </div>
45           {% endif %}
46         </div>
47     </div>
48
49     <hr>
50
51     <div id="options">
52         <form class="form-horizontal" role="form" id="{{ name }}" action="{{ action }}" method="post" enctype="application/x-www-form-urlencoded">
53         {% for k, v in config.iteritems() %}
54             <div class="form-group">
55               <label class="col-sm-2" for="{{ v.name }}">{{ v.name }}:</label>
56               <div class="col-sm-10">
57               {% set value = v.get_value() -%}
58               {% if v.__class__.__name__ in ['String', 'Template'] -%}
59                 <input type="text" class="form-control" name="{{ v.name }}"
60                   {%- if value %}
61                     value="{{ value }}"
62                   {%- endif -%}
63                 >
64               {% elif v.__class__.__name__ == 'List' -%}
65                 <textarea class="form-control" name="{{ v.name }}">
66                   {%- if value %}
67                     {{- value|join('\n') -}}
68                   {%- endif -%}
69                 </textarea>
70               {% elif v.__class__.__name__ == 'Choice' -%}
71                 {% set entries = v.get_allowed() -%}
72                 <div class="row">
73                 {% for e in entries -%}
74                   <div class="col-md-4">
75                     <input type="checkbox" name="{{ v.name }}_{{ e }}"
76                       {%- if value and e in value %}
77                         checked="true"
78                       {%- endif -%}
79                     >&nbsp;{{ e }}
80                   </div>
81                 {% endfor %}
82                 </div>
83               {% elif v.__class__.__name__ == 'Pick' -%}
84                 {% set entries = v.get_allowed() -%}
85                 <div class="row">
86                 {% for e in entries -%}
87                   <div class="col-md-4">
88                     <input type="radio" name="{{ v.name }}" value="{{ e }}"
89                       {%- if e == value %}
90                         checked="true"
91                       {%- endif -%}
92                     >&nbsp;{{ e }}
93                   </div>
94                 {% endfor %}
95                 </div>
96               {% elif v.__class__.__name__ == 'Condition' -%}
97                 <input type="checkbox" name="{{ v.name }}"
98                   {%- if value %}
99                     checked="true"
100                   {% endif -%}
101                 >
102               {% elif v.__class__.__name__ == 'ComplexList' -%}
103                 <table class="table table-striped extensible-table">
104                 <tr><th>#</th><th>Name</th><th>Delete</th></tr>
105                 {% for line in value -%}
106                     {%- set basename = "%s %d-"|format(v.name, loop.index0) -%}
107                 <tr class="list-field">
108                     <td>{{loop.index}}</td>
109                     <td>
110                       <input type="text" name="{{basename}}name"
111                         {%- if line.__class__.__name__ == 'list' -%}
112                           value="{{ line|join(' / ') }}"
113                         {%- else -%}
114                           value="{{ line }}"
115                         {%- endif -%}
116                       >
117                     </td>
118                     <td>
119                       <input type="checkbox" name="{{basename}}delete">
120                       <!-- Never checked by default -->
121                     </td>
122                 </tr>
123                 {% endfor -%}
124                 <!-- Template for new row -->
125                 {%- set basename = "%s %d-"|format(v.name, value|length) -%}
126                 <tr class="list-field" style="display:none">
127                     <td>{{value|length + 1}}</td>
128                     <td>
129                       <input type="text" name="{{basename}}name" value=""
130                              disabled="disabled">
131                     </td>
132                     <td>
133                       <input type="checkbox" name="{{basename}}delete"
134                              disabled="disabled">
135                     </td>
136                 </tr>
137                 <!-- End of Template -->
138                 <tr class="add-row">
139                     <td><button class="btn add-field" type="button"> + </button></td>
140                     <td colspan=3 />
141                 </tr>
142                 </table>
143               {% elif v.__class__.__name__ == 'MappingList' -%}
144                 <table class="table table-striped extensible-table">
145                 <tr><th>#</th><th>From</th><th>To</th><th>Delete</th></tr>
146                 {% for line in value -%}
147                     {%- set basename = "%s %d-"|format(v.name, loop.index0) -%}
148                 <tr class="list-field">
149                     <td>{{loop.index}}</td>
150                     <td>
151                       <input type="text" name="{{basename}}from"
152                         {% if line[0].__class__.__name__ == 'list' -%}
153                           value="{{ line[0]|join(' / ') }}"
154                         {% else -%}
155                           value="{{ line[0] }}"
156                         {% endif -%}
157                       >
158                     </td>
159                     <td>
160                       <input type="text" name="{{basename}}to"
161                         {% if line[1].__class__.__name__ == 'list' -%}
162                           value="{{ line[1]|join(' / ') }}"
163                         {% else -%}
164                           value="{{ line[1] }}"
165                         {% endif -%}
166                       >
167                     </td>
168                     <td>
169                       <input type="checkbox" name="{{basename}}delete">
170                       <!-- Never checked by default -->
171                     </td>
172                 </tr>
173                 {% endfor -%}
174                 <!-- Template for new row -->
175                 {%- set basename = "%s %d-"|format(v.name, value|length) -%}
176                 <tr class="list-field" style="display:none">
177                     <td>{{value|length + 1}}</td>
178                     <td>
179                       <input type="text" name="{{basename}}from" value=""
180                              disabled="disabled">
181                     </td>
182                     <td>
183                       <input type="text" name="{{basename}}to"
184                              disabled="disabled">
185                     </td>
186                     <td>
187                       <input type="checkbox" name="{{basename}}delete"
188                              disabled="disabled">
189                       <!-- Never checked by default -->
190                     </td>
191                 </tr>
192                 <!-- End of Template -->
193                 <tr class="add-row">
194                     <td><button class="btn add-field" type="button"> + </button></td>
195                     <td colspan=3 />
196                 </tr>
197                 </table>
198               {% else -%}
199                 {{ v.__class__.__name__ }}
200               {% endif -%}
201                 <span class="help-block">{{ v.description }}</span>
202               </div>
203             </div>
204             <hr>
205         {% endfor %}
206
207           <p>
208             <button id="submit" class="btn btn-primary" name="submit" type="submit" value="Submit">
209             Save
210             </button>
211             <a href="{{ back }}" class="btn btn-default" title="Back">Back</a>
212           </p>
213         </form>
214     </div>
215
216 {% endif %}
217 {% endblock %}