1 {% extends "master-admin.html" %}
4 $( document ).on("click", ".add-field",
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()
11 var inputFields = lastRow.find("input")
12 for (i = 0; i < inputFields.length; i++) {
13 $(inputFields[i]).prop("disabled", false)
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])
25 $(inputFields[i]).attr("value", "")
27 $(newRow).appendTo(ourTable)
28 $(buttonRow).appendTo(ourTable)
32 $("#uploadFile").on("change", function()
34 var files = !!this.files ? this.files : [];
35 if (!files.length || !window.FileReader) return; // no file selected, or no FileReader support
37 if (/^image/.test( files[0].type)){ // only image file
38 var reader = new FileReader(); // instance of the FileReader
39 reader.readAsDataURL(files[0]); // read the local file
41 reader.onloadend = function(e){ // set image data as background of div
42 var contents = e.target.result;
44 window.alert('Image file is unreadable')
45 document.getElementById('uploadFile').value = null;
48 $("#imagePreview").css("background-image", "url("+this.result+")");
58 <div class="col-md-3 col-sm-3 col-xs-6">
61 <div class="col-md-3 col-sm-3 col-xs-6" role="alert">
63 <div class="alert alert-{{message_type}}">
73 <form class="form-horizontal" role="form" id="{{ name }}" action="{{ action }}" method="post" enctype="multipart/form-data"">
74 {% for k, v in config.iteritems() %}
75 <div class="form-group">
76 <label class="col-sm-2" for="{{ v.name }}">{{ v.name }}:</label>
77 <div class="col-sm-10">
78 {% set value = v.get_value() -%}
79 {% if v.__class__.__name__ in ['String', 'Template'] -%}
80 <input type="text" class="form-control" name="{{ v.name }}"
84 {% if v.is_readonly() -%}
88 {% elif v.__class__.__name__ == 'Image' -%}
89 <!-- FIXME: This is limited to a single instance of Image -->
91 <img src="{{ value }}"
92 height="100" width="200"
96 <input type="file" name="{{ v.name }}"
100 style="display: none;" />
101 <input type="button" value="Select Image..." onclick="document.getElementById('uploadFile').click();" />
103 <div id="imagePreview"></div>
104 {% elif v.__class__.__name__ == 'List' -%}
105 <textarea class="form-control" name="{{ v.name }}"
106 {% if v.is_readonly() -%}
111 {{- value|join('\n') -}}
114 {% elif v.__class__.__name__ == 'Choice' -%}
115 {% set entries = v.get_allowed() -%}
117 {% for e in entries -%}
118 <div class="col-md-4">
119 <input type="checkbox" name="{{ v.name }}_{{ e }}"
120 {%- if value and e in value %}
123 {% if v.is_readonly() -%}
130 {% elif v.__class__.__name__ == 'Pick' -%}
131 {% set entries = v.get_allowed() -%}
133 {% for e in entries -%}
134 <div class="col-md-4">
135 <input type="radio" name="{{ v.name }}" value="{{ e }}"
139 {% if v.is_readonly() -%}
146 {% elif v.__class__.__name__ == 'Condition' -%}
147 <input type="checkbox" name="{{ v.name }}"
151 {% if v.is_readonly() -%}
155 {% elif v.__class__.__name__ == 'ComplexList' -%}
156 <table class="table table-striped extensible-table">
157 <tr><th>#</th><th>Name</th><th>Delete</th></tr>
158 {% for line in value -%}
159 {%- set basename = "%s %d-"|format(v.name, loop.index0) -%}
160 <tr class="list-field">
161 <td>{{loop.index}}</td>
163 <input type="text" name="{{basename}}name"
164 {%- if line.__class__.__name__ == 'list' -%}
165 value="{{ line|join(' / ') }}"
169 {% if v.is_readonly() -%}
175 <input type="checkbox" name="{{basename}}delete">
176 <!-- Never checked by default -->
180 <!-- Template for new row -->
181 {%- set basename = "%s %d-"|format(v.name, value|length) -%}
182 <tr class="list-field" style="display:none">
183 <td>{{value|length + 1}}</td>
185 <input type="text" name="{{basename}}name" value=""
189 <input type="checkbox" name="{{basename}}delete"
193 <!-- End of Template -->
195 <td><button class="btn add-field" type="button"> + </button></td>
199 {% elif v.__class__.__name__ == 'MappingList' -%}
200 <table class="table table-striped extensible-table">
201 <tr><th>#</th><th>From</th><th>To</th><th>Delete</th></tr>
202 {% for line in value -%}
203 {%- set basename = "%s %d-"|format(v.name, loop.index0) -%}
204 <tr class="list-field">
205 <td>{{loop.index}}</td>
207 <input type="text" name="{{basename}}from"
208 {% if line[0].__class__.__name__ == 'list' -%}
209 value="{{ line[0]|join(' / ') }}"
211 value="{{ line[0] }}"
216 <input type="text" name="{{basename}}to"
217 {% if line[1].__class__.__name__ == 'list' -%}
218 value="{{ line[1]|join(' / ') }}"
220 value="{{ line[1] }}"
225 <input type="checkbox" name="{{basename}}delete">
226 <!-- Never checked by default -->
230 <!-- Template for new row -->
231 {%- set basename = "%s %d-"|format(v.name, value|length) -%}
232 <tr class="list-field" style="display:none">
233 <td>{{value|length + 1}}</td>
235 <input type="text" name="{{basename}}from" value=""
239 <input type="text" name="{{basename}}to"
243 <input type="checkbox" name="{{basename}}delete"
245 <!-- Never checked by default -->
248 <!-- End of Template -->
250 <td><button class="btn add-field" type="button"> + </button></td>
255 {{ v.__class__.__name__ }}
257 <span class="help-block">{{ v.description }}</span>
264 <button id="submit" class="btn btn-primary" name="submit" type="submit" value="Submit">
267 <a href="{{ back }}" class="btn btn-default" title="Back">Back</a>