initial commit
[ckanext-datagovau.git] / ckanext / dataset_form.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
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
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
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
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
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
<form id="dataset-edit" method="post" 
  py:attrs="{'class':'has-errors'} if errors else {}"
  xmlns:i18n="http://genshi.edgewall.org/i18n"
  xmlns:py="http://genshi.edgewall.org/"
  xmlns:xi="http://www.w3.org/2001/XInclude">
 
 
<div class="error-explanation" py:if="error_summary">
<h2>Errors in form</h2>
<p>The form contains invalid entries:</p>
<ul>
  <li py:for="key, error in error_summary.items()">${"%s: %s" % (key if not key=='Name' else 'URL', error)}
    <py:if test="key=='Resources'">
      <ul>
        <py:for each="idx, errordict in enumerate(errors.get('resources', []))">
          <li py:if="errordict">
            Resource ${idx}:
            <ul>
              <li py:for="thiskey, thiserror in errordict.items()">${thiskey}: <py:for each="errorinfo in thiserror">${errorinfo}; </py:for></li>
            </ul>
          </li>
        </py:for>
      </ul>
    </py:if>
  </li>
  <script>var global_form_errors = ${h.dump_json(errors)};</script>
</ul>
</div>
 
<fieldset id="basic-information">
  <dl>
    <dt class="title-label"><label class="field_opt" for="title">Title</label></dt>
    <dd class="title-field">
      <input id="title"
        class="js-title"
        name="title" type="text"
        value="${data.get('title', '')}"
        placeholder="${_('A short descriptive title for the dataset')}"
      />
    </dd>
    <dd class="title-instructions field_error" py:if="errors.get('title', '')">${errors.get('title', '')}</dd>
 
    <dt class="name-label"><label class="field_req" for="name">Url</label></dt>
    <dd class="name-field">
      <span class="url-text">${h.url(controller='package', action='search')+'/'}<span class="js-url-viewmode js-url-suffix">&nbsp;</span><a href="#" class="url-edit js-url-viewmode">(edit)</a></span>
      <input style="display: none;" id="name" maxlength="100" name="name" type="text" class="url-input js-url-editmode js-url-input" value="${data.get('name', '')}" />
      <p class="js-url-is-valid">&nbsp;</p>
      <p class="url-is-long">Warning: URL is very long. Consider changing it to something shorter.</p>
    </dd>
    <dd style="display: none;" class="js-url-editmode name-instructions basic">2+ characters, lowercase, using only 'a-z0-9' and '-_'</dd>
    <dd class="js-url-editmode name-instructions field_error" py:if="errors.get('name', '')">${errors.get('name', '')}</dd>
 
    <dt class="homepage-label"><label class="field_opt" for="url">Home Page</label></dt>
    <dd class="homepage-field"><input id="url" name="url" type="text" value="${data.get('url', '')}"/></dd>
    <dd class="homepage-instructions instructions basic">The URL for the web page describing the data (not the data itself).</dd>
    <dd class="homepage-instructions hints">e.g. http://www.example.com/growth-figures.html</dd>
    <dd class="homepage-instructions field_error" py:if="errors.get('url', '')">${errors.get('url', '')}</dd>
 
    <dt class="license-label"><label class="field_opt" for="license_id">License</label></dt>
    <dd class="license-field">
      <select id="license_id" name="license_id">
        <py:for each="licence_desc, licence_id in c.licences">
          <option value="${licence_id}" py:attrs="{'selected': 'selected' if data.get('license_id', '') == licence_id else None}" >${licence_desc}</option>
        </py:for>
      </select>
    </dd>
    <dd class="license-instructions instructions basic">(Don't worry if you don't know which license the data has been released under).</dd>
 
    <dt class="description-label"><label class="field_opt" for="notes">Description</label></dt>
    <dd class="description-field"><div class="markdown-editor">
      <ul class="button-row">
        <li><button class="pretty-button js-markdown-edit depressed">Edit</button></li>
        <li><button class="pretty-button js-markdown-preview">Preview</button></li>
      </ul>
      <textarea class="markdown-input" name="notes" id="notes" placeholder="${_('Start with a summary sentence ...')}">${data.get('notes','')}</textarea>
      <div class="markdown-preview" style="display: none;"></div>
      <span class="hints">You can use <a href="http://daringfireball.net/projects/markdown/syntax" target="_blank">Markdown formatting</a> here.</span>
      <!--
      <dd class="instructions basic">The main description of the dataset</dd>
      <dd class="instructions further">It is often displayed with the dataset title. In particular, it should start with a short sentence that describes the dataset succinctly, because the first few words alone may be used in some views of the datasets.</dd>
      -->
    </div></dd>
    <dt class="groups-label">
      Groups
    </dt>
    <dd class="groups-field">
      <dl>
        <py:for each="num, group in enumerate(data.get('groups', []))">
            <?python
            authorized_group = [group_authz for group_authz in c.groups_authz if group_authz['id'] == group['id']]
            authorized_group = authorized_group[0] if authorized_group else None
            ?>
 
          <dt py:if="'id' in group">
          <input type="${'checkbox' if authorized_group else 'hidden'}" name="groups__${num}__id" checked="checked" value="${group['id']}" />
          <input type="hidden" name="groups__${num}__name" value="${group.get('name', authorized_group['name'] if authorized_group else '')}" />
          </dt>     
          <dd py:if="'id' in group"><label for="groups__${num}__checked">${group.get('name', authorized_group['name'] if authorized_group else '')}</label></dd>
        </py:for>
 
        <dt>Add to:</dt>
        <dd py:if="c.groups_available"> 
          <select id="groups__${len(data.get('groups', []))}__id" name="groups__${len(data.get('groups', []))}__id">
            <option selected="selected" value="">(None)</option>
            <py:for each="group in c.groups_available">
            <option value="${group['id']}" >${group['name']}</option>
            </py:for>
          </select>
        </dd> 
        <dd py:if="not c.groups_available"><em>Cannot add any groups.</em></dd>
      </dl>
    </dd>
    <dt class="tags-label">
      Tags
    </dt>
    <dd class="tags-field">
      <input class="long autocomplete-tag" id="tag_string" name="tag_string" size="60" type="text" 
               value="${data.get('tag_string') or ', '.join([tag['name'] for tag in data.get('tags', []) if not tag.get('vocabulary_id')])}" />
    </dd>
    <dd class="tags-instructions instructions basic" i18n:msg="">Comma-separated terms that may link this dataset to similar ones. For more information on conventions, see <a href="http://wiki.ckan.org/Managing_Datasets#Tag_Conventions">this wiki page</a>.</dd>
    <dd class="tags-instructions hints">e.g. pollution, rivers, water quality</dd>
    <dd class="tags-instructions field_error" py:if="errors.get('tag_string', '')">${errors.get('tag_string', '')}</dd>
  </dl>
 
  <dl py:if="c.genre_tags">
    <dt><label class="field_opt" for="tags_vocab">Musical Genre</label></dt>
    <dd>
      <select id="genre_tags" class="chzn-select" name="genre_tags" size="60" multiple="multiple">
        <py:for each="tag in c.genre_tags">
          <py:choose test="">
          <option py:when="tag in data.get('genre_tags_selected', [])" selected="selected" value="${tag}">${tag}</option>
          <option py:otherwise="" value="${tag}">${tag}</option>
          </py:choose>
        </py:for>
      </select>
    </dd>
    <dd class="tags-instructions field_error" py:if="errors.get('genre_tag_string', '')">${errors.get('genre_tag_string', '')}</dd>
  </dl>
 
  <dl py:if="c.composer_tags">
    <dt><label class="field_opt" for="tags_vocab">Composer</label></dt>
    <dd>
      <select id="composer_tags" class="chzn-select" name="composer_tags" size="60" multiple="multiple">
        <py:for each="tag in c.composer_tags">
          <py:choose test="">
          <option py:when="tag in data.get('composer_tags_selected', [])" selected="selected" value="${tag}">${tag}</option>
          <option py:otherwise="" value="${tag}">${tag}</option>
          </py:choose>
        </py:for>
      </select>
    </dd>
    <dd class="tags-instructions field_error" py:if="errors.get('composer_tag_string', '')">${errors.get('composer_tag_string', '')}</dd>
  </dl>
</fieldset>
 
<fieldset id="resources">
  <div class="instructions">
    <h3>Add resources:</h3>
    <p>Upload or link data files, APIs and other materials related to your dataset.</p>
  </div>
  <div class="js-resource-edit-barebones">
    <!-- The resource editor deletes these fields and replaces them with a dynamic editor.
         They are required for the form to render correctly when not in resource-edit mode. -->
    <py:for each="num,res in enumerate(data.get('resources', []))">
      <py:for each="field in res.keys()">
      <input type="hidden" name="resources__${res.get('position')}__${field}" value="${res.get(field)}" />
      </py:for>
    </py:for>
  </div>
  <ul class="resource-list resource-list-edit drag-drop-list">
  </ul>
  <ul class="resource-list resource-list-add">
    <li><a href="#" class="js-resource-add">${h.icon('page_white_add')}New resource...</a></li>
  </ul>
  <div style="display: none;" class="resource-panel">
    <button class="pretty-button danger resource-panel-close">x</button>
    <div class="resource-details resource-add">
      <ul class="button-row">
        <li><h4>Add a resource:</h4></li>
        <li><button class="pretty-button js-link-file">Link to a file</button></li>
        <li><button class="pretty-button js-link-api">Link to an API</button></li>
        <li class="js-upload-file ckan-logged-in" style="display: none;"><button class="pretty-button js-upload-file">Upload a file</button></li>
      </ul>
    </div>
  </div>
</fieldset>
 
<fieldset id='further-information'>
  <dl>
    <dt><label class="field_opt" for="author">Author</label><